検索
ホームページウェブフロントエンドjsチュートリアルシンプルで実用的なプログレスバー読み込みコンポーネントloader.js

シンプルで実用的なプログレスバー読み込みコンポーネントloader.js

この記事では、プロセスの進行状況バーの読み込み効果を実装する簡単な方法を提供します。これを使用して、ページ上の時間のかかるタスクの完了の進行状況をより適切にフィードバックできます。この関数を実装するには、まず、次のような静的なプログレス バー効果を実装する方法を検討する必要があります。

シンプルで実用的なプログレスバー読み込みコンポーネントloader.js

これは比較的単純で、2 つの div だけで、公式のブートストラップです。複数のテーマを備えた進行状況バー コンポーネントを提供します。自分で使いたい場合は、他の人のコードを参考にして自分流に書いてみると実はとてもわかりやすいです:

.progress {
    height: 20px;
    background-color: #f5f5f5;
    border-radius: 4px;
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);}.progress-bar {
    float: left;
    width: 0;
    height: 100%;
    font-size: 12px;
    line-height: 20px;
    color: #fff;
    text-align: center;
    background-color: #337ab7;
    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
    position: relative;
    border-radius: 4px;}

2 番目のステップは、進捗の計算方法を検討することです。リソースの読み込みを例にとると、クライアントの場合、通常、リソースの実際のサイズを読み取る権限があるため、読み込みの進行状況を計算するときは、読み込まれたデータの量を合計量で割るだけで済みます。 ; ただし、Web ページでは、ロードするリソースのサイズを取得する機能がないため、ロードされるリソースの数を総数で割る、より精度の低いソリューションを使用することしかできません。リソースの。次の計算方法に基づいて、時間のかかる各タスクが完了した時点で完了したタスクの進行状況を計算し、対応する進行状況バーの幅を設定するだけです。

以下では、タイマーを使用して、同時に開始されるが、このステップの機能を実装するために完了するまでに異なる時間が必要な 4 つの非同期タスクをシミュレートします。

<!doctype html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link href="loader.css" rel="stylesheet"></head><body><div id="loader" class="loader">
    <div class="progress">
        <div class="progress-bar progress-bar-striped">
            <div class="progress-value"></div>
        </div>
    </div></div></body><script src="jquery.js"></script><script>
    var $bar = $(&#39;#loader&#39;).find(&#39;.progress-bar&#39;);    var $value = $bar.find(&#39;.progress-value&#39;);    var Task = function (index, duration) {
        setTimeout(function () {
            var p = (index / 4 * 100).toFixed(0) + &#39;%&#39;;
            $bar.css(&#39;width&#39;,p);
            $value.text(p);
            console.log(&#39;第&#39; + index + &#39;个异步任务执行完毕&#39;);
        }, duration);
    };    //模拟四个同时发起的异步任务
    var task1 = new Task(1, 1000);    var task2 = new Task(2, 3000);    var task3 = new Task(3, 5000);    var task4 = new Task(4, 7000);</script></html>

実際の効果は次のとおりです。 :

シンプルで実用的なプログレスバー読み込みコンポーネントloader.js

このステップに到達すると、基本的なプログレス バーの読み込み関数が実際に実装されました。ただし、上記の効果はあまり良い体験とは言えないようなので、このプログレスバーの進捗値を次のように連続的に変更できれば最高です:

シンプルで実用的なプログレスバー読み込みコンポーネントloader.js

このステップを実現するために、トランジションを使用することを考える人もいるかもしれませんが、プログレスバーに幅 .2s のようなトランジションを設定することで、プログレスバーの幅が変化したときに、自然に効果が確認できます。進行状況バーが継続的に変化します。このアプローチには 2 つの問題があります:

1. 遷移によって数値をある値から別の値に移行できないため、数値を連続的に変更することはできません;

2. 進行状況バーが表示されない100% にロードします。時間のかかるタスクの完了の進行状況が 100% の場合、進行状況バーの幅を 100% に設定することに加えて、通常は進行状況バーを非表示または削除するロジックがあり、進行状況バーには遷移 元の幅から 100% に遷移するには一定の時間がかかるため、ユーザーには 100% が表示されません。

ただし、これら 2 つは大きな問題ではありません。進行状況番号のない進行状況バーも非常に一般的です。また、進行状況バーが 100% 未満のときにメイン関数シーンに入る影響も非常に一般的です。この効果により、ユーザーはロードが非常に速いと錯覚することがあります。 。

上記の 2 つの問題に対処したい場合、継続的な変更を満足できる数値と進行状況を持ち、進行状況バーが読み込み効果を 100% 表示した後にのみメイン シーンに入る関数を実装する方法?次の同様の効果と同様です:

シンプルで実用的なプログレスバー読み込みコンポーネントloader.js

この要件では、注意する必要がある点が 2 つあると思います:

まず、タスクが完了しました この時点では、残りのタスクがまだ完了していない可能性があります。この時点では、進行状況バーは待機状態になります。次の読み込みが表示される前に、他のタスクが完了し、新しい進行状況が表示されるまで待つ必要があります効果;

#プログレスバーが 100% までロードされたときのコールバック コントロールです。タスク完了の進捗状況が 100% の場合、プログレス バーが 100% にならない場合があります。プログレス バーが表示されるまでに時間がかかります。現在の値から 100% に変更するには、メイン シーンに入るなど、タスク完了の進捗状況が 100% のときに追加される一部のロジックは、プログレス バーが 100% にロードされた時点で処理する必要があることがわかります。

上記を踏まえた私のアイデアは次のとおりです:

1. 時間のかかるタスクの完了ごとに進行状況の値が対応するため、進行状況バーの変化を複数のセグメントに分割します。これらの値は 0 より大きく 100 以下であり、時間のかかる 4 つのタスクを例として、進行状況バーを 0 ~ 25、25 ~ 50、75 ~ 100 の 3 つのセグメントに分割します。

##2. ステップ 1 のセグメント化を抽象化する これは進行状況バーを備えたロード タスクになり、このタスクには 2 つの基本属性 (ロード時間と変更間隔) があります。このタスクをアニメーションにします。アニメーションの各実行中に、外部にコールバックを提供し、現在の進行状況値を渡して進行状況バーの幅を設定します。現在の進行状況の値は、アニメーションの実行時間、読み込み時間、変更間隔に基づいて計算できます。変更間隔は、ステップ 1 のパーセント範囲に対応します。ロード時間は、間隔範囲 * プログレス バーが 1% ロードされるのに必要な時間を変更することで計算できます。つまり、アニメーションの 1% をロードするのに必要な時間は一定と見なす必要があります。利便性を高めるため、アニメーションを 0 から 100% までロードするのに必要な時間が、より適切に制御するための定数として使用されます。

3. ステップ 2 の抽象読み込みタスクを格納するキューを定義します。キュー内の最初のタスクの実行タイミングを制御します。タスクが実行されるたびに、次のタスクが自動的に実行されます。

4. タスクの進捗が 100% になり、キュー内の最後のタスクが完了したら、コールバックを外部に通知します。

このデモの実際の効果は、前の gif とまったく同じです。

これまでのところ、比較的実用的に見える進行状況バーの読み込み効果を制御するコンポーネントができました。ただし、問題がないわけではなく、プログレス バーのロードにかかる時間が、手順 2 で設定したプログレス バーを 0 から 100% まで一気にロードするのにかかる時間よりも確実に長くなるという問題があります。時間。言い換えれば、このアプローチは、時間のかかるタスクのプロセス全体を意図的に遅らせることになります。したがって、実際の使用においては、上記の定数をあまり長く定義することはできません。

最後に、このコンポーネントは、以前に画像のプリロードについて書いたコンポーネントと組み合わせて使用​​すると、より完璧な画像のプリロード効果を作成できます。

この記事の内容が皆様の実務のお役に立てれば幸いです。

以上がシンプルで実用的なプログレスバー読み込みコンポーネントloader.jsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51devで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境