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

推薦する

Vue プロジェクトで addRoutes を使用する際の問題の解決策

目次序文1. 404 ページ1. 原因2. 解決策2.白い画面を更新する1. 原因2. 解決策3. ...

TomcatをダウンロードしてLinuxにインストールする詳細な手順

Linux に触れたばかりの方には、この内容が役に立つかもしれません。Linux にしばらく触れてい...

将来的に人気のあるウェブサイトのナビゲーションの方向

<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...

JavaScript の基本オブジェクト

目次1. オブジェクト1.1 オブジェクトとは何ですか? 1.2 なぜオブジェクトが必要なのか? 2...

コード分​​析を実現するためのFastDFSとNginxの統合

FastDFSとNginxの統合:トラッカーは、負荷分散と高可用性のために Nginx と組み合わせ...

Docker 接続 MongoDB 実装プロセスとコード例

コンテナが起動した後まず管理者にログインして新しいユーザーを作成してください $ docker ex...

MySQL で sum 関数を使用する例のチュートリアル

導入今日は、MySQL の sum 関数の使い方を紹介します。この関数は、MySQL データベースを...

MySql ファジークエリ JSON キーワード取得ソリューションの例

目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...

Vueはmockjsを使用してシミュレートされたデータケースの詳細を生成します

目次プロジェクトにmockjsをインストールするVueプロジェクトでmockjsを使用する基本的なプ...

Alibaba Cloud ESC に MYSQL8.0 をインストールするチュートリアル

接続ツールを開きます。私はMobaXterm_Personal_12.1を使用します(公式サイトのダ...

jsはシングルクリックでテーブルを変更することを実装します

Pure jsは、参照用にワンクリックで編集可能なテーブル(トランスクリプトに似たもの)を実装してい...

Vue2.x - アンチシェイクとスロットリングの使用例

目次ユーティリティ: vue での使用:説明する:画像安定化:スロットル:ユーティリティ: // 手...

Node.js でのクラスター作成に関する簡単な説明

目次クラスタクラスターの詳細クラスター内のイベントクラスター内のメソッドクラスター内の属性クラスター...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...