Этот ответ будет уместен в вашем случае, который говорит о том, что CSS3 не поддерживает переходы для градиентов. Кроме того, вы хотите применить CSS к background-image
. Я попытался инкапсулировать логику загрузки изображений вокруг применения CSS, чтобы сделать переход плавным (без градиента):
(function($, interval, slides) {
var gradient = "linear-gradient(0deg,rgba(0,0,255,0.3),rgba(0,0,255,0.3))";
const img = new Image();
img.onload = function() {
$('body').css("background-image", "url('" + img.src + "')");
}
img.src = slides[slides.length - 1];
var i = 0;
var handle = setInterval(function() {
const img2 = new Image();
img2.onload = function() {
var bg = "url('" + img2.src + "')";
$('body').css('background-image', bg);
i = (i + 1) % slides.length;
}
img2.src = slides[i];
}, interval);
})(jQuery, 4000, [
"https://source.unsplash.com/CgOaFB56Vyw/1920x1080",
"https://source.unsplash.com/18Q4c6EVf_o/1920x1080",
"https://source.unsplash.com/7uvHtSn5a90/1920x1080"
]);
.transition {
transition: background-image 2s ease;
-webkit-transition: background-image 2s ease;
background-size: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<body class="transition">
Here come the images
</body>
</html>
РЕДАКТИРОВАТЬ: Обходным путем для перехода будет применение градиента к псевдоэлементу body
:before
:
.transition:before {
content: '';
height: 100%;
width: 100%;
top: 0;
left: 0;
position: absolute;
background: linear-gradient(0deg, rgba(0, 0, 255, 0.3), rgba(0, 0, 255, 0.3));
}
(function($, interval, slides) {
var gradient = "linear-gradient(0deg,rgba(0,0,255,0.3),rgba(0,0,255,0.3))";
const img = new Image();
img.onload = function() {
$('body').css("background-image", "url('" + img.src + "')");
}
img.src = slides[slides.length - 1];
var i = 0;
var handle = setInterval(function() {
const img2 = new Image();
img2.onload = function() {
var bg = "url('" + img2.src + "')";
$('body').css('background-image', bg);
i = (i + 1) % slides.length;
}
img2.src = slides[i];
}, interval);
})(jQuery, 4000, [
"https://source.unsplash.com/CgOaFB56Vyw/1920x1080",
"https://source.unsplash.com/18Q4c6EVf_o/1920x1080",
"https://source.unsplash.com/7uvHtSn5a90/1920x1080"
]);
.transition:before {
content: '';
height: 100%;
width: 100%;
top: 0;
left: 0;
position: absolute;
background: linear-gradient(0deg, rgba(0, 0, 255, 0.3), rgba(0, 0, 255, 0.3));
}
.transition {
transition: background-image 2s ease;
-webkit-transition: background-image 2s ease;
background-size: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<body class="transition">
Here come the images
</body>
</html>