防止圆在 KineticJS 中闪烁

Posted

技术标签:

【中文标题】防止圆在 KineticJS 中闪烁【英文标题】:Prevent Circle from Flickering in KineticJS 【发布时间】:2012-12-10 04:16:20 【问题描述】:

当用户将鼠标光标放在多边形的轮廓上/附近时,应该会出现一个锚点并跟随鼠标的位置,但会捕捉到多边形的轮廓。

问题:mousemove 处理函数更新此锚点的位置时,锚点似乎闪烁。是什么导致闪烁和更新缓慢? KineticJS 示例here 似乎更新得很快。

此外,锚点没有捕捉到多边形的轮廓/笔划。怎样才能达到这种效果?

JSfiddle

【问题讨论】:

【参考方案1】:

您的mousemove 函数正在移动锚点。移动锚点后,您的鼠标将不再位于 polyHitArea 上方,因此您的 mouseleave 事件正在触发并隐藏锚点。

编辑

我能想到的防止这种情况发生的最好方法是将setVisible(false) 代码放入setTimeout 调用中——并在mouseoverAnchor 调用clearTimeout 上设置mouseenter 事件.

var polyHitArea._timeout = 0;

polyHitArea.on('mouseover', function(e) 
    clearTiemout(polyHitArea._timeout);
    mouseoverAnchor.setVisible(true);
    stage.draw();
);

polyHitArea.on('mouseleave', function(e) 
    clearTimeout(polyHitArea._timeout);
    polyHitArea._timeout = setTimeout(function()
        mouseoverAnchor.setVisible(false);
    , 25); // 25 ms enough time?
    stage.draw();
);

mouseoverAnchor.on('mouseenter', function(e) 
    clearTimeout(polyHitArea._timeout);
);

【讨论】:

这很有意义!有没有办法阻止锚触发mouseleave 事件?我尝试了mouseout 并遇到了同样的问题。 谢谢杰森。我试了一下,闪烁停止了,但是当我沿着正方形的边缘移动鼠标时,锚点没有跟随鼠标位置。锚点仅在鼠标退出锚点时更新其位置,希望锚点能够平滑地跟踪鼠标位置但受限于正方形的边缘。 jsfiddle.net/yZFFJ/8 听起来您需要将 mousemove 事件放在画布本身上并在那里执行所有需要的计算(进入边界,离开边界,是否显示锚点以及在什么位置)。

以上是关于防止圆在 KineticJS 中闪烁的主要内容,如果未能解决你的问题,请参考以下文章

KineticJS教程(1-2)

Chrome 和 Opera 中的 Kinetic JS 性能问题

为啥 KineticJS 文档中没有方法 draw()?

扩展 KineticJS - 自定义过滤器

KineticJs - 将图像合并到另一个图像上

html5 画布 kineticjs 事件