【问题标题】:How can I preload an image to later set it as a background-image with jQuery?如何预加载图像以便稍后使用 jQuery 将其设置为背景图像?
【发布时间】:2016-09-10 23:35:51
【问题描述】:

我正在尝试预加载图像,因此当我需要将其设置为背景图像时,它已准备就绪,并且不会在 CSS 转换期间加载。我尝试使用 AJAX load() 方法来做到这一点,但我认为我应该能够在没有 AJAX 的情况下做到这一点。我不确定这样的事情是否会起作用,因为我不需要 img 标签或 src,但是像存储背景图像的直接 URL 这样我以后可以将其设置为背景图像。

var img = new Image(); img.src = 'img.jpg';

这是我到目前为止所做的:

$(document).ready(function() {
$('#LogoContainer').hover(function() {
    $('#LogoMainPart').fadeTo('slow', 0.3);
    $('#LogoOtherPart').fadeTo('slow', 1);
    $('#Introduction').css('background-image', 'url(hoverbackground.jpg)');
}, function() { 
    $('#LogoMainPart').fadeTo('slow', 1);
    $('#LogoOtherPart').fadeTo('slow', 0.3);
    $('#Introduction').css('background-image', 'url(background.jpg)');
});
});

【问题讨论】:

    标签: jquery css image hover preloading


    【解决方案1】:

    创建图像对象后使用

    var myImage = new Image();
    

    分配该图像的 src,它将将该图像加载到浏览器缓存中,如下所示:

    myImage.src = 'my-bknd.jpg';
    

    现在它在浏览器缓存中,您可以随时选择将其添加到 DOM:

    document.getElementById('myDiv').style.background = 'url(my-bknd.jpg)';
    

    【讨论】:

    • 非常感谢,如此简单,而且有效!我正在为悬停背景图像动画使用 CSS 线性过渡,它在我悬停时有效,但在鼠标悬停时无效。我是否可以选择在 CSS 中应用反转过渡,还是应该直接进行 jQuery 淡化?我不确定我可以用背景图片做到这一点。
    • @AdrianaCota 尽管 css 中的动画背景不透明度没有得到广泛支持,因为它不是 css 标准 (w3.org/TR/css3-transitions/#animatable-css),但有一种方法可以解决这个问题。这是一支钢笔 (codepen.io/haltersweb/pen/QNPVLq),我在其中创建了一个内容 div,其中有一个子 div 作为背景。当您将鼠标悬停在内容 div 上时,bknd div 会在 1 秒内转换不透明度。当您将鼠标移出时,过渡会反向进行。悬停状态在父项上,不透明度过渡在子项上。
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2011-06-18
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多