Ich verwende gsap.js für das Popup/Modal. Ich verwende forEach, damit es einwandfrei funktioniert, egal wie viele identische Teile dieser Site ich hinzufüge. Mein einziges Ziel ist es, dass das jetzt irgendwie perfekt funktioniert. Immer wenn Sie auf die „Schaltfläche“ klicken, die angezeigt wird, erhalten Sie 9 Bilder, wählen 4 davon aus und klicken auf „Änderungen speichern“. Wenn Sie auf „Änderungen speichern“ klicken, wird der Textkörper angezeigt. Wenn das Bild 4 Bildkörper enthält, es ändert sich automatisch. Und Sie können es immer wieder ändern.
const items = document.querySelectorAll(".mdlsc"); const modal = document.querySelector(".modal"); items.forEach((item, index) => { item.querySelector(".opnBtn").addEventListener("click", () => { item.querySelector(".modal").style.display = "grid"; gsap.to(item.querySelector(".modalwrap"), { scale: 1, ease: "elastic.out(1, 0.3)", }); }); item.querySelector(".ovlybg").addEventListener("click", () => { gsap.to(item.querySelector(".modalwrap"), { scale: 0, ease: "elastic.out(1, 0.3)", }); item.querySelector(".modal").style.display = "none"; }); });
body { width: 100%; overflow-x: hidden; color: #fff; background: url(https://polite-figolla-02d41d.netlify.app/img/wefdf.png) no-repeat; background-size: cover; background-position: center center; height: 100vh; } body img { width: 100%; } body button { background: transparent; border: none; cursor: pointer; } .main { width: 500px; margin: auto; } .modal { position: fixed; z-index: 9; left: 0%; top: 0%; width: 100%; height: 100vh; place-content: center; place-items: center; display: none; } .modal .ovlybg { position: absolute; background: rgba(0, 0, 0, 0.5); top: 0px; left: 0%; z-index: 1; width: 100%; height: 100%; } .modal .modalwrap { transform: scale(0); width: 400px; margin: auto; height: -webkit-fit-content; height: -moz-fit-content; height: fit-content; border: 5px solid #fff; border-radius: 77px; position: relative; z-index: 3; background: linear-gradient(to right, #400df0, #6203b3, #940599); text-align: center; text-transform: uppercase; font-weight: 600; padding: 45px 0px; } .edtchp { text-align: center; padding: 25px 0px 2px; } .edtchp span { font-size: 1em; margin: 0; } .edtchp h1 { font-size: 2.2em; color: #fff; margin: 0; transform: translate(0px, 0px); } .clsebtn img { width: 120px; } .mdlsc { margin-left: 10px; } .grypnk { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 18px 5px; width: 80%; margin: auto; } .grypnk img { width: 100% !important; } .coinsc { display: flex; align-items: center; width: 85%; margin: auto; gap: 8px; justify-content: center; margin: 10px auto; } .coinsc .imdwidth { display: flex; align-items: center; } .coinsc .imdwidth img { width: 45px; } .coin { display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; align-items: center; }
<div class="main"> <div class="coinsc"> <div class="coin"> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-100.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-500.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-1000.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-3000.png" alt="" /> </div> <div class="mdlsc"> <div class="modal"> <div class="modalwrap antclr"> <div class="edtchp"> <h1>Edit Chip Rack</h1> <span>SELECT 4 CHIPS TO DISPLAY</span> </div> <div class="grypnk"> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-1.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-50.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-1000.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-5.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-100.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-3000.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-10.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-500.png" alt="" /> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-5000.png" alt="" /> </div> <a href="#" class="clsebtn" > <img src="https://polite-figolla-02d41d.netlify.app/img/saveedit.png" alt="" /> </a> </div> <div class="ovlybg"></div> </div> <button class="opnBtn"> <div class="imdwidth"> <img src="https://polite-figolla-02d41d.netlify.app/img/Chips/chip-editchip.png" alt="" /> </div> </button> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.3/gsap.min.js"></script>
这是我的方法。在开发这个解决方案时,GsapJS 库并不是一个障碍。您会看到我已经单独发布了图像,因为您的图像已自动取消发布。
除非您保存,否则您的更改将不会显示。用户在这里选择的芯片数量是 4。每当您尝试选择更多或保存编辑但未选择至少 4 个芯片时,它都会向您发出警报。因此,在选择新芯片之前,您必须取消选择灰色芯片。我在这里使用了术语“芯片”而不是“硬币”。
我使用的工具是 CSS 动画,让点击后的芯片看起来就像翻转一样。这些材料/来源对我的工作有帮助,
w3school
bobbyhadz