CSS3を使用してプログレスバー効果を実現し、動的にパーセンテージを追加する

CSS3を使用してプログレスバー効果を実現し、動的にパーセンテージを追加する

プロジェクト中、プログレスバーを実装するために js の requestAnimationFrame メソッドを使用し始めましたが、データが多い場合にパフォーマンスに大きな影響を与えたため、CSS を使用して実装し、最適化しました。

まずコードを貼り付けます:

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <meta http-equiv="X-UA-compatible" content="ie=edge">
    <title>ドキュメント</title>
    <スタイル タイプ="text/css">
        *{マージン: 0;パディング: 0}
 
        .box{幅: 100px;高さ: 10px;境界線の半径: 10px;背景: #999;余白: 100px 自動;境界線: 1px 実線 #ff6780;}
        .child{位置: 相対;高さ: 100%;境界線の半径: 継承;}
 
        .process-animate{background: #ff6780;position: absolute;left: 0;top: 0;bottom: 0;border-radius:inherit;
            アニメーション: 1 秒の線形順方向処理;
        }
        @キーフレーム処理
        {
            0%{
                左:0;右:100%;
            }
            20%
                右:80%
            }
            40%
                右:60%;
            }
            60%{右:40%;}
            80%{右:20%;}
            100%{右:0;}
        }
	
    </スタイル>
</head>
<本文>
    <div class="box">
        <div class="child" style="width:50%"> // 子のパーセンテージはプログレスバーの割合です<p class="process-animate"></p>
        </div>
    </div>
</本文>
</html>

効果図 (動的効果を表示するにはコードをコピーします):

通常の状況では、パーセンテージは背景データに基づいて計算される必要があるため、動的に渡されます。Vueコードは以下に掲載されています。

プログレスバーのサブコンポーネント (progress.vue):

<テンプレート>
  <div class="プロセスラッパー" :class="{'addGray':addGray}">
    <div class="process-child" ref="processChild">
      <p class="process-animate" :class="{'addGray':addGray}"></p>
    </div>
  </div>
</テンプレート>
 
<スクリプト>
エクスポートデフォルト{
  小道具: {
    グレーを追加: {
      //グレー型: ブール値、
      デフォルト: false
    },
    進捗幅: {
      //進捗バーのパーセンテージタイプ: 数値、
      デフォルト: 0
    }
  },
  マウント() {
    this.$nextTick(() => {
      console.log(this.addGray, "addGray---");
      this.$refs.processChild.style.width = this.progressWidth + "%"; // 進行状況バーを動的に変更します // this.$refs.processChild.style.width = 90 + "%"; 効果をテストします});
  }
};
</スクリプト>
 
<style lang="scss" スコープ>
.プロセスラッパー{
  幅: 1.98rem;
  高さ: 0.13rem;
  マージン: 0.12rem 0 0.1rem 0;
  境界線の半径: 0.1rem;
  背景: #fff;
  境界線: 0.01rem 実線 #ff6780;
  &.addGray{
    背景: #999;
    境界線: 0.01rem 実線 #999;
  }
  .プロセス子 {
    位置: 相対的;
    高さ: 100%;
    // width: 100%; //この幅は動的に変化します。 border-radius: inherit を js 経由で変更します。
    .process-animate {
      背景: #ff6780;
      位置: 絶対;
      左: 0;
      上: 0;
      下部: 0;
      境界線の半径: 継承;
      アニメーション: 1 秒の線形順方向処理。
      &.addGray{
        背景: #999 !重要;
        // 境界線: 0.01rem 実線 #999;
      }
    }
  }
}
 
@keyframes プロセス {
  0% {
    左: 0;
    右: 100%;
  }
  20% {
    右: 80%;
  }
  40% {
    右: 60%;
  }
  60% {
    右: 40%;
  }
  80% {
    右: 20%;
  }
  100% {
    右: 0;
  }
}
</スタイル>

親コンポーネントの呼び出し:

<!-- 進捗状況バー -->
 <進行状況:addGray="非アクティブ":progressWidth="進行状況Width"></進行状況>

実際の効果をご覧ください:

以上、CSS を完璧に使用して、JS 再帰アニメーションのパフォーマンス消費を解決します。

CSS3 を使用してプログレス バー効果を実現し、動的にパーセンテージを追加する方法については、これで終わりです。CSS3 プログレス バーに動的パーセンテージ コンテンツを追加する関連情報については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

>>:  HTML メタビューポート属性の詳細な説明

推薦する

MySQLは複数テーブル関連統計(サブクエリ統計)の例を実装します

この記事では、例を使用して、MySQL で複数テーブルの関連統計を実装する方法について説明します。ご...

MySQL 8.0.15 winx64 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15 winx64 圧縮パッケージのインストールと設定方法を参考ま...

リモートログインとポート公開を防ぐためのLinuxサーバー構成IPホワイトリスト

序文ブロガーが使用しているサーバーは Alibaba Cloud から購入したものです。実際、Ali...

MySQL の自動増分主キーに関する詳細な説明

目次特徴保存戦略自己増加の決定自動増分値の変更実行プロセス問題点自動増分ロックロック戦略バッチ挿入の...

CSS3のtransform属性で実装される4つの機能

CSS3 では、transform 関数を使用して、テキストや画像の回転、拡大縮小、傾斜、移動という...

Webフロントエンドのパフォーマンス最適化

ウェブフロントエンド最適化のベストプラクティス: コンテンツWebフロントエンド最適化のベストプラク...

Dockerfile を使用して Java ランタイム環境のミラーを作成する方法

現在の環境は次のとおりです。セントロス7.5 docker-ce 18.06.1-ce 1. まずc...

GaussDB for MySQL パフォーマンス最適化の詳細な説明

目次背景インスピレーションは人生から生まれる速達配送の最適化原則GaussDB の最適化 (MySQ...

LinuxにRocketMQインスタンスをインストールする手順

1. JDKをインストールする1.1 現在の仮想マシン環境にJDKがあるかどうかを確認する rpm ...

MySQL InnoDBセカンダリインデックスのソート例の詳細な説明

ソート問題最近、Geek Time の「45 Lectures on MySQL Practice」...

Dockerコンテナとホスト間のデータ相互作用の概要

序文実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共...

MySQL の 2 種類の一時テーブルの使用方法の詳細な説明

外部一時テーブルCREATE TEMPORARY TABLE によって作成された一時テーブルは、外部...

Tomcat をサービスとして登録する際に注意すべき点のまとめ

Tomcat をサービスとして登録する場合の注意点は次のとおりです。 インターフェースを開いたら、以...

Vue axios インターセプターは、繰り返しリクエストのキャンセルによく使用されます。

導入前回の記事では、axios のシンプルなカプセル化と、axios インターセプターの適用シナリオ...

MySQL における between の境界と範囲の説明

境界範囲間のmysql間の範囲は両側の境界値を含む例: 3 から 7 までの id は、id >...