Vue は動的なプログレスバー効果を実現します

Vue は動的なプログレスバー効果を実現します

この記事では、動的なプログレスバー効果を実現するためのVueの具体的なコードを例として紹介します。具体的な内容は次のとおりです。

デモンストレーション効果:

構造

進捗状況/index.js

const コントローラ = {
  初期化: require('./controllers/html'),
  速度: require('./controllers/speed')
}
exports.init = コントローラ.init
exports.speed = コントローラ.speed

進捗状況/コントローラ/html/index.js

エクスポート.set = () => {
  dom = document.createElement('div') とします。
  dom.setAttribute('id', 'progress_speed')
  dom.classList.add('progress-box', 'progress-hide')
  dom.innerHTML = '<div class="progress progress-speed-hide" id="progress_box_speed"><div class="speed" style="width:0%;background: #f2f3f5;transition: 0.2s;"></div></div>'
  document.getElementById('app').insertBefore(dom、document.getElementById('app').firstChild) の順にクリックします。
  スタイル = `
              .progress-box{
                幅: 100%;
                高さ: 100%;
                遷移: 0.4秒;
                位置: 固定;
                上: 0;
                左: 0;
                背景: rgba(0,0,0,0.5);
                zインデックス:4002;
              }
              。進捗 {
                境界線の半径: 19px;
                背景: #f2f3f5;
                幅: 80%;
                高さ: 38px;
                位置: 固定;
                上: calc(50% - 19px);
                左: 計算(50% - 40%)
                zインデックス:2000;
                遷移: 0.4秒;
                不透明度: 1;
              }
              .progress-hide{
                境界線の半径: 19px;
                幅: 0%;
                高さ: 0%;
                上: calc(50% - 0%);
                左: 計算(50% - 0%);
                遷移: 0.2秒;
                オーバーフロー: 非表示;
              }
              .進行速度非表示{
                幅: 0%;
                高さ: 0px;
                遷移: 0.6 秒;
                不透明度: 0;
                オーバーフロー: 非表示;
              }
              。スピード {
                境界線の半径: 19px;
                背景画像: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,透明 25%,透明 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,透明 75%,透明);
                背景画像: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,透明 25%,透明 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,透明 75%,透明);
                背景画像: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
                高さ: 38px;
                -webkit-背景サイズ: 40px 40px;
                背景サイズ: 40px 40px
                幅: 0%;
                遷移: 0.3秒;
                背景色:#409EFF;
                -o-animation: プログレスバーストライプ 2s 線形無限;
                アニメーション: プログレスバーストライプ 2 秒 線形 無限;
              }
              .スピード成功{
                幅: 100%;
                背景色: #67c23a;
              }
              @-webkit-keyframes プログレスバーのストライプ {
                  から {
                      背景位置: 40px 0
                  }
              
                  に {
                      背景位置: 0 0
                  }
              }
              
              @-o-keyframes プログレスバーストライプ {
                  から {
                      背景位置: 40px 0
                  }
              
                  に {
                      背景位置: 0 0
                  }
              }
              
              @keyframes プログレスバーのストライプ {
                  から {
                      背景位置: 40px 0
                  }
              
                  に {
                      背景位置: 0 0
                  }
              }`
  styleElement = document.getElementById('progress') とします。
  スタイル要素の場合
    styleElement = document.createElement('style')
    styleElement.type = 'text/css'
    styleElement.id = '進捗状況'
    document.getElementsByTagName('head')[0].appendChild(styleElement)
    styleElement.appendChild(document.createTextNode(スタイル))
  }
}

進捗/コントローラ/スピード/index.js

exports.run = (時間) => {
  document.getElementById('progress_speed').classList.remove('progress-hide')
  時間 = 時間 * 100
  dom = document.getElementById('progress_box_speed') とします。
  dom.classList.remove('進行速度を非表示')
  dom.getElementsByClassName('speed')[0].classList.remove('speed-success')
  タイムアウトを設定する(() => {
    dom.getElementsByClassName('speed')[0].setAttribute('style', 'width:' + time + '%')
  }, 10)
  (時間 >= 100) の場合 {
    タイムアウトを設定する(() => {
      dom.getElementsByClassName('speed')[0].classList.add('speed-success')
      dom.getElementsByClassName('speed')[0].setAttribute('style', 'width:100%')
      dom.classList.add('進行速度を非表示')
      タイムアウトを設定する(() => {
        document.getElementById('progress_speed').classList.add('progress-hide')
        dom.getElementsByClassName('speed')[0].setAttribute('style', 'width:0%')
      }, 900)
    }, 1000)
  }
}

使い方は?

main.js にインポートします (独自の新しいファイルのパスに基づきます。これは私の独自のパスです)

'./common/progress' から進捗状況をインポートします

グローバルマウント

Vue.prototype.$progress = 進行状況

構造

使用:

this.$progress.init.set()
this.$progress.speed.run('10.555555') // 進捗バーは10.555555%に達します

進行状況バーが 100 に達すると、自動的に非表示になります。グローバルにマウントして、プログレス バーが必要な場所ならどこでも使用できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • VueプロジェクトでReactを書く方法の詳細
  • Vue+element はローカル検索機能付きのドロップダウン メニューを実装します
  • vue で wangEditor を使用する方法と、データをエコーし​​てフォーカスを取得する方法
  • vue3とvue2の利点の比較
  • Vue は動的な円形のパーセンテージ進捗バーを実装します
  • Vueはパーセンテージバー効果を実現します
  • Vueでドラッグ可能なコンポーネントを実装する方法
  • Vue でコミュニケーションを実装する 8 つの方法

<<:  データベース管理に役立つ 5 つの MySQL GUI ツール

>>:  MySQL バックアップ スクリプトの書き方

推薦する

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

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

Node.js の fs モジュールと Path モジュールのメソッドの詳細な説明

概要:ファイルシステム モジュールは、標準の POSIX ファイル I/O 操作セットをラップしたシ...

MySQL トリガー: 複数のトリガー操作の作成例の分析

この記事では、例を使用して、MySQL で複数のトリガー操作を作成する方法について説明します。ご参考...

Vueルーティングはページステータスを復元する操作メソッドを返します

ルートパラメータ、ルートナビゲーションガード: ページが戻ったときに検索結果を保持する需要シナリオ:...

Alibaba Cloud Centos7.3 インストール mysql5.7.18 rpm インストール チュートリアル

MariaDBをアンインストールするCentOS7 ではデフォルトで MySQL の代わりに Mar...

MySQL における識別子の大文字と小文字の区別の問題の詳細な分析

MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...

ウェブページサイズに関する調査

<br />統計によると、Web ページの平均サイズは 2003 年以降 3 倍に増加し...

さまざまなブラウザでのhrタグの説明

通常、人事担当者と会うことはめったにありませんが、一度会うと、それが生死を分けることもあります。 H...

CSS3は、変換変形とイベントを組み合わせて扇形のナビゲーションを完成させます。

この場合、transition という単語を間違って書いたため、午後中ずっとそれに取り組みました。本...

@Font-face の基本的な使い方と、すべてのブラウザと互換性を持たせる方法

@Font-face 基本紹介: @font-face は、Web ページにカスタム フォントを表示...

HTML で中国語を UTF-8 に変換する方法

HTMLでは、中国語のフレーズ「學好好學」は「學好好學」と表現できます。プロジェクトでは、SMSアラ...

dockerにros2をインストールするための詳細な手順

目次メイントピック1. UbuntuにDockerをインストールする2. DockerにROS2-F...

MySQLデータベースの管理者パスワードを忘れた場合の解決策

1. コマンド mysqld --skip-grant-tables を入力します (前提条件: m...

Ubuntu 18.04 のすべての Python ライブラリを一度にアップグレードする方法

ピップとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンインストー...

Linux のハードリンクとソフトリンクの区別

Linux には、2 種類のファイル接続があります。1 つは Windows のショートカットに似て...