Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせください。大変ありがたく思います。

機能紹介:

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 の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vue は動的な円形のパーセンテージ進捗バーを実装します
  • vue+ElementUI+echarts フロントエンドとバックエンドのインタラクションを使用して、Springboot プロジェクトで動的なドーナツ チャートを実現する (推奨)
  • Springboot は、vue+echarts のフロントエンドとバックエンドのインタラクションを使用して、動的なドーナツ チャートを実現します。
  • Vue で円形プログレスバーを実装する例
  • Vueは3/4ドーナツチャートの効果を動的に描画します
  • echarts を使用して Vue でドーナツ チャートを作成するサンプル コード
  • Vueはキャンバスを使用して円を描画します

<<:  CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策

>>:  nginx がアップストリーム アドレスにジャンプしない問題の解決方法

推薦する

ナビゲーションバーのドロップダウンメニューのサンプルコードを実装するためのHTML+CSS

効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ​...

W3C 検証に合格するにはどうすればいいですか?

W3C では、さまざまなタグの規定を設定するだけでなく、Web ページの作成者が実際に W3C 規...

CSS3 で虫眼鏡効果を模倣するいくつかの方法の原理の分析

記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...

C++ TpeScriptシリーズのジェネリックについて

目次1. テンプレート2. ジェネリック3. ジェネリック再帰4. デフォルトのジェネリックパラメー...

特定のシンボルで複数の行と列に分割するMySQLの例

一部の障害コード テーブルでは、履歴またはパフォーマンス上の理由から、次の設計パターンが使用されます...

IE6 の iframe の水平スクロール バーの解決策

状況は以下のとおりです: (PS: 赤いボックスは iframe 領域を表し、灰色の四角形は上記の ...

Reactマウスの複数選択機能の設定方法

一般的に、リストには選択機能があり、単一選択、二重選択、複数選択が非常に一般的です。カスタム ループ...

ブラウザの自動フォーム入力によるウェブページのスタイル損失の原因の分析と解決

バックエンドからフロントエンドまで、なんと悲劇なのでしょう。他の人の CSS を自分の jsp We...

Nginx リバース プロキシを使い始める

目次概要リバースプロキシの役割Nginx リバース プロキシ イントラネット侵入 8081 ポートの...

MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析

導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...

MySQL バイナリログデータ復旧: 誤ってデータベースを削除した場合の詳細な説明

MySQL Binログデータの回復: 誤ってデータベースを削除した場合前書き: テスト マシンで誤っ...

Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...

スワイパープラグインを使用して Vue でカルーセルを実装する例

目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...

Typescriptを使用してWeChatミニプログラムを開発するための詳細な手順

Typescript の利点については詳しく説明する必要はありません。ご興味があれば、(https:...

MySQL アップグレードのベストプラクティス

MySQL 5.7 には、オンライン DDL、マルチソース レプリケーション、拡張された半同期、テー...