進捗バーがスムーズではないフロントエンドを学ぶ学生のほとんどは、オーディオプレーヤーやビデオプレーヤーを自分で作成しており、実装は複雑ではないと思います。最近、Weiboで動画を視聴するのと同様の要件がミニプログラムに作成されました。一部の機能では、カスタム プログレス バーの実装が必要です。最初のバージョンを完了した後、プログレス バーがスムーズでないことに気付きました。その後、オンラインで調べて、良い解決策があるかどうかを確認したいと思いましたが、結局適切なものは見つかりませんでした。そこで、WeChatミニプログラム内の「Weibo」プログレスバーがどのように見えるかを確認したかったのですが、結果も非常に硬いアニメーションになりました。下にGIFを置きました。自分でWeChatミニプログラムでWeiboを検索して、効果を確認するビデオを見つけることもできます。 従来の解決策最終的に、この問題を最適化することにしました。まず、既存の従来のソリューションを確認しましょう。
既存のソリューションは、現在の再生時間を取得するためにイベントに依存しており、このイベントは約 100 ~ 350 ミリ秒ごとに 1 回トリガーされます。以下は、記録したアプレットのイベント オブジェクト キューです。 [ {"詳細":{"現在の時間":0.10509,"継続時間":5.83}}, {"詳細":{"現在の時間":0.364527,"期間":5.83}}, {"詳細":{"現在の時間":0.613648,"期間":5.83}}, ] 現在の問題は、イベントが取得されるたびに、進行状況バーが遷移アニメーションなしで更新され、非常に突然になることです。以下は、合計期間が 5 秒の進行状況バーの変更プロセスです。 コアコード: 定数 onProgress = (e, $dom) => { const updateFunc = (パーセント) => { $dom.style.width = パーセント+'%' } パーセント = ((e.detail.currentTime / e.detail.duration) * 100).toFixed(1) とします。 updateFunc(パーセント) } 遷移 最適化のために CSS アニメーション プロパティを使用することはすぐに考えられます。柔軟な制御が必要な場合は、トランジションを使用することを選択します。トランジションは、アニメーションの実行期間を定義できます。幅を変更すると、トランジションは指定された時間内にプログレス バーの幅をアニメーションで変更します。まず、アニメーションの実行期間は固定する必要があり、前回の実行期間が終了する前に幅を変更しないことが最善です。そうしないと、競合が発生し、アニメーションがおかしくなります。
ちょっとわかりにくいので、図を描いてみましょう。
コアコード: const プレイコントロール = { パーセント: 0, 時間: 0, 期間: 0, 最初: 本当 } 定数 onProgress = (e, $dom) => { const updateFunc = (パーセント) => { playControl.percent = パーセント 再生コントロール時間 = e.detail.currentTime $dom.style.width = パーセント+'%' } //現在のビデオの進行状況が初めて更新される if (playControl.first) { 再生コントロール期間 = e.detail.duration playControl.first = false updateFunc(100 / e.detail.duration / 2) } それ以外 { パーセント = ((e.detail.currentTime / e.detail.duration) * 100).toFixed(1) とします。 if (パーセント - playControl.percent > 0 || e.detail.currentTime >= e.detail.duration) { updateFunc(パーセント) } } } 最終的な効果の比較(追記:gif画像の効果は損なわれています) 60年代バージョンは通常バージョンと似ていますか?他の 60 をブロックして比較してみると、まだいくつかの違いがあることがわかります。 まだ説明するのが少し難しいですか、それともまだ理解できないですか? github リポジトリのコードに直接アクセスすると、コードを直接実行できます: https://github.com/zimv/smooth-progress このソリューションでは、一時停止、ドラッグなどの一部のシナリオで短い遅延が発生します。個人的には、利点が欠点を上回ると思います。 JS でスムーズなプログレスバーを実装するための詳細なソリューションに関するこの記事はこれで終わりです。スムーズな JS プログレスバーに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: VMware 仮想マシンでの CentOS7 ネットワーク構成 (ホストのワイヤレス インターネット アクセス)
vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...
目次1. はじめに2. 直接回復2.1 mysqldumpバックアップの完全リカバリ2.2 xtra...
序文ロックの範囲に応じて、MySQL のロックは、グローバル ロック、テーブル ロック、行ロックに大...
MySQLをアンインストールする1. コントロールパネルで、MySQLのすべてのコンポーネントをア...
1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...
目次1. 前処理2. コンパイル3. コンパイル4. リンク1. gccのインストール(Ubuntu...
この記事では、ネイティブ JS で実装されたドラッグ可能なログイン ボックスを紹介します。その効果は...
目次1. React.FC<> 2. クラスxxはReact.Componentを拡張し...
目次1. 透かしのJsファイルを作成する2. 導入操作2.1 App.vueや他のページでの参照2....
環境サーバー: centos7クライアント: ウィンドウCentos7 に docker+gitla...
目次背景成し遂げる1. カプセル化された /utils/dialogControl.js 2.ダイア...
ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....
この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...
目次序文1. Nginxのインストール1. Nginxをダウンロードする2. 依存関係をインストール...
Cocos Creator モジュラースクリプトCocos Creator を使用すると、コードを複...