/
EugenyCh7
/
JavaScript-and-React-Course
Обзор
Документация
Войти
/
EugenyCh7
/
JavaScript-and-React-Course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Food/js/script.js
213 строк
7 KB
Чекмарёв Евгений Алексеевич
048
02 авг 2021, 17:11
02 авг 2021, 17:11
4e8eded
Код
Авторство
О чём код?
window.addEventListener('DOMContentLoaded', () => { // Tabs const tabs = document.querySelectorAll('.tabheader__item'), tabsContent = document.querySelectorAll('.tabcontent'), tabsParent = document.querySelector('.tabheader__items'); function hideTabContent() { tabsContent.forEach(item => { item.classList.add('hide'); item.classList.remove('show', 'appear'); }); tabs.forEach(item => { item.classList.remove('tabheader__item_active'); }); }; function showTabContent(i = 0) { tabsContent[i].classList.add('show', 'appear'); tabsContent[i].classList.remove('hide'); tabs[i].classList.add('tabheader__item_active'); }; hideTabContent(); showTabContent(); tabsParent.addEventListener('click', event => { const target = event.target; if (target && target.classList.contains('tabheader__item')) { tabs.forEach((item, i) => { if (target === item) { hideTabContent(); showTabContent(i); } }); } }); // Timer const deadline = '2022-01-01'; function getTimeRemaining(endtime) { const total = Date.parse(endtime) - Date.now(); const days = Math.floor(total / (1000 * 60 * 60 * 24)), hours = Math.floor((total / (1000 * 60 * 60)) % 24), minutes = Math.floor((total / (1000 * 60)) % 60), seconds = Math.floor((total / 1000) % 60); return { total, days, hours, minutes, seconds }; } function getZero(number) { if (number >= 0 && number < 10) { return `0${number}`; } else { return number; } } function setClock(selector, endtime) { const timer = document.querySelector(selector); const days = timer.querySelector('#days'), hours = timer.querySelector('#hours'), minutes = timer.querySelector('#minutes'), seconds = timer.querySelector('#seconds'), timeInterval = setInterval(updateClock, 1000); updateClock(); function updateClock() { const t = getTimeRemaining(endtime); if (t.total < 0) { clearInterval(timeInterval); return; } days.textContent = getZero(t.days); hours.textContent = getZero(t.hours); minutes.textContent = getZero(t.minutes); seconds.textContent = getZero(t.seconds); } } setClock('.timer', deadline); // Modal const modalTriggers = document.querySelectorAll('[data-modal]'), modal = document.querySelector('.modal'), modalCloseBtn = document.querySelector('[data-close]'); //const modalTimerId = setTimeout(openModal, 5000); function openModal() { modal.classList.add('show'); document.body.style.overflow = 'hidden'; //clearInterval(modalTimerId); } function closeModal() { modal.classList.remove('show'); document.body.style.overflow = ''; } modalTriggers.forEach(btn => { btn.addEventListener('click', openModal); }); modalCloseBtn.addEventListener('click', closeModal); modal.addEventListener('click', event => { if (event.target === modal) { closeModal(); } }); document.addEventListener('keydown', event => { if (event.code === 'Escape' && modal.classList.contains('show')) { closeModal(); } }); function showModalByScroll() { if (window.pageYOffset + document.documentElement.clientHeight >= document.documentElement.scrollHeight) { openModal(); window.removeEventListener('scroll', showModalByScroll); } } window.addEventListener('scroll', showModalByScroll); // Используем классы для карточек class MenuCard { constructor(src, alt, title, descr, price, parentSelector) { this.src = src; this.alt = alt; this.title = title; this.descr = descr; this.price = price; this.transfer = 27; this.changeToUAH(); this.parent = document.querySelector(parentSelector); } changeToUAH() { this.price *= this.transfer; } render() { const element = document.createElement('div'); element.innerHTML = ` <div class="menu__item"> <img src="${this.src}" alt="${this.alt}"> <h3 class="menu__item-subtitle">${this.title}</h3> <div class="menu__item-descr">${this.descr}</div> <div class="menu__item-divider"></div> <div class="menu__item-price"> <div class="menu__item-cost">Цена:</div> <div class="menu__item-total"><span>${this.price}</span> грн/день</div> </div> </div>`; this.parent.append(element); } } new MenuCard( `img/tabs/vegy.jpg`, `vegy`, `Меню "Фитнес"`, `Меню "Фитнес" - это новый подход к приготовлению блюд: больше свежих овощей и фруктов. Продукт активных и здоровых людей. Это абсолютно новый продукт с оптимальной ценой и высоким качеством!`, 9, `.menu .container` ).render(); new MenuCard( `img/tabs/elite.jpg`, `elite`, `Меню "Премиум"`, `В меню "Премиум" мы используем не только красивый дизайн упаковки, но и качественное исполнение блюд. Красная рыба, морепродукты, фрукты - ресторанное меню без похода в ресторан!`, 20, `.menu .container` ).render(); new MenuCard( `img/tabs/post.jpg`, `post`, `Меню "Постное"`, `Меню "Постное" - это тщательный подбор ингредиентов: полное отсутствие продуктов животного происхождения, молоко из миндаля, овса, кокоса или гречки, правильное количество белков за счет тофу и импортных вегетарианских стейков.`, 16, `.menu .container` ).render(); });