Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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
jQuery mouseleave带有动画元素的bug_Jquery_Jquery Animate_Mouseleave - Fatal编程技术网

jQuery mouseleave带有动画元素的bug

jQuery mouseleave带有动画元素的bug,jquery,jquery-animate,mouseleave,Jquery,Jquery Animate,Mouseleave,我碰到了一个奇怪的问题 如果移动鼠标,jQuery 1.4.1 mouseenter/mouseleave事件会正确触发,这不是什么大问题。但是,在某些浏览器中,当光标本身保持静止但元素被animate()移开时,它会出现错误 因此,想象一下这样的代码: jQuery('somelement').bind( { mouseenter: function(e) { log.debug("enter"); $(this).animate({left: 9999}, 2000

我碰到了一个奇怪的问题

如果移动鼠标,jQuery 1.4.1 mouseenter/mouseleave事件会正确触发,这不是什么大问题。但是,在某些浏览器中,当光标本身保持静止但元素被animate()移开时,它会出现错误

因此,想象一下这样的代码:

jQuery('somelement').bind(
{
   mouseenter: function(e) {
     log.debug("enter");
     $(this).animate({left: 9999}, 2000);
   },
   mouseleave: function() {
     log.debug("leave");
   }
});
如果将鼠标快速移动到图元上,然后将其停止,将根据浏览器得到不同的结果

FF3.6,Safari 4,IE7:mouseleave在光标离开动画元素时按预期启动,即使鼠标本身静止不动

IE6,IE8,Opera 9/10,Safari 3,Chrome:mouseleave即使元素在窗口外也不会触发。只需轻轻移动鼠标即可触发正确的mouseleave事件


有没有办法修复它?

不幸的是,mouseover、mouseleave、mouseover和mouseout函数似乎都绑定到鼠标,而不是实际对象。这在使用内联选项onmouseout等时也是如此

据我所知,对于你正在尝试做的事情,实际上没有一个很好的选择。如果这是一个绝对必要的函数,我会这样做

  • 为元素创建鼠标指针处理程序。当鼠标进入元素时,绑定mouseout和mousemove
  • 调用mousemove事件时,使用该事件对象在全局变量中存储鼠标的x和y位置
  • 使用自定义动画功能,通过while循环移动元素。在while循环中,检查元素是否已移出步骤2中存储的x和y坐标
  • 如果该元素已从x和y坐标中移出,请执行您需要执行的任何操作,并解除mousemove的绑定(否则它将占用不必要的资源)。如果调用步骤1中的mouseout,则该函数也应运行

  • 希望这是有道理的。如果我今天有更多的时间,我将制作一个提琴示例,这样您就可以看到它是如何工作的。

    刚才也谈到了这个问题。:)这里有一把小提琴来说明这个问题。