我有一个脚本,当您将鼠标悬停在缩略图上时,它会在缩略图上动态添加完整图像。我还为完整图像提供了 CSS :hover 样式,以使它们扩展到更大的宽度(通常它们被限制为缩略图的尺寸)。如果图像加载速度很快或被缓存,这可以正常工作,但如果整个图像需要很长时间才能加载并且在加载时您不移动鼠标,那么一旦它出现,它通常会保持在缩略图宽度( non-:hover 样式),直到您再次移动鼠标。我在我尝试过的所有浏览器中都出现了这种行为。我想知道这是否是一个错误,以及是否有办法修复或解决它。
可能值得注意的是,我也尝试在 Javascript 中使用 做同样的事情.on('mouseenter')
,但遇到了同样的问题。
由于问题的性质,它可能很难重现,特别是如果您有快速连接。我从 Wikipedia 中选择了一张较大的照片进行演示,但要使其正常工作,您可能必须将其更改为特别大的内容或来自慢速域的内容。另请注意,您可能必须清除缓存以进行连续重试。
如果您仍然无法重现,您可以fullimage.load
在调用anchor.show()
.
HTML:
<img id="image" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Cairo_International_Stadium.jpg/220px-Cairo_International_Stadium.jpg" />
CSS:
.kiyuras-image {
position: absolute;
top: 8px;
left: 8px;
max-width: 220px;
}
.kiyuras-image:hover {
max-width: 400px;
}
JS:
$(function () {
var fullimageurl = 'http://upload.wikimedia.org/wikipedia/commons/3/32/Cairo_International_Stadium.jpg';
var fullimage = $('<img/>')
.addClass('kiyuras-image')
.load(function () {
anchor.show();
});
var anchor = $('<a/>').hide().append(fullimage);
$('body').prepend(anchor);
$("#image").on('mouseenter', function () {
fullimage.attr('src',fullimageurl);
$(this).off('mouseenter');
});
});
更新的 JS Bin 添加了 1.5 秒的延迟(希望使问题更清晰)
再次:重现问题涉及清除大图像的缓存,然后将鼠标悬停在原始图像上以初始加载大图像,然后在加载时不要移动鼠标。预期行为是让大图像在最终加载时正确呈现 :hover 伪类。我看到的问题是加载时间超过 ~0.75 秒时,它不会占用 :hover 直到您稍微晃动鼠标。
编辑:有关我的用例的更多详细信息,请参阅我对@LucaFagioli 答案的评论。
编辑,续集:我以为我已经这样做了,但我只是试图在 Firefox 中重现该问题,但我做不到。也许这是一个 Chrome 错误?