#javascript #html #css
Есть код: function changingBg(delay = 3000) { let changingBgBlock = document.querySelector('.section-block_bg-change'); let i = 0; let backgrounds = [ "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-2.jpg') no-repeat; background-size: cover; background-position: 50% 0;", "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-1.jpg') no-repeat; background-size: cover; background-position: 50% 0;", "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-4.jpg') no-repeat; background-size: cover; background-position: 50% 0;", "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688477/Chahning-bg/bg-3.jpg') no-repeat; background-size: cover; background-position: 50% 0;" ]; setInterval(function() { if (i == backgrounds.length - 1) { i = 0; } console.log(backgrounds[i]); changingBgBlock.style.cssText = backgrounds[i]; i++; }, delay) } changingBg(); html, body { width: 100%; height: 100%; min-height: 100%; } .section-block_bg-change { -webkit-transition-duration: 1s; transition-duration: 1s; width: 100%; min-height: 100%; }https://codepen.io/dima_bur/pen/mwQrNX Фон у блока должен меняться плавно, но это происходит только после прохождения первого цикла, когда все изображения уже подгрузятся. Подскажите, как сделать так, чтобы изображения менялись плавно с самого начала?
Ответы
Ответ 1
Попробуйте заранее прогрузить Ваши изображения на JS (выполните этот код в начале страницы): new Image().src = 'http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-2.jpg'; new Image().src = 'http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-1.jpg'; new Image().src = 'http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-4.jpg'; new Image().src = 'http://res.cloudinary.com/dk0qq/image/upload/v1499688477/Chahning-bg/bg-3.jpg';Ответ 2
Добавьте все эти изображения в скрытый блок - тогда они будут грузиться вместе с самой странцией. function changingBg(delay = 3000) { let changingBgBlock = document.querySelector('.section-block_bg-change'); let i = 0; let backgrounds = [ "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-2.jpg') no-repeat", "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-1.jpg') no-repeat;", "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688478/Chahning-bg/bg-4.jpg') no-repeat;", "background: url('http://res.cloudinary.com/dk0qq/image/upload/v1499688477/Chahning-bg/bg-3.jpg') no-repeat;" ]; setInterval(function() { if (i == backgrounds.length - 1) { i = 0; } console.log(backgrounds[i]); changingBgBlock.style.cssText = backgrounds[i]; i++; }, delay) } changingBg(); html, body { width: 100%; height: 100%; min-height: 100%; } .section-block_bg-change { -webkit-transition-duration: 1s; transition-duration: 1s; width: 100%; min-height: 100%; background-size: cover!important; background-position: 50% 0!important; } .imgprldr { position:absolute; left:-9999px; top:-9999px; opacity:0px; visibility:hidden; width:0px; height:0px; overflow:hidden; }Ответ 3
Пока что это решение не очень кроссбраузерное, но зато оно единственное не является хаком — это использование . Как и с любым другим элементом , для preload можно использовать атрибут media и подгружать ресурсы для, например, определенных разрешений экрана. Smashing magazine article: Preload: What Is It Good For? Browser support: 53.36% worldwide.
Комментариев нет:
Отправить комментарий