html 5 addEventListener问题与刷新画布元素
我在使用canvas元素正确触发addEventListener时遇到问题 问题: 当我将addEventLister添加到画布元素时,它会自动强制动画刷新率在触发事件侦听器的同时运行 基本上我有“setInterval(draw,500);”,它每500毫秒更新一次画布。如果没有事件侦听器,它将以预期的速率不断刷新;然而,当我添加一个动作监听器时,它会强制刷新画布并使所有动画加速 在源代码中,您将发现两个函数drawCircle和drawCircleTest,它们是专门为测试刷新问题而设计的 嗯,由于某种原因,源代码不想正确粘贴 源代码:html 5 addEventListener问题与刷新画布元素,html,event-handling,canvas,mouseevent,Html,Event Handling,Canvas,Mouseevent,我在使用canvas元素正确触发addEventListener时遇到问题 问题: 当我将addEventLister添加到画布元素时,它会自动强制动画刷新率在触发事件侦听器的同时运行 基本上我有“setInterval(draw,500);”,它每500毫秒更新一次画布。如果没有事件侦听器,它将以预期的速率不断刷新;然而,当我添加一个动作监听器时,它会强制刷新画布并使所有动画加速 在源代码中,您将发现两个函数drawCircle和drawCircleTest,它们是专门为测试刷新问题而设计的
提前感谢您的关注 因为在下次调用setInterval draw()时,只要将鼠标移到画布上,就会在mouseover事件上调用draw,因此mouseover draw()调用将testNum1的值增加了调用的mouseover事件的数量。我已经在这里的“控制台”输出的末尾添加了testNum1,以便您可以看到其影响(奇怪的是,这在chrome中无法正常工作。下面的链接可以) 解决方案是对mouseover事件使用不同的函数,该函数将clientHeight和clientWidth设置为draw范围之外声明的变量。看 我在任何函数之前添加了这些变量
var clientX, clientY;
这个函数用于设置它们
function changeCoords(e){
clientX = e.clientX;
clientY = e.clientY;
}
mouseover事件现在使用changeCoords,draw事件引用clientX和clientY,而不是e.clientX和e.clientY。因为在下次将setInterval draw()调用mouseover draw()时,只要将鼠标移动到画布上,就在mouseover事件上调用draw调用使testNum1的值增加了调用的mouseover事件的数量。我已经在这里的“控制台”输出的末尾添加了testNum1,以便您可以看到其影响(奇怪的是,这在chrome中无法正常工作。下面的链接可以) 解决方案是对mouseover事件使用不同的函数,该函数将clientHeight和clientWidth设置为draw范围之外声明的变量。看 我在任何函数之前添加了这些变量
var clientX, clientY;
这个函数用于设置它们
function changeCoords(e){
clientX = e.clientX;
clientY = e.clientY;
}
鼠标悬停事件现在使用changeCoords,draw事件引用clientX和clientY,而不是e.clientX和e.clientY。谢谢,这就成功了,我完全理解错误所在。非常棒的网站。谢谢,我完全理解这个错误。很棒的网站。