Javascript Internet Explorer中的mousemove问题
当事件目标位于Javascript Internet Explorer中的mousemove问题,javascript,internet-explorer,Javascript,Internet Explorer,当事件目标位于元素上方且缺少背景时,Internet explorer不会激发MouseMove事件 但当目标有背景时,它确实会注册事件。有人对此有解释吗?我在IE10、IE9和IE8中也有同样的行为 在这里拉小提琴: 又一个IE失败了!这与其说是一个答案,不如说是一个解决办法,但似乎效果不错: var is_ie = $.browser.msie; if(is_ie){ $('.main img').mousemove(function(e){ $('.pageX').
元素上方且缺少背景时,Internet explorer不会激发MouseMove事件
但当目标有背景时,它确实会注册事件。有人对此有解释吗?我在IE10、IE9和IE8中也有同样的行为
在这里拉小提琴:
又一个IE失败了!这与其说是一个答案,不如说是一个解决办法,但似乎效果不错:
var is_ie = $.browser.msie;
if(is_ie){
$('.main img').mousemove(function(e){
$('.pageX').text('pageX: '+e.pageX);
}
}
这是对
$('.overlay').mousemove功能的补充,所以也要保留这一功能,当然是可选的,即检查是可选的。当OP询问原因时,我的突破是:
直观解释更容易,因此首先让我们向img
s添加一个单击处理程序:
$('img').click(function() {
$('.pageX').text('img clicked!');
});
很公平。在Chrome/Firefox/not IE浏览器中单击图像,将不会发生任何事情,因为绝对定位的div
会覆盖它
现在在IE上试用它。img
的点击处理程序被触发!因此,它表明IE通过绝对定位的“透明”(无内容或背景)元素推动元素。更有趣的是,相对定位的元素遇到了相同的问题,在其中一个/两个元素上设置z-index
也不能解决这个问题。当然,由于图像位于覆盖层上方,它不会触发覆盖层的mousemove
事件
一种解决方法是为覆盖提供一些“填充”,例如background:rgba(0,0,0,0)
将强制IE将绝对定位的元素保持在顶部。如果需要支持不支持rgba的浏览器,请使用1x1px透明gif作为背景
我从未在任何规范中看到过这种定义,也没有正式报告为bug。没有逻辑或理由让没有内容或背景的绝对定位元素遭受z-index问题,因此我将其称为另一个IE bug。也许在网上报道会有用
另外,相关问题:+1个有趣的问题。我知道这不是你要求的,但是给叠加一个背景,比如background:rgba(0,0,0,0)代码>似乎在IE10预览中修复了它。您可以看到,在框中未被图像覆盖的部分,文本确实会更新。^实际上是相反的。覆盖层覆盖了图像。带有背景的覆盖会触发mousemove
。更有趣的是,如果在覆盖中添加一些文本内容而不对其应用任何背景样式,则只有在将鼠标移到文本上方时才会触发mousemove事件。还有一个我以前从未见过的IE bug。我想我只是不经常使用mousemove
。正如你的问题所暗示的那样,下方图像的position:absolute
与问题直接相关。例如,如果覆盖部分位于图像上方,则表明IE仅在您悬停位于绝对定位覆盖下方的图像时无法触发mousemove事件。img如何在绝对定位“透明”上方结束div
我认为可能是当绝对定位元素没有背景时(即认为它不存在)。逻辑(@Derek嗯,是的,这就是我在上面一段中得出的结论。没有内容和背景的元素是我称之为“透明”的元素,这些元素存在z索引错误。当我说“不知道”时,我实际上是指类似的东西“我从未见过任何规范中定义的,也没有正式报告为错误”。我想这是一个更好的说法,将替换为答案。=]
感谢您的澄清:')