我真的很难改变我的画布绘制图像,所以我想我会看到是否有人可以在这里协助我或提供建议。
我在画布上画了一个静态旗帜,我还画了一面挥动的旗帜。我试图让这个标志在鼠标悬停时挥手。
我最初认为我将不得不创建两个单独的文件,一个用于静态文件,另一个用于挥动方面。然后使用window.location = canvas.toDataURL(“image /");.
将每个图像保存为jpg / gif图像但我刚刚发现你可以通过jquery / hover在同一个文件中完成所有这些操作。这似乎更简单,更有效的方式。
以下是挥动旗帜的代码:
window.onload = function(){
var flag = document.getElementById('banglaFlag');
banglaStatic( flag, 320 );
var timer = banglaWave( flag, 30, 15, 200, 200 );
};
function banglaStatic( canvas, width ){
//Drawing the Bangladesh flag.
//Declaring variables that regard width and height of the canvas.
//Variables C to L are needed for the waving function.
var a = width / 1.9;
var b = 200;
var c = 7*a/13;
var l = a / 13;
canvas.width = b;
canvas.height = a;
var ctx = canvas.getContext('2d');
var radius = 45;
};
function banglaWave( canvas, wavelength, amplitude, period, shading ){
var fps = 30;
var ctx = canvas.getContext('2d');
var w = canvas.width, h = canvas.height;
var od = ctx.getImageData(0,0,w,h).data;
// var ct = 0, st=new Date;
return setInterval(function(){
var id = ctx.getImageData(0,0,w,h);
var d = id.data;
var now = (new Date)/period;
for (var y=0;y<h;++y){
var lastO=0,shade=0;
for (var x=0;x<w;++x){
var px = (y*w + x)*4;
var o = Math.sin(x/wavelength-now)*amplitude*x/w;
var opx = ((y+o<<0)*w + x)*4;
shade = (o-lastO)*shading;
d[px ] = od[opx ]+shade;
d[px+1] = od[opx+1]+shade;
d[px+2] = od[opx+2]+shade;
d[px+3] = od[opx+3];
lastO = o;
}
}
ctx.putImageData(id,0,0);
// if ((++ct)%100 == 0) console.log( 1000 * ct / (new Date - st));
},1000/fps);
}
提前感谢您的任何建议/协助。
答案 0 :(得分:0)
我不确定你的问题在哪里。我没有看到任何事件处理代码,所以我认为这是你的问题:
定义一个“处理鼠标事件”的函数。例如,如果要在用户将鼠标移到其上时移动标记,请定义类似:
的内容function mouseMove(event) {
var mouseX,
mouseY;
event.preventDefault(); // stops browser to do what it normally does
// determine where mouse is
mouseX = event.pageX;
mouseY = event.pageY;
// do something useful, e.g. change the flag to waving when mouse is over flag
}
然后,在鼠标移动时注册要调用的函数:
canvas.addEventListener("mousemove", mouseMove, false);
canvas
是您在其上绘制标志的画布,"mousemove"
是事件的名称(更多存在,例如“mousedown”,“mouseup”,“mouseout”(离开画布) ,“mousewheel”等),mouseMove
是函数的名称(事件处理程序,因为它被调用)。
事件与浏览器(甚至是浏览器版本)略有不同,因此如果您需要跨浏览器,则可能需要实现不同的事件处理程序。
希望这有助于......
答案 1 :(得分:0)
画布就像一张纸。没有任何物体可以悬停。
做你想做的只是,在旗帜上绑定一个区域,
按照'virtualnobi'回答并计算鼠标坐标是否落在该区域上,
如果真的做你想做的事。
像
if (mouseX<100 && mouseX>0 && mouseY>0 && mouseY<100){
//animate the flag
}
使用mouseX=event.clientX;
mouseY=event.clientY;
有界区域是x =(0,100),y =(0,100)这里。