Код через заданное время показывает с низу статической фразы "НА САЙТЕ ТОЛЬКО" рандомно фразы 'ЯРКИЕ КАРТИНКИ', 'БЕСПЛАТНЫЕ КАРТИНКИ', 'КЛЕВЫЕ КАРТИНКИ'.
Выглядит это так: Показывается фраза "НА САЙТЕ ТОЛЬКО" под этой фразой отображается надпись "Ждите 5 секунд", через пять секунд пропадает надпись "Ждите 5 секунд" и отображается обратный отсчет, затем рандомно показывается одна из этих фраз: 'ЯРКИЕ КАРТИНКИ', 'БЕСПЛАТНЫЕ КАРТИНКИ', 'КЛЕВЫЕ КАРТИНКИ'
Нужно чтобы скрипт запускался по клику, то-есть:
Заранее благодарен.
document.addEventListener('DOMContentLoaded', () => {
let easyTimer = (function(words, timer, greetings, element) {
render = val => element.innerText = val ? val : timer === 0 ? words[parseInt(Math.random() * words.length)] : timer
render(`Ждите ${timer} секунд`)
setTimeout(() => {
setTimeout(() => element.classList.remove('red'), 1000)
let interval = setInterval(() => timer-- && render() && 0 === timer && clearInterval(interval), 1000)
}, greetings * 1000)
})(
['ЯРКИЕ КАРТИНКИ', 'БЕСПЛАТНЫЕ КАРТИНКИ', 'КЛЕВЫЕ КАРТИНКИ'],
65,
5, // сколько секунд показывать "Ждите секунд"
document.querySelector('.rnd-word')
)
})
.red {
color: red
}
<div>
<div>НА САЙТЕ ТОЛЬКО</div>
<div class="rnd-word red"></div>
</div>
Вон новая реализация, когда при повторном клике процес не запускается.
document.addEventListener('DOMContentLoaded', () => {
let easyTimer = (function(words, timer, greetings, element) {
let render = val => element.innerText = val ? val : timer === 0 ? words[parseInt(Math.random() * words.length)] : timer;
element.classList.add("red");
render(`Ждите ${greetings} секунд`);
let greetingsTemp = 3; // указание сколько секунд показать фразу "Ждите __ секунд"
let timerWait = setInterval( () => {
greetingsTemp > 0 ? greetingsTemp-- : countDown();
}, 1000);
let countDown = () => {
clearInterval(timerWait);
element.classList.remove('red');
render();
let interval = setInterval(() => timer-- && render() && 0 === timer && clearInterval(interval), 1000);
};
});
const listener = function(){
document.querySelector('.rnd-word').removeEventListener("click", listener);
easyTimer(
['ЯРКИЕ КАРТИНКИ', 'БЕСПЛАТНЫЕ КАРТИНКИ', 'КЛЕВЫЕ КАРТИНКИ'],
12,
5, // сколько секунд показывать "Ждите секунд"
document.querySelector('.rnd-word')
);
};
document.querySelector('.rnd-word').addEventListener("click", listener);
})
.red {
color: red;
}
<div>
<div>НА САЙТЕ ТОЛЬКО</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
</div>
Как замечание не пишите код в таком стиле. Старайтесь без необходимости не использовать стрелочные функции.
Вопрос довольно сумбурный, хотя и подробный.
Я понял его так - добавить область по клику на которой запускается механизм обратного отсчета и генерация случайного результата. В оригинале запуск происходит сразу после создания таймера.
document.addEventListener('DOMContentLoaded', () => {
let easyTimer = (function(words, timer, greetings, element) {
render = val => element.innerText = val ? val : timer === 0 ? words[parseInt(Math.random() * words.length)] : timer;
element.classList.add("red");
render(`Ждите ${greetings} секунд`);
setTimeout(() => {
setTimeout(() => element.classList.remove('red'), 1000)
let interval = setInterval(() => timer-- && render() && 0 === timer && clearInterval(interval), 1000)
}, greetings * 1000)
});
document.querySelector('.rnd-word').addEventListener("click", () =>{
easyTimer(
['ЯРКИЕ КАРТИНКИ', 'БЕСПЛАТНЫЕ КАРТИНКИ', 'КЛЕВЫЕ КАРТИНКИ'],
12,
5, // сколько секунд показывать "Ждите секунд"
document.querySelector('.rnd-word')
)
});
})
.red {
color: red;
}
<div>
<div>НА САЙТЕ ТОЛЬКО</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
</div>
Пришлось исправить код, я убрал не нужные setInterval(); (Все закоментировано)
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('.rnd-word').forEach((item) => { //Каждый элемент
item.addEventListener('click', () => { //При нажати на него
let easyTimer = (function(words, timer, element) { //Вызвать эту функцию
element.classList.add('red'); //Сделать элемент красным
render = val => element.innerText = val; // Добавить анонимную функцию render
render(`Ждите ${timer} секунд`) // Вывести изначальное значение
var int = setInterval(() => {
element.classList.remove('red'); // Вернуть цвет обратно
timer--; // Отнять от таймера
render(`Ждите ${timer} секунд`) // Вывести
if(timer==0) // Если таймер закончился
{
clearInterval(int); //Отчистить интервал
element.innerText = words[parseInt(Math.random()*3)]; // Вывести случайный элемент из массива
}
}, 1000)
})(
['ЯРКИЕ КАРТИНКИ', 'БЕСПЛАТНЫЕ КАРТИНКИ', 'КЛЕВЫЕ КАРТИНКИ'],
5, // сколько секунд показывать "Ждите секунд"
item
)
});
});
})
.red {
color: red
}
<div>
<div>НА САЙТЕ ТОЛЬКО</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
<div class="rnd-word">КЛИКНИТЕ ЧТОБЫ СКОПИРОВАТЬ</div>
</div>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Написал на коленке код для работы с OCR Yandex Translate в среде PhantomJSДля перевода текста картинки с английского на русский
Подскажите пожалуйста, есть код который берет элемент у которого есть id="price" и умножает на данные элемента id="amount" и выводит в элемент с id="summa"Но...