Вставить таймер в нужное место
Есть скрипт. При клике по карточке она переворачивается обратной стороной. Максимум может быть перевернуто сразу 2 карточки. После того, как вторая карточка перевернулась должен запускаться таймер с установленным временем, через которое он запускает функцию возвращающую все карточки в исходное положение.
Не могу разобраться, куда вставить эту функцию с таймером. Там, где она сейчас стоит (называется start()), это неправильное место. Там она срабатывает только после клика по третьей карточке после открытия второй.
let cardItems = document.querySelectorAll('.card__item');
let cardItemBack = document.querySelectorAll('.card__item--back');
let cardItemFront = document.querySelectorAll('.card__item--front');
let count = 0; // количество перевернутых карточек
const cardsClick = () => {
for (let i = 0, lenth = cardItems.length; i < lenth; i++) {
cardItems[i].addEventListener('click', () => {
if (count < 2) {
cardItemFront[i].style.transform = 'rotateY(180deg)';
cardItemBack[i].style.transform = 'rotateY(360deg)';
count += 1;
console.log(cardItemBack[i], cardItemFront[i]);
console.log(count);
} else {
start();
}
});
}
};
cardsClick();
const turnBackCards = () => {
for (let j = 0, lenth = cardItems.length; j < lenth; j++) {
cardItemFront[j].style.transform = 'rotateY(0)';
cardItemBack[j].style.transform = 'rotateY(180deg)';
count = 0;
console.log(count);
}
};
const start = () => {
window.setTimeout(turnBackCards, 500);
}
|
DVV,
сделайте минимальный макет. |
DVV,
let cardItems = [...document.querySelectorAll('.card__item')], current, timer;
cardItems.forEach(card => card.addEventListener('click', () => {
clearTimeout(timer);
if(current) current.classList.remove('rotate');// тут должна быть проверка на совпадение
timer = setTimeout(()=> card.classList.remove('rotate'), 500);
current = card;
card.classList.add('rotate');
}))
|
Если честно, то немного не понял такого подхода. Сложновато для меня, наверное, пока еще такой скрипт. Кроме того, тут идет присваивание класса, а я через js стили меняю. Решил эту проблему другим путем. Все заработало)
let cardItems = document.querySelectorAll('.card__item');
let cardItemBack = document.querySelectorAll('.card__item--back');
let cardItemFront = document.querySelectorAll('.card__item--front');
let count = 0;
const cardsClick = () => {
for (let i = 0, lenth = cardItems.length; i < lenth; i++) {
cardItems[i].addEventListener('click', () => {
if (count < 2) {
cardItemFront[i].style.transform = 'rotateY(180deg)';
cardItemBack[i].style.transform = 'rotateY(360deg)';
count += 1;
console.log(cardItemBack[i], cardItemFront[i]);
console.log(count);
if (count >= 2) {
start();
}
}
});
}
};
cardsClick();
const turnBackCards = () => {
for (let j = 0, lenth = cardItems.length; j < lenth; j++) {
cardItemFront[j].style.transform = 'rotateY(0)';
cardItemBack[j].style.transform = 'rotateY(180deg)';
count = 0;
console.log(count);
}
};
const start = () => {
window.setTimeout(turnBackCards, 2000);
}
|
открыть пару, макет, filip, игра
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
* { margin: 0; padding: 0; }
.container {
margin: 20px auto;
position: relative;
display : flex;
flex-wrap: wrap;
justify-content: space-around;
perspective: 600px;
}
.card {
width: 120px;
height: 180px;
margin: 8px;
transition: transform 0.5s 0.5s;
transform-style: preserve-3d;
}
.card.flip{
transform: rotateY( 180deg );
transition-delay: 0s;
}
figure {
background-size: contain;
background-repeat: no-repeat;
width: 100%;
height: 100%;
position: absolute;
display: block;
backface-visibility: hidden;
}
.back {
background-image: url(http://www.xiper.net/examples/html-and-css-tricks/effects/card-back.png);
}
.front {
background-image: url(http://www.xiper.net/examples/html-and-css-tricks/effects/card-front.png);
transform: rotateY( 180deg );
}
</style>
<script>
document.addEventListener("DOMContentLoaded", () => {
let cardItems = [...document.querySelectorAll('.card')], current, timer;
cardItems.forEach(card => card.addEventListener('click', () => {
clearTimeout(timer);
if(current) current.classList.remove('flip');// тут должна быть проверка на совпадение
timer = setTimeout(()=> card.classList.remove('flip'), 1500);
card.classList.add('flip');
current = card;
}))
})
</script>
</head>
<body>
<div class="container" id="container">
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
<div class="card">
<figure class="back"></figure>
<figure class="front"></figure>
</div>
</div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 11:48. |