必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせください。大変ありがたく思います。 機能紹介: 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 がアップストリーム アドレスにジャンプしない問題の解決方法
効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ...
W3C では、さまざまなタグの規定を設定するだけでなく、Web ページの作成者が実際に W3C 規...
記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...
目次1. テンプレート2. ジェネリック3. ジェネリック再帰4. デフォルトのジェネリックパラメー...
一部の障害コード テーブルでは、履歴またはパフォーマンス上の理由から、次の設計パターンが使用されます...
状況は以下のとおりです: (PS: 赤いボックスは iframe 領域を表し、灰色の四角形は上記の ...
一般的に、リストには選択機能があり、単一選択、二重選択、複数選択が非常に一般的です。カスタム ループ...
バックエンドからフロントエンドまで、なんと悲劇なのでしょう。他の人の CSS を自分の jsp We...
目次概要リバースプロキシの役割Nginx リバース プロキシ イントラネット侵入 8081 ポートの...
導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...
MySQL Binログデータの回復: 誤ってデータベースを削除した場合前書き: テスト マシンで誤っ...
注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...
目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...
Typescript の利点については詳しく説明する必要はありません。ご興味があれば、(https:...
MySQL 5.7 には、オンライン DDL、マルチソース レプリケーション、拡張された半同期、テー...