【发布时间】:2016-05-11 19:42:27
【问题描述】:
在使用 jQuery 鼠标事件时遇到了一些奇怪的事情。 检查 jsFiddle:https://jsfiddle.net/Lb8r3907/1/
我想要实现的是一个内部元素,当鼠标悬停在它上面时,指针元素将跟随你的光标,当你将鼠标移出内部元素时,指针就会被隐藏。
我有一个填充屏幕的外部元素,鼠标进入/离开该元素会显示和隐藏将跟随光标的指针元素。
$(function() {
$('.outer').on('mouseenter', function(){
console.log('MOUSE OVER OUTER!!');
if($('.pointer').is(':visible')){
$('.pointer').fadeOut(50);
}
});
//
$('.outer').on('mouseleave', function(){
console.log('MOUSE OUT OF OUTER!!!');
if(!$('.pointer').is(':visible')){
$('.pointer').fadeIn(50);
}
});
//
$('.inner').on('mousemove', function(e){
var mX = e.pageX-$('.inner').offset().left,
mY = e.pageY-$('.inner').offset().top;
$('.pointer').css({"top": mY+"px", "left": mX+"px"});
});
});
.outer { position:absolute; display:block; z-index:0; top:0px; left:0px; width:100%; height:100%; background-color:rgba(255,0,0,0.5); }
.inner { position:absolute; display:block; z-index:1; top:50%; left:50%; width:50%; height:25%; margin-top:-12.5%; margin-left:-25%; background-color:#fff; }
.inner .pointer { display:block; position:absolute; top:50%; left:50%; width:50px; height:50px; background-color:blue; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<body>
<div class="outer"></div>
<div class="inner">
<div class="pointer" style="display:none;"></div>
</div>
</body>
真正奇怪的是,当 mousemove 事件被激活时,它似乎延迟了 mouseleave 事件的触发。
我还注意到,延迟似乎只有在您将鼠标移到内部元素的右边缘或下边缘时才会发生。
任何人都可以提供任何关于为什么会发生这种情况的见解吗? 我真的很想知道如何解决这个问题,或者它是否是浏览器/jQuery 中的错误。
【问题讨论】:
标签: javascript jquery mouseevent mousemove