我是画布的新手,我想知道如何在能够引用鼠标位置的同时获得“步进”事件(例如每半秒执行一次),例如,如果我想每 0.5 次在鼠标位置绘制一些东西第二个独立于鼠标移动。
4 回答
将新的 HTML5 功能requestAnimationFrame
与画布一起使用,而不是setInterval
为了setTimeout
获得更好的性能。requestAnimationFrame
例如确保当用户切换到另一个选项卡时,动画会暂停 = 节省 CPU。要支持所有浏览器使用 shim 层,请参见示例:
//shim layer
window.requestAnimFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000 / 60);
};
function animate() {
requestAnimFrame( animate );
draw();
}
function draw()
{
// handle time interval here
// actual code here
}
有关更多信息,请参阅(包括如何处理时间间隔的提示):
您可能想使用setInterval(yourFunction, delay)
.
'yourFunction' 很好......你的功能和'延迟'是以毫秒为单位的间隔时间。
在您的情况下,这看起来像:
//alway's define stuff before you use it
function drawSomething(){
//your code here
}
window.setInterval(drawSomething, 500); //this is your 0.5 sec stepped interval
参见(例如)MDN
祝你好运!
您将不得不将mousemove
事件全局绑定到文档正文并将鼠标位置保存到可公开访问的变量中(如window.mouseX
and window.mouseY
)。然后在 内setInterval(function () {
...
}, 500);
,您可以检索 和 的window.mouseX
值window.mouseY
。
据我所知,除了不断地全局跟踪鼠标的移动之外别无他法,因为 setInterval 不会为您创建带有鼠标数据的事件。
您可以使用每 0.5 秒检查一次鼠标位置setInterval
setInterval(step, 500);
function step() {
// do your stuff here
}
该函数step
将每 0.5 秒执行一次。