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

推薦する

Rails APIを使用してReactアプリケーションを構築するための詳細な手順

目次バックエンド: Rails API部分フロントエンド: React部分Reactコンポーネントa...

DockerでSpringbootプロジェクトを実行する方法

1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...

Ubuntu で .sh ファイルを実行するいくつかの方法の違いについて簡単に説明します。

序文特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法...

VMware インストール後に仮想ネットワーク カードが表示されない問題について

1 問題の説明: 1.1 Windows 10 に VMware を初めてインストールする場合、また...

MySQL分離の使用手順を読む

現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...

MySQL マスタースレーブ同期、トランザクションロールバックの実装原理

ビンログBinLog は、データベース テーブル構造の変更 (テーブルの作成、変更など) とテーブル...

Windows で mysql-8.0.18-winx64 をインストールするチュートリアル (画像とテキスト付き)

1. インストールパッケージをダウンロードするインストール パッケージは次の場所にあります:参考:...

Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が102...

Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体

1. Expressライブラリとジェネレータをインストールするcmdを開いて、次のコマンドを入力しま...

JavaScriptはフォームデータの非同期送信を実装します

この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...

MySql 8.0 と対応するドライバー パッケージの一致に関する注意事項

MySql 8.0 対応ドライバパッケージのマッチングMySql データベースをバージョン 8.0 ...

HTMLの基礎を詳しく解説(第2部)

1. リストリスト ulコンテナーには、一貫した構造とスタイルを持つテキストまたはグラフの形式が読...

Navicat Premiumを使用してMySQLデータベースにリモート接続する方法

新しい接続を作成する側がクライアントに相当し、接続される側がサーバーに相当します。手順は次のとおりで...

Linux で NFS ファイル共有サーバーを構築するための詳細な手順

Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...

DockerがMySQL構成実装プロセスを開始

目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...