【问题标题】:Determine whether cursor is above some element in Raphael.js确定光标是否在 Raphael.js 中的某个元素上方
【发布时间】:2012-10-17 19:46:06
【问题描述】:

如何判断您的光标是否位于 Raphael.js 中的某个元素上?

if(mouse_is_over){
   //do this 
}
else{   
   //do this 
}

理想情况下,我想测试鼠标是否在我命名为“c”的圆圈上。

谢谢!

【问题讨论】:

  • 我不确定这是否有帮助,但你可以编写一个鼠标悬停函数,例如每当元素获得焦点时,将该元素的 mouse_is_over 设置为 true,当焦点丢失时 make mouse_is_over = false跨度>

标签: if-statement hover raphael


【解决方案1】:

我强烈建议使用 Raphael 的 Element.data 方法将您的私有的、特定于圈子的数据与每个项目相关联,然后在悬停处理程序中对这些数据进行操作(手动检测与 getElementByPoint 的交集在鼠标悬停时可能会很昂贵处理程序)。您可以使用data 存储任何内容:

var circle = paper.circle( ... );
circle.data( 'name', "My name is Jonas." ); // store a string!
circle.data( 'dataset', { ... } );          // store an object literal!
circle.data( 'click_handler', function()
    {
        console.log("Store a handler function!" );
    } );

此时,游戏变得非常简单。无论您使用 Raphael 的内置悬停处理...

circle.hover( function()
    {
        console.log("Just moved over '" + this.data("name") + "'" );
    }, function()
    {
        console.log("Just moved out of '" + this.data("name") + "'" );
    } );

...或鼠标悬停事件,例如,由 jQuery...

//  Don't forget to translate page coordinates relative to the paper!
var element = paper.getElementByPoint( x, y );
if ( element && element.data("name") == "c" )
{
    // bah, humbug
}

...逻辑是一样的。只需查询您与元素关联的应用程序数据,然后做您的事情。

我碰巧已经有一个糟糕的小脚本,可以在随机位置为圆圈设置动画,我retrofitted it 来适应你的场景。

【讨论】:

  • 为了帮助澄清我的问题,我将生成一组动态圈子。在随机位置可能有 2 个,也可能有 5 个。我如何测试我是否悬停在一个圆圈上,如果是,它是哪个圆圈?
  • 这很有帮助。我将修改我的答案以澄清。
  • 清晰、简短和有用的示例集。很好的答案。
  • 就我而言,我有许多 svg 路径(raphael 对象),并且在每个路径上放置一个悬停处理程序似乎有点重。 ... ... ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2011-09-03
  • 1970-01-01
  • 2011-03-24
  • 2011-05-14
相关资源
最近更新 更多