确切地说,精确到50px。我知道它在某个地方的代码中,但我想我已经盯着它看了太久。
Backstory :我正在制作一个简单的jQuery插件,它会在悬停在图像上时添加放大镜效果。它运行正常,然后我添加了一些代码,从图像顶部进入时它开始变得奇怪。我使用firebug来查看图像的顶部偏移量和光标的pageY值之间是否存在差异。
在下面的链接中,您可以看到从上方移入它不会按时激活。
代码:
update: function(event) {
img.stop(); // To stop the image from constantly animating
img.lens.stop(); // Same for the lens
img.lens.leftmax = img.width + img.left;
img.lens.topmax = img.height + img.top;
img.lens.x = event.pageX - (vars.size / 2);
img.lens.y = event.pageY - (vars.size / 2);
img.lens.css({
left: img.lens.x + 'px',
top: img.lens.y + 'px'
});
console.log(img.top + ' : ' + event.pageY);
if (event.pageX >= img.lens.leftmax || event.pageY >= img.lens.topmax || event.pageX <= img.left || event.pageY <= img.top) {
img.lens.hide(); // Hide lens
if (options.caption) {
img.lens.caption.hide();
} // Hide Caption
if (options.overlay) {
methods.nooverlay();
}
// API Callback Exit
vars.onexit(img, img.lens);
} else {
// API Callback on entering
vars.onenter(img, img.lens);
if (options.overlay) {
methods.overlay();
}
methods.doMath(event); // Recalculate pos
img.lens.show(); // Show lens
img.lens.css({
backgroundPosition: img.lens.bgleft + 'px ' + img.lens.bgtop + 'px'
}); // Assign coordinates
if (options.caption) {
img.lens.caption.show(); // Show caption
img.lens.caption.x = img.lens.x + ((vars.size - img.lens.caption.outerWidth()) / 2); // Center caption
img.lens.caption.css({
left: img.lens.caption.x + 'px',
top: img.lens.y + vars.size + 'px'
}); // Assign coordinates
}
}
},
doMath: function(event) {
img.wr = img.Owidth / img.width;
img.hr = img.Oheight / img.height;
img.lens.bgleft = String(((event.pageX - img.left) * img.wr - vars.size / 2) * (-1));
img.lens.bgtop = String(((event.pageY - img.top) * img.hr - vars.size / 2) * (-1));
},
这些是使悬停动作起作用的主要功能(地图的一部分)以及我认为问题应该在哪里。代码很长,所以为了便于阅读,我将添加一个指向我托管页面的链接,以防你想查看完整的插件代码。
已删除链接
我哪里错了?
修改
显然,问题的原因是浮动元素嵌套在图像父标记的父级的兄弟中:
<div class="header">
<!-- This span tag -->
<span class="note">→ If you're using IE8 or lower, you will see a square lens</span>
<h1>jQuery Images Lens Preview</h1>
<span><i>The most customizable zoom tool there is.</i> <a href="#">GET IT NOW!</a></span>
<div style="clear: both;"></div>
</div>
<div class="example">
<div class="desc">
<h3>Demonstration #1 - Basic Usage</h3>
<pre>$('img.basic').superLens();</pre>
</div>
<div class="theimages">
<img src="images/demo_img1.jpg" width="214" height="320" class="basic" />
<img src="images/demo_img2.jpg" width="214" height="320" class="basic" />
</div>
<div style="clear: both;"></div>
</div>
知道为什么会这样吗?
答案 0 :(得分:0)
它实际上并没有返回50px的差异。
基本上img.top
是从document
到图像顶部的偏移量。 event.pageY
是光标偏移到document
的顶部,因为悬停事件是光标的精确点,不悬停对象的点。
如果您愿意,可以使用event.target
并从中获取最高价值。