Как реализовать смену src плавно через JavaScript?

const image_1 = document.getElementById('site_1');
const image_2 = document.getElementById('site_2');
const image_3 = document.getElementById('site_3');
const image_4 = document.getElementById('site_4');

let key = ["image_1.png", "image_2.png", "image_3.png"];

let Changer = setTimeout(function ChangerFunction() {
	const rand = (min, max) => min + Math.floor(Math.random() * (max - min));

	image_1.style.opacity = 0;
	image_1.src = `img/works/works1/${key[rand(0, 3)]}`;
	/*Картинка должна стать видимая через секунду после image_2.src = `img/works/works2/${key[rand(0, 3)]}`;*/
	image_1.style.opacity = 1;



	image_2.style.opacity = 0;
	image_2.src = `img/works/works2/${key[rand(0, 3)]}`;
	/*Картинка должна стать видимая через секунду после image_2.src = `img/works/works2/${key[rand(0, 3)]}`;*/
	image_2.style.opacity = 1;


	image_3.style.opacity = 0;
	image_3.src = `img/works/works3/${key[rand(0, 3)]}`;
	/*Картинка должна стать видимая через секунду после image_2.src = `img/works/works2/${key[rand(0, 3)]}`;*/
	image_3.style.opacity = 1;



	image_4.style.opacity = 0;
	image_4.src = `img/works/works4/${key[rand(0, 3)]}`;
	/*Картинка должна стать видимая через секунду после image_2.src = `img/works/works2/${key[rand(0, 3)]}`;*/
	image_4.style.opacity = 1;

	Changer = setTimeout(ChangerFunction, 2000);
}, 2000);


Сверху код не работает, не знаю как выставить задержку для opacity.
Подскажите пожалуйста как можно реализовать такую идею?

В css я указал transition: opacity .2s ease; для image_1, image_2, image_3, image_4
  • Вопрос задан
  • 835 просмотров
Пригласить эксперта
Ответы на вопрос 1
@zkrvndm
Софт для автоматизации
(async function() {
	
	// Массив с именами картинок:
	var names = [ 'image_1.png', 'image_2.png', 'image_3.png'];
	
	// Ищем все картинки имеющие атрибут id начинающийся
	// со слова site_ и сохраняем результат в переменную images:
	var images = document.querySelectorAll('img[id^="site_"]');
	
	// Запускаем бесконечный цикл:
	
	while (true) {
		
		// Перебираем найденные картинки:
		
		images.forEach(function(image) {
			
			// Каждой картинке
			// назначаем прозрачность:
			image.style.opacity = 0;
			
			// И также присваиваем случайную картинку из массива с именами:
			image.src = 'img/works/works1/' + names[Math.round(Math.random() * links.length - 0.5)];
			
		});
		
		// Добавляем анимацию
		// для этого использует цикл
		// с прерыванием по условию:
		
		do {
			
			// Увеличиваем opacity на 0.05
			// всем картинкам в переменной:
			
			images.forEach(function(image) {
				image.style.opacity = Number(image.style.opacity) + 0.05;
			});
			
			// Ждем 50 мс:
			await new Promise(function(s) { setTimeout(s, 50); });
			
			// И далее повторяем пока opacity не станет равной единице...
			
		} while (images[0].style.opacity < 1);
		
		// После завершения анимации ждем 2 секунды:
		await new Promise(function(s) { setTimeout(s, 2000); });
		
		// После чего бесконечный цикл повторится вновь и вновь...
		
	}
	
})();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы