クロンダイク ソリティア ゲームの構築: バニラ JavaScript を使用したシンプルなイメージ プリローダーの追加

DDD
リリース: 2024-10-23 19:44:30
オリジナル
979 人が閲覧しました

Building a Klondike Solitaire Game: Adding a Simple Image Preloader with Vanilla JavaScript

スムーズなユーザー エクスペリエンスを作成することは、特にサイトが大規模なビジュアルに依存している場合、Web 開発における重要な優先事項です。新しい光沢のあるクロンダイク ソリティア ゲームに取り組んでいる間、カード画像が自然にロードされ、ユーザーが空白の画面を見つめたままにならないようにする必要がありました。そこで、バニラの JavaScript、HTML、CSS のみを使用して、画像がどのくらい読み込まれたかをユーザーに表示できる、シンプルな画像プリローダーを追加することにしました。私がやった方法は次のとおりです。


ステップ 1: 基本セットアップ

まず最初に、物事を整理整頓するために単純なファイル構造を作成しました。それは次のようになります:

klondike-preloader/
├── index.html
├── styles.css
└── script.js
ログイン後にコピー

このようにして、HTML 構造、スタイル、JavaScript ロジックに個別のファイルを用意しました。

ステップ 2: HTML 構造の構築

HTML ファイルで、画像の読み込みプロセスを開始するボタン、読み込みの進行状況を示す進行状況バー、準備ができたら画像を表示するスポットを設定しました。

インデックス.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>
ログイン後にコピー

ステップ 3: プログレスバーとレイアウトのスタイルを設定する

構造が整ったので、スタイリングに移ります。実際に画像の読み込みが始まるまで、進行状況バーを非表示にしたかったのです。

スタイル.css

#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;
}
ログイン後にコピー

ステップ 4: 画像読み込み用の JavaScript を追加する

次は JavaScript です。私がやったことは次のとおりです:

  1. トリガーによる画像の読み込み: ボタンをクリックすると画像の読み込みが開始されます。
  2. 進行状況バーを更新しました: バーを表示し、画像のロードに応じて幅を調整しました。
  3. コンテンツの長さが利用できない場合のフォールバック: サーバーが合計サイズを提供しなかった場合に備えて、デフォルトのサイズを使用して進行状況を計算します。

スクリプト.js

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');
});
ログイン後にコピー

重要なポイント:

  • 画像を取得するために XMLHttpRequest を使用しました: onprogress で進行状況を追跡し、画像を BLOB として処理しました。
  • デフォルト サイズのフォールバック: サーバーがファイル サイズを送信しなかった場合でも、進行状況バーが機能するようにしました。
  • 読み込み後にクリーンアップされました: 進行状況バーを非表示にし、読み込まれた画像を表示しました。

ステップ 5: テスト

コーディング後、さまざまな画像サイズでテストし、デフォルトのサイズを調整して、現実的な読み込みエクスペリエンスが提供されることを確認しました。 codepen でコードを試すことができます: https://codepen.io/quantotius/pen/KKOXxqP


結論

これで完成です!バニラ JavaScript を使用して画像をプリロードし、ユーザー エクスペリエンスを向上させる、基本的かつ効果的な方法です。視覚的なフィードバックが必須となるクロンダイク ソリティアのようなゲームに最適です。試してみて、行き詰まったら、遠慮なく助けを求めてください!

以上がクロンダイク ソリティア ゲームの構築: バニラ JavaScript を使用したシンプルなイメージ プリローダーの追加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!