#javascript #html #css #flip #card
Вопрос:
У меня есть простой веб-сайт портфолио с тремя откидными карточками. На данный момент функциональность флипа есть, и я в основном закончил с веб-сайтом. Дело в том, что я хочу, чтобы другие карты переключались при нажатии на одну карту. Другими словами, я хочу, чтобы за раз переворачивалась только одна карта. Как я могу сделать так, чтобы это произошло?
index.html:
lt;!DOCTYPE htmlgt; lt;html lang="en"gt; lt;headgt; lt;meta charset="UTF-8"gt; lt;meta http-equiv="X-UA-Compatible" content="IE=edge"gt; lt;meta name="viewport" content="width=device-width, initial-scale=1.0"gt; lt;titlegt;hayden dyerlt;/titlegt; lt;link rel="stylesheet" href="./style.css"gt; lt;link rel="preconnect" href="https://fonts.googleapis.com"gt; lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigingt; lt;link href="https://fonts.googleapis.com/css2?family=Poppinsamp;display=swap" rel="stylesheet"gt; lt;/headgt; lt;bodygt; lt;div class="card"gt; lt;div class="card__inner"gt; lt;div class="card__face card__face--front about"gt; lt;h2gt;About Melt;/h2gt; lt;/divgt; lt;div class="card__face card__face--back"gt; lt;div class="card__content"gt; lt;div class="card__header"gt; lt;img src="./haydendyer080421bw.jpg" alt="my face" class="pic" /gt; lt;h2gt;Hi there! I'm Hayden Dyer.lt;/h2gt; lt;/divgt; lt;div class="card__body"gt; lt;pgt;lorem ipsum dolor sit amet consectetur adipisicing elit. iure, aperiam eaque. quasi architecto illum reiciendis fuga ipsam distinctio quis. molestias rem harum, tempora quos pariatur dignissimos aperiam vitae amet esse?lt;/pgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;div class="card"gt; lt;div class="card__inner"gt; lt;div class="card__face card__face--front projects"gt; lt;h2gt;My Projectslt;/h2gt; lt;/divgt; lt;div class="card__face card__face--back"gt; lt;div class="card__content"gt; lt;div class="card__body"gt; lt;pgt;lorem ipsum dolor sit amet consectetur adipisicing elit. iure, aperiam eaque. quasi architecto illum reiciendis fuga ipsam distinctio quis. molestias rem harum, tempora quos pariatur dignissimos aperiam vitae amet esse?lt;/pgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;div class="card"gt; lt;div class="card__inner"gt; lt;div class="card__face card__face--front contact"gt; lt;h2gt;Contactlt;/h2gt; lt;/divgt; lt;div class="card__face card__face--back"gt; lt;div class="card__content"gt; lt;div class="card__body"gt; lt;h3gt;lt;a href="mailto: hcdyer0@gmail.com" target="_blank" rel="noopener noreferrer"gt;emaillt;/agt;lt;/h3gt; lt;h3gt;lt;a href="https://www.linkedin.com/in/hayden-dyer/" target="_blank" rel="noopener noreferrer"gt;linkedinlt;/agt;lt;/h3gt; lt;h3gt;lt;a href="https://github.com/HaydenDyer" target="_blank" rel="noopener noreferrer"gt;githublt;/agt;lt;/h3gt; lt;h3gt;lt;a href="https://twitter.com/haydenDyer_" target="_blank" rel="noopener noreferrer"gt;twitterlt;/agt;lt;/h3gt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;script src="./script.js"gt;lt;/scriptgt; lt;/bodygt; lt;/htmlgt;
script.js:
const cards = document.querySelectorAll(".card__inner"); function flipCard() { this.classList.toggle('is-flipped'); }; cards.forEach((card) =gt;card.addEventListener("click", flipCard));
style.css:
:root { --dark: #312b2b; --light: #F5EFEB; } * { margin: 0; padding: 0; } body { background-color: var(--light); font-family: 'Poppins', sans-serif; width: 100%; min-height: 100vh; display: flex; flex-direction: row; } .card { width: calc(100% / 3); height: 100vh; perspective: 800px; } .card__inner { width: 100%; height: 100%; transition: transform 1s; transform-style: preserve-3d; cursor: pointer; position: relative; } .card__inner.is-flipped { transform: rotateY(180deg); } .card__face { position: absolute; width: 100%; height: 100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; overflow: hidden; } .card__face--front { display: flex; align-items: center; justify-content: center; } .about { background-color: #05668D; } .projects { background-color: #028090; } .contact { background-color: #00A393; } .card__face--front h2 { color: var(--light); font-size: 64px; } .card__face--back { background-color: var(--light); transform: rotateY(180deg); display: flex; align-items: center; } .pic { display: block; width: 192px; height: 192px; margin: 32px auto; object-fit: cover; } .card__header h2 { color: var(--dark); font-size: 24px; text-align: center; } .card__body { padding: 32px; } .card__body h3 { color: var(--dark); font-size: 32px; } .card__body p { color: var(--dark); font-size: 16px; line-height: 2; } a { text-decoration: none; color: var(--dark) } a:hover { text-decoration: underline; }
Ответ №1:
Один из способов сделать это заключается в следующем: при нажатии на карту «разблокируйте» все остальные карты, а затем переключите статус переворота выбранной карты.
function flipCard() { // "unflip" all cards other than the one clicked cards.forEach((card) =gt; { if(card != this) { card.classList.remove('is-flipped'); } }); this.classList.toggle('is-flipped'); };
Демонстрационный фрагмент:
const cards = document.querySelectorAll(".card__inner"); function flipCard() { // "unflip" all cards other than the one clicked cards.forEach((card) =gt; { if(card != this) { card.classList.remove('is-flipped'); } }); this.classList.toggle('is-flipped'); }; cards.forEach((card) =gt;card.addEventListener("click", flipCard));
:root { --dark: #312b2b; --light: #F5EFEB; } * { margin: 0; padding: 0; } body { background-color: var(--light); font-family: 'Poppins', sans-serif; width: 100%; min-height: 100vh; display: flex; flex-direction: row; } .card { width: calc(100% / 3); height: 100vh; perspective: 800px; } .card__inner { width: 100%; height: 100%; transition: transform 1s; transform-style: preserve-3d; cursor: pointer; position: relative; } .card__inner.is-flipped { transform: rotateY(180deg); } .card__face { position: absolute; width: 100%; height: 100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; overflow: hidden; } .card__face--front { display: flex; align-items: center; justify-content: center; } .about { background-color: #05668D; } .projects { background-color: #028090; } .contact { background-color: #00A393; } .card__face--front h2 { color: var(--light); font-size: 64px; } .card__face--back { background-color: var(--light); transform: rotateY(180deg); display: flex; align-items: center; } .pic { display: block; width: 192px; height: 192px; margin: 32px auto; object-fit: cover; } .card__header h2 { color: var(--dark); font-size: 24px; text-align: center; } .card__body { padding: 32px; } .card__body h3 { color: var(--dark); font-size: 32px; } .card__body p { color: var(--dark); font-size: 16px; line-height: 2; } a { text-decoration: none; color: var(--dark) } a:hover { text-decoration: underline; }
lt;!DOCTYPE htmlgt; lt;html lang="en"gt; lt;headgt; lt;meta charset="UTF-8"gt; lt;meta http-equiv="X-UA-Compatible" content="IE=edge"gt; lt;meta name="viewport" content="width=device-width, initial-scale=1.0"gt; lt;titlegt;hayden dyerlt;/titlegt; lt;link rel="stylesheet" href="./style.css"gt; lt;link rel="preconnect" href="https://fonts.googleapis.com"gt; lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigingt; lt;link href="https://fonts.googleapis.com/css2?family=Poppinsamp;display=swap" rel="stylesheet"gt; lt;/headgt; lt;bodygt; lt;div class="card"gt; lt;div class="card__inner"gt; lt;div class="card__face card__face--front about"gt; lt;h2gt;About Melt;/h2gt; lt;/divgt; lt;div class="card__face card__face--back"gt; lt;div class="card__content"gt; lt;div class="card__header"gt; lt;img src="./haydendyer080421bw.jpg" alt="my face" class="pic" /gt; lt;h2gt;Hi there! I'm Hayden Dyer.lt;/h2gt; lt;/divgt; lt;div class="card__body"gt; lt;pgt;lorem ipsum dolor sit amet consectetur adipisicing elit. iure, aperiam eaque. quasi architecto illum reiciendis fuga ipsam distinctio quis. molestias rem harum, tempora quos pariatur dignissimos aperiam vitae amet esse?lt;/pgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;div class="card"gt; lt;div class="card__inner"gt; lt;div class="card__face card__face--front projects"gt; lt;h2gt;My Projectslt;/h2gt; lt;/divgt; lt;div class="card__face card__face--back"gt; lt;div class="card__content"gt; lt;div class="card__body"gt; lt;pgt;lorem ipsum dolor sit amet consectetur adipisicing elit. iure, aperiam eaque. quasi architecto illum reiciendis fuga ipsam distinctio quis. molestias rem harum, tempora quos pariatur dignissimos aperiam vitae amet esse?lt;/pgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;div class="card"gt; lt;div class="card__inner"gt; lt;div class="card__face card__face--front contact"gt; lt;h2gt;Contactlt;/h2gt; lt;/divgt; lt;div class="card__face card__face--back"gt; lt;div class="card__content"gt; lt;div class="card__body"gt; lt;h3gt;lt;a href="mailto: hcdyer0@gmail.com" target="_blank" rel="noopener noreferrer"gt;emaillt;/agt;lt;/h3gt; lt;h3gt;lt;a href="https://www.linkedin.com/in/hayden-dyer/" target="_blank" rel="noopener noreferrer"gt;linkedinlt;/agt;lt;/h3gt; lt;h3gt;lt;a href="https://github.com/HaydenDyer" target="_blank" rel="noopener noreferrer"gt;githublt;/agt;lt;/h3gt; lt;h3gt;lt;a href="https://twitter.com/haydenDyer_" target="_blank" rel="noopener noreferrer"gt;twitterlt;/agt;lt;/h3gt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/divgt; lt;script src="./script.js"gt;lt;/scriptgt; lt;/bodygt; lt;/htmlgt; script.js:
Комментарии:
1. Большое вам спасибо!
2. @HaydenDyer Рад, что это помогло!
Ответ №2:
Это просто, если карта перевернута-откиньте ее и переверните карту так, как вы хотели
Ваш сценарий должен выглядеть так
const cards = document.querySelectorAll(".card__inner"); function flipCard() { for(let i = 0; i lt; cards.length; i ) { if(cards[i].classList.contains('is-flipped')) cards[i].classList.remove('is-flipped') } this.classList.toggle('is-flipped'); }; cards.forEach((card) =gt;card.addEventListener("click", flipCard));