Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
html 5 addEventListener问题与刷新画布元素_Html_Event Handling_Canvas_Mouseevent - Fatal编程技术网

html 5 addEventListener问题与刷新画布元素

html 5 addEventListener问题与刷新画布元素,html,event-handling,canvas,mouseevent,Html,Event Handling,Canvas,Mouseevent,我在使用canvas元素正确触发addEventListener时遇到问题 问题: 当我将addEventLister添加到画布元素时,它会自动强制动画刷新率在触发事件侦听器的同时运行 基本上我有“setInterval(draw,500);”,它每500毫秒更新一次画布。如果没有事件侦听器,它将以预期的速率不断刷新;然而,当我添加一个动作监听器时,它会强制刷新画布并使所有动画加速 在源代码中,您将发现两个函数drawCircle和drawCircleTest,它们是专门为测试刷新问题而设计的

我在使用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。

谢谢,这就成功了,我完全理解错误所在。非常棒的网站。谢谢,我完全理解这个错误。很棒的网站。