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 がアップストリーム アドレスにジャンプしない問題の解決方法

推薦する

Zabbix を使用して Oracle データベースを監視する方法の詳細な説明

1. 概要Zabbix は非常に強力で、最も広く使用されているオープンソースの監視ソフトウェアです。...

MySQLスレーブライブラリの復元の実践記録

状況の説明:今日、MySQL データベースのスレーブ ノード ホストにログインしたところ、/var/...

MySQL の冗長インデックスと重複インデックスの詳細な説明

MySQL では、同じ列に複数のインデックスを作成できます。意図的であるかどうかにかかわらず、MyS...

優れた Web UI ライブラリ/フレームワーク 10 選

1. ITミルツールキットIT Mill Toolkit は、リッチ Web アプリケーション用のウ...

ウェブデザイン実践者必読のキャリアプラン

原文記事、転載の際は著者と出典を明記してください! Web デザインは間違いなくテクノロジーであり、...

ZabbixはLinuxシステムサービスのプロセスを監視

Zabbix は Linux システムのサービス ユニットを監視するためのルールを自動的に検出します...

crontab でスケジュールされたタスクが実行されない理由の概要

序文最近、仕事でいくつかの問題が発生しました。crontab でスケジュールされたタスクが実行されま...

CSS Houdini でダイナミックな波効果を実現

CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...

Vue 大画面データ表示例

効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...

vue $http の get および post リクエストのクロスドメイン問題を解決する

Vue $http get および post リクエストのクロスドメイン問題まずconfig/ind...

WindowsX Hyper-V ベースの CentOS システムをインストールする

現在、Linux を使用するほとんどの人は、クラウド サーバーを使用するか、Windows 上に仮想...

MySQLにおけるSQLの実行順序についてのちょっとした質問

今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...

JavaScript BOM ロケーション オブジェクト + ナビゲーター オブジェクト + 履歴オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

Swiper.jsプラグインを使用すると、カルーセル画像を非常に簡単に実装できます。

Swiper は、携帯電話やタブレットなどのモバイル端末向けに設計された、純粋な JavaScri...

Element-UIの10の驚くべきトリックのまとめ

目次el-scrollbar スクロールバーel-uploadはクリックをシミュレートしますel-s...