Vueはパーセンテージバー効果を実現します

Vueはパーセンテージバー効果を実現します

この記事では、パーセンテージバーを実現するためのVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

レンダリング

1. それぞれの割合

/p>

2. 100% 残す

3. 100%正しい

ここに画像の説明を挿入

コードの実装

<テンプレート>
  <div class="about">
    <!-- <h1>これはAboutページです</h1> -->
    <div class="step">
      <!-- 左側が 100% の場合、斜辺の三角形は表示されず、直角が増加します -->
      <div
        クラス="左"
        v-show="左パーセント"
        :class="[{ 'full-left': !rightPercent }, { 'tringle': rightPercent }]"
        :style="{ width: leftPercent+'%' }"
        @mouseover="onMouseTooltip(LEFT_BAR, SHOW_TIP)"
        @mouseleave="onMouseTooltip(LEFT_BAR, HIDE_TIP)"
      >
        <div class="bar-tip-box" v-show="leftBar.isShowTip">
          <p>合計: {{ totalNum }}</p>
          <p>緑の割合: {{ leftPercent }}%</p>
        </div>
        <div class="tip-arrow" v-show="leftBar.isShowTip"></div>
        {{ 左パーセント }}%
      </div>
      <div
        クラス="right"
        v-show="rightPercent"
        :class="[{ 'full-right': !leftPercent }]"
        @mouseover="onMouseTooltip(RIGHT_BAR, SHOW_TIP)"
        @mouseleave="onMouseTooltip(RIGHT_BAR, HIDE_TIP)"
      >
        <div class="bar-tip-box" v-show="rightBar.isShowTip">
          <p>合計: {{ totalNum }}</p>
          <p>グレーの割合: {{ rightPercent }}%</p>
        </div>
        <div class="tip-arrow" v-show="rightBar.isShowTip"></div>
        {{ 右パーセント }}%
      </div>
    </div>
  </div>
</テンプレート>

<スクリプト>
const LEFT_BAR = "左";
const RIGHT_BAR = "右";
const SHOW_TIP = "表示";
const HIDE_TIP = "非表示";

エクスポートデフォルト{
  データ() {
    戻る {
      左バー: 左バー、
      右バー: 右バー、
      SHOW_TIP: SHOW_TIP、
      ヒントを隠す: ヒントを隠す、
      合計数: 1000,
      左パーセント: 100,
      左バー: {
        isShowTip: false、
        遅延出力: null
      },
      右バー: {
        isShowTip: false、
        遅延出力: null
      }
    };
  },
  メソッド: {
    onMouseTooltip(ヒントタイプ、アクションタイプ) {
      bar = null とします。
      (tipType == LEFT_BAR)の場合{
        バー = this.leftBar;
      } そうでない場合 (tipType == RIGHT_BAR) {
        バー = this.rightBar;
      } それ以外 {
        戻る;
      }
      アクションタイプ === SHOW_TIP の場合 {
        this.showBarTooltip(バー);
      } そうでない場合 (actionType === HIDE_TIP) {
        this.hideBarTooltip(バー);
      } それ以外 {
        戻る;
      }
    },
    showBarTooltip(バー) {
      bar.delayOut が null の場合
        タイムアウトをクリアします(bar.delayOut);
      }
      bar.delayOut = null;
      bar.isShowTip = true;
    },
    非表示バーツールチップ(バー) {
      タイムアウトをクリアします(bar.delayOut);
      bar.delayOut = setTimeout(関数() {
        bar.isShowTip = false;
      }, 100);
    },
  },
  計算: {
    右パーセント: 関数(){
      100 を返します - this.leftPercent;
    }
  }
};
</スクリプト>

<style lang="less" スコープ>
。ステップ {
  位置: 相対的;
  ディスプレイ: フレックス;
  マージン: 100px;
  幅: 200ピクセル;
  フォントサイズ: 0;
  。左 {
    フレックス成長: 0;
    位置: 相対的;
    表示: インラインブロック;
    背景: #62c87f;
    色: #fff;
    テキスト配置: 中央;
    フォントの太さ: 太字;
    幅: 70%;
    フォントサイズ: 12px;
    行の高さ: 20px;
    高さ: 20px;
    最小幅: 30px;
    左上の境界線の半径: 5px;
    左下の境界線の半径: 5px;
  }
  // この疑似クラスは100%表示されるわけではありません。tringle::after {
    コンテンツ: " ";
    位置: 絶対;
    上: 0;
    右: -8px;
    境界線の幅: 20px 8px;
    境界線のスタイル: solid;
    境界線の色: #62c87f 透明 透明 透明;
    zインデックス: 10;
  }

  。右 {
    フレックス成長: 1;
    位置: 相対的;
    表示: インラインブロック;
    /* 幅:30%; */
    背景: #d0d4dc;
    色: #333;
    フォントの太さ: 太字;
    テキスト配置: 中央;
    フォントサイズ: 12px;
    行の高さ: 20px;
    高さ: 20px;
    テキスト配置: 中央;
    最小幅: 35px;
    右上の境界線の半径: 5px;
    右下の境界線の半径: 5px;
  }

  .full-left{
    右上の境界線の半径: 5px;
    右下の境界線の半径: 5px;
  }

  .full-right{
    左上の境界線の半径: 5px;
    左下の境界線の半径: 5px;
  }

  .tip-arrow {
    位置: 絶対;
    左: 50%;
    上: -10px;
    表示: インラインブロック;
    幅: 7px;
    高さ: 7px;
    変換: rotateZ(45deg);
    -webkit-transform:rotateZ(45度);
    背景色: #7f7f7f;
    zインデックス: 10;
  }

  .bar-tip-box {
    位置: 絶対;
    上: -5px;
    右: 50%;
    変換: translate(50%, -100%);
    テキスト配置: 左;
    パディング: 5px 10px;
    幅: 最大コンテンツ;
    色: #fff;
    フォントサイズ: 12px;
    フォントの太さ: 400;
    境界線の半径: 3px;
    背景色: #7f7f7f;
    zインデックス: 10;

    p {
      マージン: 0;
      パディング下部: 5px;
    }
  }
}
</スタイル>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • VueプロジェクトでReactを書く方法の詳細
  • Vue+element はローカル検索機能付きのドロップダウン メニューを実装します
  • vue で wangEditor を使用する方法と、データをエコーし​​てフォーカスを取得する方法
  • vue3とvue2の利点の比較
  • Vue は動的なプログレスバー効果を実現します
  • Vue は動的な円形のパーセンテージ進捗バーを実装します
  • Vueでドラッグ可能なコンポーネントを実装する方法
  • Vue でコミュニケーションを実装する 8 つの方法

<<:  Linux lsコマンドの使用

>>:  VMWare ネットワーク アダプタの 3 つのモードの実装プロセスの分析

推薦する

Linux デスクトップ用の 4 つのスキャン ツール

ペーパーレスの世界はまだ到来していませんが、書類や写真をスキャンすることで紙をなくす人が増えています...

Web デザインのヒント: ページ レイアウトの簡単なルール

繰り返し: サイト全体で特定のページ デザイン スタイルを繰り返します。繰り返し要素としては、特定の...

Linux で MySQL 5.7.19 をアンインストールする方法

1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...

Vue ダイナミック バインディング アイコンの完全な手順

0 アイコンと画像の違いアイコンは文字であり、画像はバイナリ ストリームです。つまり、画像はアイコン...

Docker イメージの最適化 (1.16GB から 22.4MB)

目次最適化の第一歩: 軽量ベースイメージの使用第2段階の最適化:多段階構築Docker は、ソフトウ...

MySQLテーブルの自動インクリメント列の初期値をリセットする方法

MySQLテーブルの自動インクリメント列の初期値をリセットする方法1. 問題の説明MySQL データ...

Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明

目次01 背景02 はじめに03 ワークフロー04 いくつかの質問05 ファイルをバックアップする0...

CSS での三角形の描画と巧妙な応用例の詳細な説明

鉛Web ページ上の一般的な三角形の一部は、画像やフォント アイコンにする必要なく、CSS を使用し...

Javascriptはセキュリティ検証に整合性属性を使用します

目次1. スクリプトタグを使用してファイルをインポートする1. ローカルファイルをインポートする2....

MySQLで関連テーブルを削除する実用的な方法

MySQL データベースでは、テーブルが互いに関連付けられた後は、それらを任意に削除することはできま...

React 並行関数エクスペリエンス (フロントエンド並行モード)

React は、開発者が Web およびモバイルベースのアプリケーションを作成するために使用するオ...

React スキャフォールディングの構築方法を学ぶ

1. フロントエンドエンジニアリングの複雑さいくつかの小さなデモ プログラムを開発するだけであれば、...

Javascriptで戦略パターンを実装する方法

目次概要コードの実装要約する概要戦略パターンは、JavaScript デザイン パターンにおける動作...

MySql 5.7.21 無料インストール バージョンの構成方法 (Win10 の場合)

1.インストールしたい場所に解凍し、my.iniファイルを作成します。 my.iniの内容は次のと...

MySQLデュアルマスター(マスターマスター)アーキテクチャ構成ソリューション

企業では、データベースの高可用性は常に最優先事項です。多くの中小企業は、MySQL マスター スレー...