Привет участникам форума. Есть объекты в HTML
<div class="overlay">
<button type="button" disabled>
Загрузка...
</button>
</div>
<div class="container">
<div class="image-stack">
<img class="blink-image rybak" src="pictures/Рыбак.gif" alt="карась" />
<img class="blink-image polKarasya" src="pictures/ПолКарася.gif" alt="полкарася" />
<img class="blink-image dozavra" src="pictures/ПриходЗавтра.png" alt="До завтра" />
<div class="blink-image butylka_conteainer">
<img class="butylka" src="pictures/Бутылка.png" alt=""/>
<img class="stakan_l" src="pictures/Стакан.png" alt=""/>
<img class="stakan_p" src="pictures/Стакан.png" alt=""/>
<div class="text_nadpis">
<svg
Далее описание SVG
И есть вот такой скрипт
const MP3_URL = 'music/1.mp3';
document.addEventListener('DOMContentLoaded', () => {
// Для печати стихотворения const printText добавлено для задержки выполнения function search_textNodes(b)
const printText = () => {
var textNodes = [];
var textNodes_data = [];
var i = 0;
function search_textNodes(b) {
b = b.childNodes;
for (var c = 0, d = b.length; c < d; c++) {
var a = b[c];
if (a.nodeType == 3) {
textNodes.push(a);
textNodes_data.push(a.data);
a.data = ""
} else a.hasChildNodes() && search_textNodes(a)
}
};
var d = document.getElementById('test');
search_textNodes(d);
(function() {
var a = textNodes_data[i];
if (a) {
textNodes[i].data += a.charAt(0);
textNodes_data[i] = a.substr(1)
} else i++;
i < textNodes.length && setTimeout(arguments.callee, 160)
})();
}
// Загрузка аудио, начало работы и на нопку ставим картинку
const audio = new Audio();
const play = () => {
audio.play().catch(e => {
alert(e.message);
});
};
audio.addEventListener('canplaythrough', () => {
const button = document.querySelector('.overlay button');
if (!button) return;
const btn = document.createElement('input');
btn.type = 'image';
btn.src = 'pictures/Авто.png';
btn.width = '900';
button.after(btn);
button.remove();
btn.addEventListener('click', () => {
document.querySelector('.overlay')?.remove();
audio.muted = false;
audio.loop = false; // отключаем зпцикливание музыки
audio.volume = 1; // 0..1
play();
printText();
}, {
once: true
});
});
audio.addEventListener('error', () => {
alert(audio.error?.message ?? 'Something went wrong');
});
audio.src = MP3_URL;
});
const frazas = [
{src: "pictures/Fraza_L.png",
imgpos: [180, 516],
text: "Час стоим<br> клёва нет.",
textpos: [208, 545]
},
{src: "pictures/Fraza_P.png",
imgpos: [172, 739],
text: "Непруха <br> сегодня. ",
textpos: [200, 770]
},
{src: "pictures/Fraza_P.png",
imgpos: [165, 871],
text: "С клёвом <br> тишина.",
textpos: [195, 895]
},
{src: "pictures/Fraza_L.png",
imgpos: [180, 516],
text: "Вот и Андрюха<br> на горизонте!",
textpos: [205, 528]
},
{src: "pictures/Fraza_P.png",
imgpos: [172, 739],
text: "Андрюха, <br> клёва нет!",
textpos: [197, 768]
},
{src: "pictures/Fraza_P.png",
imgpos: [165, 871],
text: "Клевать <br> не будет!",
textpos: [195, 899]
},
{src: "pictures/Fraza_L.png",
imgpos: [180, 519],
text: "У Андрюхи<br> жор начался!",
textpos: [205, 538]
},
{src: "pictures/Fraza_P.png",
imgpos: [172, 739],
text: "Во попёрло!!!",
textpos: [208, 755]
},
{src: "pictures/Fraza_P.png",
imgpos: [165, 871],
text: "Нам бы так!",
textpos: [203, 889]
},
{src: "pictures/Fraza_L.png",
imgpos: [180, 516],
text: "Сойди!!! <br> Сойди!!!",
textpos: [209, 546]
},
{src: "pictures/Fraza_P.png",
imgpos: [172, 739],
text: "У него <br> не сойдёт.",
textpos: [200, 763]
},
{src: "pictures/Fraza_P.png",
imgpos: [165, 871],
text: "Чем кормил?",
textpos: [203, 889]
},
{src: "pictures/Fraza_L.png",
imgpos: [180, 516],
text: "На что ловишь?",
textpos: [216, 528]
},
{src: "pictures/Fraza_P.png",
imgpos: [172, 739],
text: "Продай секрет.",
textpos: [208, 755]
},
{src: "pictures/Fraza_P.png",
imgpos: [165, 871],
text: "Ставлю литр!!!",
textpos: [202, 883]
},
{src: "pictures/Fraza_L.png",
imgpos: [180, 516],
text: "Рука не устала?",
textpos: [215, 526]
},
{src: "pictures/Fraza_P.png",
imgpos: [172, 739],
text: "Оставь <br> на завтра.",
textpos: [203, 762]
},
{src: "pictures/Fraza_P.png",
imgpos: [165, 871],
text: "Завтра ведро <br> побольше.",
textpos: [195, 889]
},
];
const fishImages = [
{src: "pictures/Karas_L.gif", pos: [310, 600], scale: 0.6},
{src: "pictures/Karas_P.gif", pos: [345, 750], scale: 0.8},
{src: "pictures/Karas_L.gif", pos: [350, 500], scale: 1},
{src: "pictures/Karas_P.gif", pos: [345, 670], scale: 0.6},
];
const fishImages_1 = [
{src: "pictures/Karas_L.gif", pos: [310, 600], scale: 0.6},
{src: "pictures/Karas_P.gif", pos: [345, 750], scale: 0.8},
{src: "pictures/Karas_L.gif", pos: [350, 500], scale: 1},
{src: "pictures/Karas_P.gif", pos: [310, 600], scale: 0.6},
{src: "pictures/Karas_L.gif", pos: [345, 750], scale: 0.8},
{src: "pictures/Karas_P.gif", pos: [350, 500], scale: 1},
{src: "pictures/Karas_L.gif", pos: [345, 670], scale: 1},
{src: "pictures/Karas_P.gif", pos: [310, 600], scale: 0.8},
{src: "pictures/Karas_L.gif", pos: [350, 500], scale: 1},
{src: "pictures/Karas_P.gif", pos: [345, 670], scale: 0.8},
{src: "pictures/Karas_L.gif", pos: [310, 600], scale: 0.6},
{src: "pictures/Karas_P.gif", pos: [350, 500], scale: 1},
{src: "pictures/Karas_L.gif", pos: [350, 600], scale: 0.8},
];
const img = document.querySelector('.fraza img');
const txt = document.querySelector('.fraza b');
const delay = (t) => new Promise (r => setTimeout(r, t))
async function cycle () {
await delay(4500);
for (let f of fishImages) {
img.src = f.src;
img.style = `top: ${f.pos[0]}px; left: ${f.pos[1]}px;`
img.style.setProperty("--scale", f.scale)
await delay(4500);
}
img.style = 'opacity: 0;'
await delay(6500);
for (let f of frazas) {
img.src = f.src;
img.style = `top: ${f.imgpos[0]}px; left: ${f.imgpos[1]}px; opacity: 1;`
txt.innerHTML = f.text
txt.style = `top: ${f.textpos[0]}px; left: ${f.textpos[1]}px; opacity: 1;`
await delay(3000);
img.style = `top: ${f.imgpos[0]}px; left: ${f.imgpos[1]}px; opacity: 0;`
txt.innerHTML = f.text
txt.style = `top: ${f.textpos[0]}px; left: ${f.textpos[1]}px; opacity: 0;`
await delay(1500);
}
txt.textContent = '';
img.style.display = 'none';
img.style = 'opacity: 0;'
await delay(4500);
for (let f of fishImages_1) {
img.src = f.src;
img.style = `top: ${f.pos[0]}px; left: ${f.pos[1]}px;`
img.style.setProperty("--scale", f.scale)
await delay(4500);
}
}
Надо анимацию этих объектов перенести в JS. Объекты должны с определенной задержкой плавно появиться на экране в определённых местах и также плавно исчезнуть с экрана через определённое время.
Кое -какие данные для подобной анимации у меня есть
const arr = [{show : 45000, hide : 179200}, {show : 182000, hide : 190000}, {show : 183000, hide : 186000},{show : 187000, hide : 198000}];
document.querySelectorAll('.blink-image').forEach((image, index) => {
let {show, hide} = arr[index];
setTimeout(() => image.classList.add('open'), show);
setTimeout(() => image.classList.remove('open'), hide);
});
Это реальные временные показатели для появление и исчезновения объектов.
Самостоятельно этот вопрос я решить не смогу. Надеюсь на помощь знатоков JS. Всем сасибо. Жду предложения по решению проблемы.