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

推薦する

MySQL データベースの大文字と小文字の区別の問題

MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...

mysql8.0.21 のダウンロードとインストールに関する詳細なチュートリアル

公式ウェブサイトアドレス: https://www.mysql.com/インストールの提案: インス...

1 つの記事で v-model とその修飾子を学ぶ

目次序文v-model の修飾子:怠け者トリム番号さまざまな入力タイプやその他の要素での v-mod...

Nginx の構成と HTTP 実装コード分析との互換性

OpenSSL を使用して SSL キーと CSR ファイルを生成するHTTPS を設定するには、秘...

JavaScript の遅延読み込み属性パターンに関する簡単な説明

目次1. はじめに2. オンデマンド属性モード3. 乱雑な遅延読み込み属性パターン4. クラスの唯一...

HTML の長いテキストは、タグの幅を超えると自動的に切り捨てられます。

長いテキストを表示する場合、C# 側で文字をインターセプトする必要があることがよくありますが、長いテ...

Vueフィルターとカスタム命令の使用

目次フィルター01.とは02. やり方(1)フィルターを定義する(2)使用方法(3)フィルタパラメー...

MYSQL は、指定されたユーザーのランキングとクエリを実装します。ランキング関数 (並列ランキング関数) のサンプルコード

序文この記事は主に、MYSQL でランキングを実現し、指定ユーザーランキング関数 (並列ランキング関...

CSS3は、ズームと回転を実現するためにscale()とrotate()を使用します。

1. scale() メソッドズームとは「縮小」と「拡大」を意味します。 CSS3 では、scal...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...

webpackでHMRを手動で実装するいくつかの方法

目次1. はじめに2. GitHub 3. 基本構成プロジェクトディレクトリパッケージ.json c...

WeChatアプレット開発の章:落とし穴の記録

最近、会社初のミニプログラムの開発に参加しました。開発経験は基本的にWebViewをベースとしたハイ...

base target="" はフレームを開くためのベースリンクのターゲットを指定します

<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...

MySql インデックスはクエリ速度を向上させる一般的な方法のコード例

インデックスを使用してクエリを高速化する1. はじめにWeb 開発には、ビジネス テンプレート、ビジ...

uniappは録音アップロード機能を実現

目次uni-app の紹介HTML部分js部分インスタンスを作成する録音を開始録音終了録音を再生再生...