Javascript 交换图像时不闪烁,同时立即显示新图像

Javascript 交换图像时不闪烁,同时立即显示新图像,javascript,jquery,html,image,Javascript,Jquery,Html,Image,TL;DR:有没有一种方法可以在显示正在加载的图像时可靠地交换图像,而不会导致页面闪烁 我有两个图像和两个按钮,当我停留在一个按钮上时,它会显示一个图像。将鼠标悬停在另一个按钮上,将切换到第二个图像。我是这样做的: $('#button1')。鼠标悬停(函数(){ $('#image').attr('src','image1.png'); }); $('#button2')。鼠标悬停(函数(){ $('#image').attr('src','image2.png'); }); 这可以正常工

TL;DR:有没有一种方法可以在显示正在加载的图像时可靠地交换图像,而不会导致页面闪烁


我有两个图像和两个按钮,当我停留在一个按钮上时,它会显示一个图像。将鼠标悬停在另一个按钮上,将切换到第二个图像。我是这样做的:

$('#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内容更新