Javascript Adobe Animate CC Canvas鼠标在舞台上的动作缓慢且断断续续
在AdobeAnimate CC HTML5 Canvas(createJS)中,我尝试做一些非常简单的事情,在将整个广告舞台置于<代码>上方时触发动画滚动,并在鼠标离开舞台时触发动画滚动。应该很简单,但事实并非如此。在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));
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;