進捗バーがスムーズではないフロントエンドを学ぶ学生のほとんどは、オーディオプレーヤーやビデオプレーヤーを自分で作成しており、実装は複雑ではないと思います。最近、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 ネットワーク構成 (ホストのワイヤレス インターネット アクセス)
MySQL には、msi インストールと zip 解凍の 2 つのインストール方法があります。 zi...
序文: MySQL マスター/スレーブ アーキテクチャは、最も一般的に使用されるアーキテクチャ セッ...
現在、DockerイメージのほとんどはDebianベースです # cat /etc/issue De...
目次複数テーブル結合の基本構文クロス結合と直積現象クロスコネクトデカルト積現象内部結合外部結合左外部...
序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...
この記事では、Webオンラインチャットを実装するためのVueの具体的なコードを参考までに紹介します。...
SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...
目次ドヴァdvaの使用DVAの実装非同期をサポートルーターの実装成し遂げる:ドヴァdva は、red...
本格的な MySQL 最適化! MySQL のデータ量が少ない場合は最適化は不要です。データ量が多い...
Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...
メモリストレージエンジンに関する知識ポイントメモリ ストレージ エンジンは日常業務ではほとんど使用さ...
インストールの提案: インストールには .exe を使用せず、圧縮パッケージを使用してください。これ...
Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...
目次序文コアコードコードのファイル表示部分序文この記事では主に、Vue プロジェクトでの添付ファイル...
1. 文書化ルール1. 大文字と小文字が区別されます。 2. 属性値は引用符(一重引用符または二重引...