創建流暢的使用者體驗是 Web 開發的首要任務,尤其是當您的網站依賴於大視覺效果時。在開發我的新的閃亮克朗代克紙牌遊戲時,我需要確保卡片圖像以一種感覺自然的方式加載,並且不會讓用戶盯著空白螢幕。因此,我決定添加一個簡單的圖像預載器,它還可以向用戶顯示圖像已載入的量,只使用普通 JavaScript、HTML 和 CSS。我就是這樣做的。
首先,我創建了一個簡單的文件結構來保持整潔。它看起來是這樣的:
klondike-preloader/ ├── index.html ├── styles.css └── script.js
這樣,我就有了 HTML 結構、樣式和 JavaScript 邏輯的單獨檔案。
在 HTML 檔案中,我設定了一個按鈕來啟動圖片載入過程,一個進度條來顯示載入的進度,以及一個在圖片準備好後顯示圖片的位置。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Klondike Solitaire Image Preloader</title> <link rel="stylesheet" href="styles.css"> </head> <body> <button id="load-button">Load Solitaire Image</button> <div id="progress-bar"> <div id="progress"></div> </div> <div id="image-container"> <img id="image" alt="Klondike Solitaire Card" /> </div> <script src="script.js"></script> </body> </html>
結構就位後,我開始進行造型。我希望進度條保持隱藏狀態,直到圖片實際開始載入。
#progress-bar { width: 100%; background: lightgray; margin-bottom: 10px; height: 20px; display: none; /* Hidden at first */ } #progress { width: 0%; height: 100%; background: green; } #image-container { display: none; /* Also hidden initially */ } #load-button { margin-bottom: 10px; padding: 10px 20px; font-size: 16px; cursor: pointer; }
現在介紹 JavaScript!這就是我所做的:
const progressBar = document.getElementById('progress'); const imageContainer = document.getElementById('image-container'); const imageElement = document.getElementById('image'); const loadButton = document.getElementById('load-button'); // Default fallback size in bytes const DEFAULT_SIZE_BYTES = 500 * 1024; // 500 KB function loadImage(url) { const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; let totalSize = DEFAULT_SIZE_BYTES; document.getElementById('progress-bar').style.display = 'block'; xhr.onprogress = (event) => { if (event.lengthComputable) { totalSize = event.total; } const percentComplete = (event.loaded / totalSize) * 100; progressBar.style.width = percentComplete + '%'; }; xhr.onload = () => { if (xhr.status === 200) { const blob = xhr.response; const objectUrl = URL.createObjectURL(blob); imageElement.src = objectUrl; imageContainer.style.display = 'block'; progressBar.parentNode.style.display = 'none'; } }; xhr.onerror = () => { console.error('Image loading failed.'); }; xhr.send(); } loadButton.addEventListener('click', () => { loadImage('https://example.com/your-image.jpg'); });
編碼後,我使用不同的圖像尺寸對其進行了測試,並調整了預設尺寸以確保它提供了真實的載入體驗。您可以在codepen上嘗試程式碼:https://codepen.io/quantotius/pen/KKOXxqP
這就是你得到的!使用 vanilla JavaScript 預先載入映像和改善使用者體驗的基本但有效的方法。非常適合像克朗代克紙牌這樣必須視覺回饋的遊戲。嘗試一下,如果遇到困難,請隨時尋求協助!
以上是建立 Klondike Solitaire 遊戲:使用 Vanilla JavaScript 添加簡單的圖像預載器的詳細內容。更多資訊請關注PHP中文網其他相關文章!