当事件目标位于<img>
元素上且缺少背景时,Internet Explorer不会触发onmousemove事件。Internet Explorer中的mousemove问题
但是它确实在目标有背景时注册事件。有没有人对此有过解释?我在IE10,IE9和IE8中有相同的行为。
小提琴这里: http://jsfiddle.net/xSpqE/2/
当事件目标位于<img>
元素上且缺少背景时,Internet Explorer不会触发onmousemove事件。Internet Explorer中的mousemove问题
但是它确实在目标有背景时注册事件。有没有人对此有过解释?我在IE10,IE9和IE8中有相同的行为。
小提琴这里: http://jsfiddle.net/xSpqE/2/
另一个IE失败!这更是一个解决方法不是一个答案,但它似乎好了工作:
var is_ie = $.browser.msie;
if(is_ie){
$('.main img').mousemove(function(e){
$('.pageX').text('pageX: '+e.pageX);
}
}
也就是说除了$('.overlay').mousemove
功能,所以只能暂时过了,当然is_ie
检查是可选的。
至于OP问是有原因的,这是我的突破:
它更容易直观地解释,所以首先让我们点击处理程序添加到img
S:
$('img').click(function() {
$('.pageX').text('img clicked!');
});
很公平。您在Chrome/Firefox /非IE浏览器中点击图片,因为绝对定位的div
覆盖它,所以不会发生任何事情。
现在试试IE。 img
的点击处理程序被解雇!因此它显示IE通过绝对定位的“透明”(无内容或背景)元素推送元素。更有趣的是,相对定位的元素会遇到同样的问题,并且在任一元素上设置z-index
也不会解决它。当然,由于图片位于叠加层上方,因此不会触发叠加层的事件。
解决方法是向覆盖图提供一些“填充”,例如background:rgba(0,0,0,0)
将强制IE将绝对定位的元素保留在顶部。 Fiddle。如果您需要支持没有rgba支持的浏览器,请使用1x1px透明gif作为背景。
我从来没有在任何规范中看到过这个定义,也没有正式报告过错误。没有内容和背景的绝对定位元素没有任何逻辑或理由可以承受这种Z-index问题,因此我将把它称为又一个IE错误。也许报告Microsoft forums会有用。
此外,相关问题:IE bug: absolutely-positioned element with a non-transparent background colour
'img如何在绝对定位的“透明”div上方结束我认为它可能是绝对定位的元素没有背景时,IE认为它不在那里。 IE逻辑。 :( –
@Derek好的,这就是我在上面的段落中总结的结论:没有内容和背景的元素就是我所说的“透明”,它们遭受了这个Z-index错误,当我说“不知道”时,我居然意思是“我从来没有见过这种在任何规范中定义过的,也没有官方报告过的错误”,我想这是一个更好的陈述,将其替换为答案。'=]' –
感谢您的澄清: “) –
+1有趣的问题。我知道这不是你所要求的,但给覆盖层一个背景,比如'background:rgba(0,0,0,0);'似乎可以在IE10预览中修复它。 [小提琴](http://jsfiddle.net/xSpqE/16/) –
您可以看到,在未被图像覆盖的方框部分,文字会更新。 – kenstone
^实际上是相反的。覆盖图覆盖图像。与背景叠加触发'mousemove'。更有趣的是,如果将某些文本内容添加到叠加层而不应用任何背景样式,则只有在将鼠标移动到文本上时才会触发mousemove事件。还有一个我以前从未遇到的IE错误。我想我只是不经常使用'mousemove'。 –