Javascript画布图像随着mousemove调用[重复]闪烁

问题描述 投票:0回答:2

每当我移动鼠标时,我都试图调用图像(重绘),但是问题是在移动鼠标时图像有时会不稳定地闪烁,这确实很烦人。

我试图从其他Stack Overflow帖子中找到答案,但它们与我的不太相似。

我简化了代码,使其易于理解。

事情是每当鼠标移动时我都必须调用图像,以便它与我编写的其他代码一起使用。

之所以以这种方式编写代码,是因为只要用户单击页面上的特定位置,就可以更改img.src。

进入更多细节,它基本上传递带有用户单击时更改img.src的图像路径的对象。

网页在不断变化,因此必须进行鼠标移动。

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

canvas.height = window.innerHeight;
canvas.width = window.innerWidth;

canvas.onmousemove = mousemove;

function mousemove(e){

    ctx.clearRect(0,0,canvas.width,canvas.height);
    var img = new Image();   // Create new img element
    img.addEventListener("load", function() {

       ctx.drawImage(img,100,100,400,400);
    }, false);

    img.src = 'images/reception.jpg';

}
javascript canvas mouseevent dom-events mousemove
2个回答
0
投票

jsFiddle:https://jsfiddle.net/efhf7oeo/1/

javascript

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

canvas.height = window.innerHeight;
canvas.width = window.innerWidth;

var images = new Array();
var currentLocation = 0;
var totalImages = 7;

for (var i = 0; i < totalImages; i++) {
    var img = new Image;
    switch (i) {
        case 0:
            img.src = "http://img.pokemondb.net/sprites/black-white/normal/mewtwo.png";
            break;
        case 1:
            img.src = "http://img.pokemondb.net/sprites/black-white/normal/keldeo-ordinary.png";
            break;
        case 2:
            img.src = "http://img.pokemondb.net/sprites/black-white/normal/darkrai.png";
            break;
        case 3:
            img.src = "http://floatzel.net/pokemon/black-white/sprites/images/5.png";
            break;
        case 4:
            img.src = "http://vignette1.wikia.nocookie.net/capx/images/0/03/001.png/revision/latest?cb=20140322003659";
            break;
        case 5:
            img.src = "http://img.pokemondb.net/sprites/black-white/normal/absol.png";
            break;
        case 6:
            img.src = "http://img.pokemondb.net/sprites/black-white/normal/dewgong.png";
            break;
        case 7:
            img.src = "http://orig05.deviantart.net/e770/f/2013/008/c/6/froakie_by_baconboy914-d5qvrjo.gif";
            break;
    }

    images.push(img);
}

function mousemove(e) {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(images[Math.floor((Math.random() * (totalImages - 1)) + 1)], 100, 100, 400, 400);
}

canvas.onmousemove = mousemove;

我创建了一个图像数组,我们首先填充它们,然后您可以在需要时调用它们。我刚刚完成此操作并在Chrome中对其进行了测试,对我来说效果很好


0
投票

我找到了一个解决方案,但我不确定为什么会起作用,我不认为这是完整的证据,但这就是我所做的。

代替此

function mousemove(e){

    ctx.clearRect(0,0,canvas.width,canvas.height);
    var img = new Image();   // Create new img element
    img.addEventListener("load", function() {

       ctx.drawImage(img,100,100,400,400);
    }, false);

    img.src = 'images/reception.jpg';

}

您将img.src放在clearRect的上方。

喜欢这样

img.src = 'images/reception.jpg';
ctx.clearRect(0,0,canvas.width,canvas.height);
© www.soinside.com 2019 - 2024. All rights reserved.