Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.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
Javascript Adobe Animate CC Canvas鼠标在舞台上的动作缓慢且断断续续_Javascript_Html_Canvas_Createjs - Fatal编程技术网

Javascript Adobe Animate CC Canvas鼠标在舞台上的动作缓慢且断断续续

Javascript Adobe Animate CC Canvas鼠标在舞台上的动作缓慢且断断续续,javascript,html,canvas,createjs,Javascript,Html,Canvas,Createjs,在AdobeAnimate CC HTML5 Canvas(createJS)中,我尝试做一些非常简单的事情,在将整个广告舞台置于上方时触发动画滚动,并在鼠标离开舞台时触发动画滚动。应该很简单,但事实并非如此。在stage上使用mouseenter和mouseleave很慢,只能间歇工作。这与mouseover和mouseout相同 以下是滞后且间歇的代码: stage.addEventListener("mouseenter", fl_MouseOverHandler.bind(this));

在AdobeAnimate CC HTML5 Canvas(createJS)中,我尝试做一些非常简单的事情,在将整个广告舞台置于<代码>上方时触发动画滚动,并在鼠标离开舞台时触发动画滚动。应该很简单,但事实并非如此。在
stage
上使用
mouseenter
mouseleave
很慢,只能间歇工作。这与
mouseover
mouseout
相同

以下是滞后且间歇的代码:

stage.addEventListener("mouseenter", fl_MouseOverHandler.bind(this));
stage.addEventListener("mouseleave", fl_MouseOutHandler.bind(this));

function fl_MouseOverHandler(){
    this.btnOverAnim.gotoAndPlay("on");
}

function fl_MouseOutHandler(){
    this.btnOverAnim.gotoAndPlay("off");
}
我还尝试了在舞台整个尺寸的按钮上使用
mouseover
mouseout
,我也遇到了同样的问题。(同样,这样做根本无法在一个框架内完成,而广告是在一个框架内完成的)。我把
var频率
调高到
90
,看看这是否有助于解决滞后问题,但事实并非如此

这是我尝试过的简单的
鼠标悬停
/
鼠标悬停
代码:

var frequency = 90;
stage.enableMouseOver(frequency);

this.bgCta.addEventListener("mouseover", fl_MouseOverHandler.bind(this));
this.bgCta.addEventListener("mouseout", fl_MouseOutHandler.bind(this));
上面写着“你可以通过使用
stage.mouseInBounds
mouseleave
/
mouseenter
事件来监控指针是否在画布上。”所以我想知道使用
stage.mouseInBounds
是否会有所帮助(但我在任何地方都找不到如何使用它的例子)。但实际上我认为这不会有什么帮助,因为我认为整个问题都是关于
createJS
没有在鼠标足够快的地方阅读

有人知道如何修复这种滞后和间歇点火吗?工作环境?为什么createJS不像纯js那样不断地监视
鼠标事件

另外,
createJS
中舞台上的
mouseenter
mouseleave
在平板电脑或手机上不起作用,这是一个问题,因此最好在整个舞台大小的按钮上安装
mouseover
mouseout
。我确实尝试过使用
mouseover
mouseout
并在按钮边缘和广告横幅边缘之间的按钮周围留出3个像素的空间,这很有帮助,但它仍然会间歇性地触发


请谈谈你的想法和想法

鼠标盖检查很昂贵。画布本质上只是一个位图,因此EaselJS无法使用浏览器中的鼠标事件(您只需为整个画布获取一个鼠标事件)。相反,EaselJS中的鼠标悬停要求将每个元素绘制到1x1像素的画布上,然后检查填充。这提供了完美的像素检测,但如果您检查了大量内容,或者检查得太频繁,则成本会很高

减少频率: 您似乎已将
频率设置为90。这真的很高(检查之间的间隔为11毫秒,基本上是试图达到90 fps)。默认值为10,这比一个好的帧速率要慢,但足够快,可以感觉到响应。你可能会把它降到20左右,给你一个精神振奋的检查,而不是不必要的高

修改交互性:您可以做的另一件事是准确过滤出检查的内容。默认情况下,所有显示对象都会被选中,但您可以通过在您不关心的任何对象上禁用
mouseEnabled
(将它们从检查中忽略),并在要作为单个对象处理的容器上禁用
mouseChildren
,来减少这种情况(因此,类似复杂按钮的内容只绘制一次,而不是单独绘制其所有内容)

希望有帮助

// Example
myBackground.mouseEnabled = false;
myButton.mouseChildren = false;