Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.04.2024, 15:22
III III вне форума
Аспирант
Отправить личное сообщение для III Посмотреть профиль Найти все сообщения от III
 
Регистрация: 08.10.2014
Сообщений: 80

Перенеси анимацию объектов в JS
Привет участникам форума. Есть объекты в 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. Всем сасибо. Жду предложения по решению проблемы.
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2024, 09:13
III III вне форума
Аспирант
Отправить личное сообщение для III Посмотреть профиль Найти все сообщения от III
 
Регистрация: 08.10.2014
Сообщений: 80

Надо было сделать так ,чтобы картинки появлялись с определенной задержкой, в определенное время и могли бы работать. так скажем с перекрытием, т.е. вот так как тут https://codepen.io/bsi_52/pen/rNbdeVE, первым появляется рыбак, затем рыбки, анимация рыбака продолжается вместе с анимацией рыбок, затем анимация рыбок прекращается, а анимация рыбака какое-то время продолжается. Надо только добавить плавное скрытие рыбака. Если есть другие варианты реализации подобной анимации, буду рад их изучить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BackEnd/FrontEnd Developer (Native JS) Abab Работа 0 25.12.2016 10:56
js стиль render для react.js vflash Ваши сайты и скрипты 5 01.04.2016 22:57
Вакансия JavaScript разработчик / JS / Frontend developer (Санкт-Петербург) Сергей Грачёв Работа 0 21.09.2015 12:31
Fabric js скрывание объектов по маске Arx777 Библиотеки/Тулкиты/Фреймворки 1 26.08.2015 16:01
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28