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 つのモードの実装プロセスの分析

推薦する

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...

WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

この記事では、WeChatミニプログラムの具体的なコードを共有し、左にスワイプしてリスト項目を削除す...

独自の FTP および SFTP サーバーを構築するプロセスの紹介

FTP と SFTP はファイル転送プロトコルとして広く使用されています。関連する機能を開発するには...

URL 書き換えモジュール 2.1 URL 書き換えモジュールのルール記述

目次前提条件テストページの設定書き換えルールの作成命名規則モードの定義アクションの定義設定ファイル内...

JavaScriptのアロー関数の特徴と通常の関数との違い

目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

JavaScript の document.activeELement フォーカス要素の紹介

目次1. デフォルトの焦点はボディにあります2. テキストボックスのフォーカスを手動で取得する3. ...

MySQL トランザクション分離レベルと MVCC の詳細な説明

目次トランザクション分離レベル同時トランザクション実行中に発生した問題SQL標準の4つの分離レベルM...

nginxのアップストリーム設定と機能の詳細な説明

設定例 アップストリームバックエンド{ サーバー backend1.example.com 重み=5...

Windows に異なる (2 つの) バージョンの MySQL データベースをインストールする詳細なチュートリアル

1. 原因: SQL ファイルをインポートする必要があるのですが、インポートできません。この文を実行...

Ubuntu 20.04 オペレーティング システムの VMware インストール チュートリアル図

メモ: とにかく体験してみましょう。記録: NO.209この例の環境:仮想マシン: vmwareオペ...

デプロイから基本操作までDocker Swarm

Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...

HTML を使用して IE8 および IE9 の互換表示モードを無効にするヒント

IE 8 以降では互換モードが追加され、これを有効にすると IE の下位バージョンでレンダリングされ...

Tencent Cloud Server Tomcat ポートにアクセスできない場合の解決策

最近、Tencent Cloudを使用してサーバーを設定しました。使用中に、tomcatポートにアク...

Linuxカーネルをコンパイルする方法

1. 必要なカーネルバージョンをダウンロードする2. オペレーティングシステムにアップロードする3....