|
|
Quellcode |
<html> <head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css"> <style> *{margin: 0; padding: 0; box-sizing: border-box; font-family: 'Poppins', sans-serif;} .wrapper{height: 270px; width: 420px; border-radius: 7px; background: #0B85FF; padding: 30px 30px 35px; transition: height 0.2s ease; box-shadow: 0 10px 20px rgba(0,0,0,0.1);} .wrapper.active{height: 525px;} .wrapper form{height: 210px; display: flex; cursor: pointer; user-select: none; text-align: center; border-radius: 7px; background: #fff; align-items: center; justify-content: center; transition: height 0.2s ease;} .wrapper.active form{height: 225px; pointer-events: none;} form img{display: none; max-width: 148px;} .wrapper.active form img{display: block;} .wrapper.active form .content{display: none;} form .content i{color: #0B85FF; font-size: 55px;} form .content p{color: #0B85FF; margin-top: 15px; font-size: 16px;} .wrapper .details{opacity: 0; margin-top: 25px; pointer-events: none;} .wrapper.active .details{opacity: 1; pointer-events: auto; transition: opacity 0.5s 0.05s ease;} .details textarea{width: 100%; height: 128px; outline: none; resize: none; color: #fff; font-size: 18px; background: none; border-radius: 5px; padding: 10px 15px; border: 1px solid #fff;} textarea::-webkit-scrollbar{width: 0px;} textarea:hover::-webkit-scrollbar{width: 5px;} textarea:hover::-webkit-scrollbar-track{background: none;} textarea:hover::-webkit-scrollbar-thumb{background: #fff; border-radius: 8px;} .details .buttons{display: flex; margin-top: 20px; align-items: center; justify-content: space-between;} .buttons button{height: 55px; outline: none; border: none; font-weight: 500; font-size: 16px; cursor: pointer; color: #0B85FF; border-radius: 5px; background: #fff; transition: transform 0.3s ease; width: calc(100% / 2 - 10px);} .buttons button:active{transform: scale(0.95);} @media (max-width: 450px) { .wrapper{padding: 25px; height: 260px; } .wrapper.active{height: 520px;}} </style> </head> <body> <div class="wrapper"> <form action="#"> <input type="file" hidden> <img src="#" alt="qr-code"> <div class="content"> <i class="fas fa-cloud-upload"></i> <p>Lade einen QR Code hoch</p> </div> </form> <div class="details"> <textarea spellcheck="false" disabled></textarea> <div class="buttons"> <button class="close">Schließen</button> <button class="copy">Kopiere den Text</button> </div> </div> </div> <script> const wrapper = document.querySelector(".wrapper"), form = document.querySelector("form"), fileInp = form.querySelector("input"), infoText = form.querySelector("p"), closeBtn = document.querySelector(".close"), copyBtn = document.querySelector(".copy"); function fetchRequest(file, formData) { infoText.innerText = "Scanning QR Code..."; fetch("http://api.qrserver.com/v1/read-qr-code/", { method: 'POST', body: formData }).then(res => res.json()).then(result => { result = result[0].symbol[0].data; infoText.innerText = result ? "Lade den QR Code hoch" : "Kann den QR Code nicht scannen"; if(!result) return; document.querySelector("textarea").innerText = result; form.querySelector("img").src = URL.createObjectURL(file); wrapper.classList.add("active"); }).catch(() => { infoText.innerText = "Kann den QR Code nicht scannen"; }); } fileInp.addEventListener("change", async e => { let file = e.target.files[0]; if(!file) return; let formData = new FormData(); formData.append('file', file); fetchRequest(file, formData); }); copyBtn.addEventListener("click", () => { let text = document.querySelector("textarea").textContent; navigator.clipboard.writeText(text); }); form.addEventListener("click", () => fileInp.click()); closeBtn.addEventListener("click", () => wrapper.classList.remove("active")); </script> </body> </html> |