必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせください。大変ありがたく思います。 機能紹介: 1. ページが更新されず、最初の値が2番目の値より小さい場合、またはリングが初期化されたときに増分アニメーションが実行された場合 2. ページが更新されず、最初の値が2番目の値より大きい場合、減少アニメーションが実行されます。 3. 中央に表示されるパーセンテージの数字はゆっくりとしたアニメーションになります(速度は円形の進行アニメーションと同じです) 4. アニメーションが完了するとアニメーション完了コールバックがトリガーされます。 5. 外部値は円の進行率(整数)、円のアニメーション速度(整数)です。 効果は図に示されています: <テンプレート> <div class="パーセントループ"> <div class="circle-left"> <div ref="左コンテンツ"></div> </div> <div class="circle-right"> <div ref="rightcontent"></div> </div> <div class="数値"> {{パーセント}} % </div> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 小道具: { パーセント数: { タイプ: [文字列、数値], デフォルト: 0 }, speed: { // 推奨値は0~3です タイプ: [文字列、数値], デフォルト: 1 } }, データ () { 戻る { パーセント: 0, 初期度: 0, タイムID: null、 アニメーション: false } }, メソッド: { transformToDeg (パーセント) { 度 = 0 とする (パーセント >= 100)の場合{ 度 = 360 } それ以外 { 度 = parseInt(360 * パーセント / 100) } 戻る度 }, パーセントに変換(度) { パーセントを0にする (度 >= 360)の場合{ パーセント = 100 } それ以外 { パーセント = parseInt(100 * 度 / 360) } リターン率 }, rotateLeft (deg) { // 角度が180より大きい場合、アニメーションが実行されます this.$refs.leftcontent.style.transform = 'rotate(' + (deg - 180) + 'deg)' }, rotateRight (deg) { // 角度が180未満の場合はアニメーションが実行されます this.$refs.rightcontent.style.transform = 'rotate(' + deg + 'deg)' }, 回転(度) { this.animationing = true this.timeId = setInterval(() => { if (deg > this.initDeg) { // 増分アニメーション this.initDeg += Number(this.speed) (this.initDeg >= 180)の場合{ this.rotateLeft(this.initDeg) this.rotateRight(180) // 2 回渡されたパーセンテージから変換された値がステップ長の整数でなくなり、左右の回転が失敗する可能性がある状況を回避します。 } それ以外 { this.rotateRight(this.initDeg) } } else { // アニメーションを減らす this.initDeg -= Number(this.speed) (this.initDeg >= 180)の場合{ this.rotateLeft(this.initDeg) } それ以外 { this.rotateLeft(180) // 2 回渡されたパーセンテージから変換された値がステップ長の整数でなくなり、左右の回転が失敗する可能性がある状況を回避します。 this.rotateRight(this.initDeg) } } this.percent = this.transformToPercent(this.initDeg) // パーセンテージデータのスクロールアニメーション const remainer = Number(deg) - this.initDeg もし (Math.abs(remainer) < this.speed) { this.initDeg += 残り (this.initDeg > 180)の場合{ this.rotateLeft(度) } それ以外 { this.rotateRight(度) } this.animationFinished() } }, 10) }, アニメーション終了(){ this.percent = this.percentNum // パーセンテージデータのスクロールアニメーション this.animationing = false クリア間隔(this.timeId) this.$emit('animationFinished') // アニメーションが完了したときのコールバック} }, 作成された(){ this.goRotate(this.transformToDeg(this.percentNum)) }, 時計: 'パーセント数値': 関数 (値) { if (this.animationing) 戻り値 this.goRotate(this.transformToDeg(val)) } } } </スクリプト> <スタイル スコープ lang="scss"> .パーセントループ{ 位置: 相対的; 幅: 100%; 高さ: 100%; 境界線の半径: 50%; オーバーフロー: 非表示; .circle-left、.circle-right { 位置: 絶対; 上: 0; 左: 0; 幅: 50%; 高さ: 100%; 背景色: 赤; オーバーフロー: 非表示; &>div { 幅: 100%; 高さ: 100%; 背景色: #8a8a8a; 変換の原点: 右中央; /*遷移: すべて 0.5 秒線形;*/ } } .circle-right { 左: 50%; &>div { 変換の原点: 左中央; } } 。番号 { 位置: 絶対; 上位:9% 下位:9% 左:9% 右:9% 背景色: #fff; 境界線の半径: 50%; オーバーフロー: 非表示; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; 色: #000; } } </スタイル> 上記は、vue 円形パーセンテージ プログレス バー コンポーネント機能の実装の詳細な内容です。vue プログレス バーの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策
>>: nginx がアップストリーム アドレスにジャンプしない問題の解決方法
Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...
画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...
MySQL 外部キー制約の無効化と有効化: MySQL 外部キー制約が有効になっているかどうかは、グ...
MySQLソフトウェアのインストールとデータベースの基礎は参考用です。具体的な内容は次のとおりです。...
序文Oracle や SQL Server などのデータベースには、ストレージ エンジンが 1 つだ...
MySQL の暗号化と復号化の例データの暗号化と復号化はセキュリティ分野で非常に重要です。プログラマ...
この記事では、ある大学の健康報告システムを例に、Web 側の自動化操作を完成させます。使用したテクノ...
Docker コンテナはさまざまな方法で管理およびデプロイできます。 Docker コマンドを直接使...
目次質問解決質問この問題には多くの理由があるようです。私の問題は、パラメータ付きのURLを更新できな...
目次1 概念上の区別2 事例紹介3 クエリパフォーマンス4 アップデートのパフォーマンス4.1 記憶...
序文ブロガーが使用しているサーバーは Alibaba Cloud から購入したものです。実際、Ali...
この記事では、オンラインリアルタイム多人数チャットルームを実現するためのNode.js+expres...
1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...
まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...
序文負荷分散には nginx を使用します。アーキテクチャのフロントエンドまたは中間層として、トラフ...