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データベース最適化技術の簡単な紹介

成熟したデータベース アーキテクチャは、最初から高可用性、高スケーラビリティなどの機能を備えて設計さ...

CentOS 7.x dockerはoverlay2ストレージ方式を使用する

/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...

dockerコンテナにvimをインストールするソリューション

目次物語の始まりvimをインストールし、hadoop-hive.envを編集します。不注意で回避しま...

DevUI で独自の Angular コンポーネント ライブラリを構築する方法

目次序文コンポーネントライブラリの作成主要な構成の変更ディレクトリレイアウトの調整ライブラリ構築のた...

読み取り専用と無効の微妙な違いの詳細な説明

「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにします...

MySQLスレーブのメンテナンスに関する経験の共有

序文: MySQL マスター/スレーブ アーキテクチャは、最も一般的に使用されるアーキテクチャ セッ...

MySQL アカウント情報をエレガントにバックアップする方法

序文:最近、インスタンスの移行の問題に遭遇しました。データの移行後、データベースのユーザーと権限も移...

Dockerコンテナが起動直後に終了する問題を解決する

最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...

js+ca​​nvas でコードレイン効果を実現

この記事では、js+ca​​nvasコードの雨効果の具体的なコードを参考までに共有します。具体的な内...

Vue で Graphql インターフェースを実装する例

注意:この記事は現在取り組んでいる nestjs+graphql+serverless 合宿における...

Mysql5.7 で中国語の文字化けの問題を解決する

MySQL 5.7 を使用すると、Web ターミナル経由でデータベースに中国語の文字を書き込むと文字...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

CSS スタイルにおける中国語フォントのフォントファミリーに対応する英語名の詳細な説明

ソングティ: SimSun太字: SimHeiマイクロソフト YaHei: マイクロソフト YaHe...

WeChatアプレットで画像の幅と高さを取得する方法

起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...

リアルタイムクロックを実装するネイティブJS

ネイティブ JS で実装したリアルタイム クロック エフェクトを共有します。エフェクトは以下のとおり...