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

推薦する

「@INC で ExtUtils/MakeMaker.pm が見つかりません」というエラーを解決する

mha4mysql をインストールする場合の手順は、おおよそ次のようになります: unzip、per...

lastInfdexOf 関数の MySQL 実装例

MySQL では lastIndexOf に似た関数を使用する必要がある場合もありますが、すぐに使用...

Linux で JDK をインストールして環境変数を設定する方法 (この記事で十分です)

目次1. Linuxのビット数を確認する2. JDKをダウンロードする3. JDKをインストールする...

Docker は固定コンテナ IP アドレスを実現するためにカスタム ネットワークを作成します。

デフォルトのブリッジ ネットワークのため、コンテナーを再起動すると IP アドレスが変更されます。シ...

Oracle と MySQL の高可用性ソリューションの比較分析

Oracle と MySQL の高可用性ソリューションについては、以前からまとめたいと思っていたので...

CSS を使用して 3 列のアダプティブ レイアウト (両側は固定幅、中央はアダプティブ) を実現します。

いわゆる 3 列適応レイアウトとは、両側の幅が固定され、中央のブロックの幅が適応されることを意味しま...

MySQL の DDL と DML についての簡単な説明

目次序文1. DDL 1.1 データベース操作1.2 データテーブルの操作1.3 一般的なデータ型1...

静的リソースファイルのアクセスログをフィルタリングするNginxの実装

乱雑なログ日常的に使用される Nginx は、静的リソース サーバーとリバース プロキシ サーバーの...

JDBC-idea で mysql をインポートして java jar パッケージに接続する (mac)

序文1. この記事ではMySQL 8.0バージョンを使用していますバージョン5.0と比較すると、パッ...

CSS3 列を使用したカード ウォーターフォール レイアウトを実装するためのサンプル コード

この記事では、カード ウォーターフォール レイアウトを実現するための CSS3 列のサンプル コード...

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

SQL Server での exists と except の使用法の概要

目次1. 存在する1.1 説明1.2 例1.3 交差/2017-07-21 2. 除く2.1 説明2...

CSSは高さと幅を固定した要素の比例表示効果を実現します

padding-top パーセンテージを使用すると、固定幅と比例した高さの表示を実現できます。現在の...

Reactでコンポーネントを作成する方法

目次序文コンポーネントの紹介クラスコンポーネントの作成状態についてレンダリングについて関数コンポーネ...

Angularの動的コンポーネントの詳細な説明

目次使用シナリオ達成方法1. 動的コンポーネントを配置する場所2. コンポーネントのインスタンスを取...