必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせください。大変ありがたく思います。 機能紹介: 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 がアップストリーム アドレスにジャンプしない問題の解決方法
1. 概要Zabbix は非常に強力で、最も広く使用されているオープンソースの監視ソフトウェアです。...
状況の説明:今日、MySQL データベースのスレーブ ノード ホストにログインしたところ、/var/...
MySQL では、同じ列に複数のインデックスを作成できます。意図的であるかどうかにかかわらず、MyS...
1. ITミルツールキットIT Mill Toolkit は、リッチ Web アプリケーション用のウ...
原文記事、転載の際は著者と出典を明記してください! Web デザインは間違いなくテクノロジーであり、...
Zabbix は Linux システムのサービス ユニットを監視するためのルールを自動的に検出します...
序文最近、仕事でいくつかの問題が発生しました。crontab でスケジュールされたタスクが実行されま...
CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...
効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...
Vue $http get および post リクエストのクロスドメイン問題まずconfig/ind...
現在、Linux を使用するほとんどの人は、クラウド サーバーを使用するか、Windows 上に仮想...
今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...
目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...
Swiper は、携帯電話やタブレットなどのモバイル端末向けに設計された、純粋な JavaScri...
目次el-scrollbar スクロールバーel-uploadはクリックをシミュレートしますel-s...