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 バックアップ スクリプトの書き方

推薦する

集める価値のある 15 個の JavaScript 関数

目次1. 数字を逆にする2. 配列内の最大のn個の数値を取得する3. 階乗を計算する4. 現在の動作...

Baidu 入力メソッドが API を公開、自由に移植して使用できると主張

百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...

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

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

jQueryはシンプルなコメントエリアを実装します

この記事では、参考までに、簡単なコメントエリアを実装するためのjQueryの具体的なコードを紹介しま...

サーバー同時実行数の推定式と計算方法

最近、サーバーのストレステストを再度行う必要が出てきました。ここでは、最近学んだ見積もりスキームと見...

Ubuntu 18.04 (物理マシン) で OpenWRT 開発環境を構成する方法

1. 仮想マシン(物理マシン)をインストールする仮想マシンまたは物理マシンにインストールできます。 ...

シンプルなリスト機能を実装するミニプログラム

この記事の例では、参考のために簡単なリスト機能を実装するアプレットの具体的なコードを共有しています。...

CentOS 7 での mysql 5.7 のインストール チュートリアル

1. 公式MySQL Yumリポジトリをダウンロードしてインストールする 実行ファイル: mysql...

CSSメディアクエリのアスペクト比を小さくする方法

CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...

Linux に Python 3.8.1 をインストールするための詳細なチュートリアル

この例では、Linux への Python 3.8 のインストールを例に挙げます。 1. 依存パッケ...

フロントエンドブラウザのフォントサイズが12px未満のソリューション

序文最近プロジェクトに取り組んでいたとき、UI デザインのフォント サイズは 10 ピクセルでした。...

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

MySQL 8.0ドライバとAlibaba Druidバージョン間の互換性の問題を解決

この記事では主に、MySQL 8.0 ドライバーと Alibaba Druid バージョン間の互換性...

Angular Cookie の読み取りおよび書き込み操作コード

Angular Cookie の読み取りおよび書き込み操作のコードは次のようになります。 var a...

冗長カーネルを削除するLinuxディープインの実装方法

前の記事では、deepin linux に新しいカーネルを手動でインストールする方法について説明しま...