Javascript 交换图像时不闪烁,同时立即显示新图像
TL;DR:有没有一种方法可以在显示正在加载的图像时可靠地交换图像,而不会导致页面闪烁Javascript 交换图像时不闪烁,同时立即显示新图像,javascript,jquery,html,image,Javascript,Jquery,Html,Image,TL;DR:有没有一种方法可以在显示正在加载的图像时可靠地交换图像,而不会导致页面闪烁 我有两个图像和两个按钮,当我停留在一个按钮上时,它会显示一个图像。将鼠标悬停在另一个按钮上,将切换到第二个图像。我是这样做的: $('#button1')。鼠标悬停(函数(){ $('#image').attr('src','image1.png'); }); $('#button2')。鼠标悬停(函数(){ $('#image').attr('src','image2.png'); }); 这可以正常工
我有两个图像和两个按钮,当我停留在一个按钮上时,它会显示一个图像。将鼠标悬停在另一个按钮上,将切换到第二个图像。我是这样做的:
$('#button1')。鼠标悬停(函数(){
$('#image').attr('src','image1.png');
});
$('#button2')。鼠标悬停(函数(){
$('#image').attr('src','image2.png');
});
这可以正常工作,但是当第一个图像加载而第二个图像未加载时,它在完成加载之前不会显示第二个图像。为了给用户一些新映像加载时间的指示(他们希望立即显示),我强制它在这些交换之前添加一个空映像,如下所示:
$('#button1')。鼠标悬停(函数(){
$('#image').attr('src','#');
$('#image').attr('src','image1.png');
});
$('#button2')。鼠标悬停(函数(){
$('#image').attr('src','#');
$('#image').attr('src','image2.png');
});
当一个图像正在加载时,通过显示正在加载的图像,这非常有效,但现在一旦加载了两个图像,它们之间的空图像在切换图像时会导致闪烁。我想我可以通过在加载两个图像后关闭空图像来解决这个问题,但事实证明这是不可靠的。$(“#image”).prop('complete')
和stackoverflow上其他位置的建议在注意图像是否已加载时不一致。检测加载的图像似乎是一条死胡同
我还考虑过在创建之前和之后强制显示和隐藏图像,但这似乎根本不起作用,尽管我不知道为什么。加载时新的不显示,我不确定它们是否正确交换:
$('#button1')。鼠标悬停(函数(){
$('#image').hide();
$('#image').attr('src','image1.png');
$('#image').show();
});
$('#button2')。鼠标悬停(函数(){
$('#image').hide();
$('#image').attr('src','image2.png');
$('#image').show();
});
有没有一种方法可以在显示正在加载的图像时可靠地交换图像,而不会导致我没有尝试过的页面闪烁?尝试以下方法:
var preloadImages = ['image1.png', 'image2.png'];
$('#button1').mouseover(function() {
$('#image').attr('src', preloadImages[0]);
});
$('#button2').mouseover(function() {
$('#image').attr('src', preloadImages[1]);
});
试试这个:
var preloadImages = ['image1.png', 'image2.png'];
$('#button1').mouseover(function() {
$('#image').attr('src', preloadImages[0]);
});
$('#button2').mouseover(function() {
$('#image').attr('src', preloadImages[1]);
});
试试这个:
var preloadImages = ['image1.png', 'image2.png'];
$('#button1').mouseover(function() {
$('#image').attr('src', preloadImages[0]);
});
$('#button2').mouseover(function() {
$('#image').attr('src', preloadImages[1]);
});
试试这个:
var preloadImages = ['image1.png', 'image2.png'];
$('#button1').mouseover(function() {
$('#image').attr('src', preloadImages[0]);
});
$('#button2').mouseover(function() {
$('#image').attr('src', preloadImages[1]);
});
您要做的是预加载图像,以便将其缓存在浏览器中。那么你的鼠标在上面就没有延迟了。这里有一个jquery插件来缓存图像和调用它们
$.fn.preload = function() {
this.each(function(){
$('<img/>')[0].src = this;
});
}
// Usage:
$(['image1.png','image2.png']).preload();
$.fn.preload=函数(){
这个。每个(函数(){
$('
这不是我的代码:要归功于James@你要做的是预加载图像,以便它们被缓存在浏览器中。然后鼠标在上面就不会有延迟。这里有一个jquery插件来缓存图像并调用它们
$.fn.preload = function() {
this.each(function(){
$('<img/>')[0].src = this;
});
}
// Usage:
$(['image1.png','image2.png']).preload();
$.fn.preload=函数(){
这个。每个(函数(){
$('
这不是我的代码:要归功于James@你要做的是预加载图像,以便它们被缓存在浏览器中。然后鼠标在上面就不会有延迟。这里有一个jquery插件来缓存图像并调用它们
$.fn.preload = function() {
this.each(function(){
$('<img/>')[0].src = this;
});
}
// Usage:
$(['image1.png','image2.png']).preload();
$.fn.preload=函数(){
这个。每个(函数(){
$('
这不是我的代码:要归功于James@你要做的是预加载图像,以便它们被缓存在浏览器中。然后鼠标在上面就不会有延迟。这里有一个jquery插件来缓存图像并调用它们
$.fn.preload = function() {
this.each(function(){
$('<img/>')[0].src = this;
});
}
// Usage:
$(['image1.png','image2.png']).preload();
$.fn.preload=函数(){
这个。每个(函数(){
$('
这不是我的代码:要归功于James@尝试将图像源存储到JavaScript变量中,并使用这些变量交换图像源
这可能会避免加载,不确定,但可能会。尝试将图像源存储到JavaScript变量中,并使用这些变量交换图像源
这可能会避免加载,不确定,但可能会。尝试将图像源存储到JavaScript变量中,并使用这些变量交换图像源
这可能会避免加载,不确定,但可能会。尝试将图像源存储到JavaScript变量中,并使用这些变量交换图像源
这可能会避免加载,不确定,但可能会。问题是通过更改src
位置来更新此HTML内容会使浏览器等待图像加载后再显示图像。这似乎是不可修改的
HTML:
<img id="image" src="">
更改HTML:
<div id='image_container'> </div>
和javascript,以:
$('#button1').mouseover(function() {
// Remove the old image and replace it with the new one
$('#image_container').empty()
.append("<img id='image' src='image1.png'>");
});
$('#button2').mouseover(function() {
$('#image_container').empty()
.append("<img id='image' src='image2.png'>");
});
$('#button1')。鼠标悬停(函数(){
//删除旧图像并替换为新图像
$(“#图像_容器”).empty()
.附加(“”);
});
$('#button2')。鼠标悬停(函数(){
$(“#图像_容器”).empty()
.附加(“”);
});
使浏览器在下载图像时显示图像。我不太清楚原因,但似乎只是新的修改。问题是,通过更改src
位置更新此HTML内容会使浏览器等待图像加载后再显示图像。这似乎无法修改。
HTML:
<img id="image" src="">
更改HTML:
<div id='image_container'> </div>
和javascript,以:
$('#button1').mouseover(function() {
// Remove the old image and replace it with the new one
$('#image_container').empty()
.append("<img id='image' src='image1.png'>");
});
$('#button2').mouseover(function() {
$('#image_container').empty()
.append("<img id='image' src='image2.png'>");
});
$('#button1')。鼠标悬停(函数(){
//删除旧图像并替换为新图像
$(“#图像_容器”).empty()
.附加(“”);
});
$('#button2')。鼠标悬停(函数(){
$(“#图像_容器”).empty()
.附加(“”);
});
使浏览器在下载图像时显示图像。我不确定原因,但似乎只是因为新的修改。问题在于此HTML内容更新