【发布时间】:2015-10-02 14:12:49
【问题描述】:
TL;DR:有没有办法可靠地交换图像,同时显示当时正在加载的任何图像而不会导致页面闪烁?
我有 2 个图像和 2 个按钮,当我将鼠标悬停在一个按钮上时,它会显示一个图像。将鼠标悬停在另一个按钮上会切换到第二个图像。我是这样做的:
$('#button1').mouseover(function() {
$('#image').attr('src', 'image1.png');
});
$('#button2').mouseover(function() {
$('#image').attr('src', 'image2.png');
});
这可以正常工作,但是当第一个图像已加载而第二个未加载时,它在完成加载之前不会显示第二个图像。为了尝试向用户提供一些新图像何时加载的指示(他们希望立即出现),我强制它在这些交换之前添加一个空图像,如下所示:
$('#button1').mouseover(function() {
$('#image').attr('src', '#');
$('#image').attr('src', 'image1.png');
});
$('#button2').mouseover(function() {
$('#image').attr('src', '#');
$('#image').attr('src', 'image2.png');
});
这在加载一个图像时非常有用,通过在加载时显示图像,但现在一旦加载了两者,它们之间的空图像会在切换图像时导致闪烁。我想我可以通过在加载两个图像后关闭空图像来解决这个问题,但事实证明这是不可靠的。 $('#image').prop('complete') 和 imagesloaded 在 stackoverflow 的其他位置建议在注意图像是否已加载时不一致。检测加载的图像似乎是一条死胡同。
我还考虑过尝试强制图像在创建前后显示和隐藏,但这似乎根本不起作用,尽管我不确定为什么。新的在加载时不显示,我不确定它们是否正确交换:
$('#button1').mouseover(function() {
$('#image').hide();
$('#image').attr('src', 'image1.png');
$('#image').show();
});
$('#button2').mouseover(function() {
$('#image').hide();
$('#image').attr('src', 'image2.png');
$('#image').show();
});
有没有办法可靠地交换图像,同时显示当时正在加载的任何图像,而不会导致我没有尝试过的页面闪烁?
【问题讨论】:
-
我的问题与this 非常相似,但我的图片总是在加载第一张图片时逐步加载。
标签: javascript jquery html image