我实现了一种模糊效果,因为它使用的是非常轻巧的非常小的图像,因为它非常轻便,因此首先将其加载,并且一旦加载了背景图像,延迟处理将用实际图像替换data-src

我的问题是突然的变化,使背景图像闪烁。我想找到一种以淡入淡出效果优雅地“加载”的方法。

下面是代码:

function init() {
    let imgDefer = document.querySelectorAll('[data-src]');
    for (let i = 0; i < imgDefer.length; i++) {
        if (imgDefer[i].getAttribute('data-src')) {
            if (imgDefer[i].tagName === 'IMG') {
                imgDefer[i].setAttribute('src', imgDefer[i].getAttribute('data-src'));
            } else {
                let style = "background-image:url({url})";
                imgDefer[i].setAttribute('style', style.replace("{url}", imgDefer[i].getAttribute('data-src')));
            }
        }
    }
}


和元素:

<header class="header header-inverse h-fullscreen p-0 overflow-hidden" data-src="assets/img/headerbg.jpg" style="background-image: url('assets/img/headerbgprev.jpg');"> ... </header>

最佳答案

如所建议的,针对此问题,我使用以下规则创建了一个空的div

header .preview-bg {
    background-image: url(assets/img/headerbgprev.jpg);
    position: absolute;
    margin: auto;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-repeat: no-repeat;
    background-size: cover;
    -webkit-transition: opacity .3s;
    transition: opacity .3s;
}


并将其添加到延迟脚本中:

$(imgDefer[i]).find('.preview-bg').fadeOut(500);


如果有人有更好的选择来防止像这样的特定选择,那么某些东西可以一次处理许多背景图像,请发表评论。

关于javascript - 对延迟的图像应用淡入淡出效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47921201/

10-11 23:51
查看更多