Vueはドラッグプログレスバーを実装します

Vueはドラッグプログレスバーを実装します

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

コンポーネントコード:

<テンプレート>
 <div>
  <div class="スライダー" ref="スライダー">
   <div class="process" :style="{ width }"></div>
   <div class="thunk" ref="trunk" :style="{left}">
    <div class="block"></div>
    <div class="tips">
     <!-- <span>{{スケール*100}}</span> -->
     <i class="fas fa-caret-down"></i>
    </div>
   </div>
  </div>
  <div>
   <ボタン
    @クリック="
     () => {
      this.per++;
     }
    「
   >
    +</ボタン
   >{{ あたり }}%<ボタン
    @クリック="
     () => {
      (this.per > 0)の場合{
       this.per--;
      }
     }
    「
   >
    -
   </ボタン>
  </div>
 </div>
</テンプレート>
<スクリプト>
/*
 * min プログレスバーの最小値* max プログレスバーの最大値* v-model は現在の値に対して双方向バインディングを実行し、ドラッグの進行状況をリアルタイムで表示します* */
エクスポートデフォルト{
 プロパティ: ["最小", "最大", "値"],
 データ() {
  戻る {
   slider: null, //スクロールバーのDOM要素 thunk: null, //ドラッグDOM要素 per: this.value, //現在の値};
 },
 // ページにレンダリングする場合、mounted() {
  this.slider = this.$refs.slider;
  this.thunk = this.$refs.trunk;
  var _this = これ;
  this.thunk.onmousedown = 関数 (e) {
   var 幅 = parseInt(_this.width);
   var disX = e.clientX;
   document.onmousemove = 関数 (e) {
    // 値、左、幅
    // 値が変わると、計算プロパティを通じて左と幅が変更されます

    // ドラッグ時に新しい幅を取得します
    var newWidth = e.clientX - disX + 幅;
    // ドラッグ時の新しいパーセンテージを取得します。var scale = newWidth / _this.slider.offsetWidth;
    _this.per = Math.ceil((_this.max - _this.min) * スケール + _this.min);
    _this.per = Math.max(_this.per, _this.min);
    _this.per = Math.min(_this.per, _this.max);
    _this.$emit("入力", _this.per);
   };
   document.onmouseup = 関数(){
    document.onmousemove = document.onmouseup = null;
   };
   false を返します。
  };
 },
 計算: {
  // スライダーの進行幅とトランクの左の値を計算するためのパーセンテージを設定します // 対応する式は、現在の値 - 最小値 / 最大値 - 最小値 = スライダーの進行幅 / スライダーの合計幅です
  // トランクの左 = スライダーの進行幅 + トランクの幅 / 2
  スケール() {
   (this.per - this.min) / (this.max - this.min) を返します。
  },
  幅() {
   スライダーの場合
    this.slider.offsetWidth * this.scale + "px" を返します。
   } それ以外 {
    0 + "px" を返します。
   }
  },
  左() {
   スライダーの場合
    戻る (
     this.slider.offsetWidth * this.scale -
     this.thunk.offsetWidth / 2 +
     「ピクセル」
    );
   } それ以外 {
    0 + "px" を返します。
   }
  },
 },
};
</スクリプト>
<スタイル>
。箱 {
 マージン: 100px 自動 0;
 幅: 80%;
}
.clear:after {
 コンテンツ: "";
 表示: ブロック;
 クリア: 両方;
}
.スライダー{
 ユーザー選択: なし;
 位置: 相対的;
 マージン: 20px 0;
 幅: 400ピクセル;
 高さ: 10px;
 背景: #e4e7ed;
 境界線の半径: 5px;
 カーソル: ポインタ;
}
.スライダー .プロセス {
 位置: 絶対;
 左: 0;
 上: 0;
 幅: 112ピクセル;
 高さ: 10px;
 境界線の半径: 5px;
 背景: #81b159;
}
.スライダー .サンク {
 位置: 絶対;
 左: 100px;
 上: -7px;
 幅: 20px;
 高さ: 20px;
}
.スライダー.ブロック{
 幅: 20px;
 高さ: 20px;
 境界線の半径: 50%;
 境界線: 2px 実線 #409eff;
 背景: rgba(255, 255, 255, 1);
 遷移: すべて 0.2 秒;
}
.スライダー .tips {
 位置: 絶対;
 左: -7px;
 下: 30px;
 最小幅: 15px;
 テキスト配置: 中央;
 パディング: 4px 8px;
 /* 背景: #000; */
 境界線の半径: 5px;
 高さ: 24px;
 色: #fff;
}
.スライダー .tips i {
 位置: 絶対;
 左マージン: -5px;
 左: 50%;
 下: -9px;
 フォントサイズ: 16px;
 色: #000;
}
.スライダー .block:hover {
 変換: スケール(1.1);
 不透明度: 0.6;
}
</スタイル>

電話:

<テンプレート>
 <スライダー:min="0" :max="100" v-model="per"></スライダー>
</テンプレート>

<スクリプト>
「@/components/slider」からスライダーをインポートします。
エクスポートデフォルト{
 データ() {
  戻る {};
 },
 計算: {
  あたり:
   得る() {
    0を返します。
   },
   設定(値) {
    コンソールログ(val);
   },
  },
 },
 コンポーネント: { スライダー },
 マウント() {},
 メソッド: {},
};
</スクリプト>

<スタイル>
</スタイル>

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

以下もご興味があるかもしれません:
  • Vue で円形プログレスバーを実装する例
  • vue.js+ElementUI はパスワードの強度を促すプログレスバーの効果を実現します
  • Vue ページの読み込み時の進捗バー機能 (サンプル コード)
  • 循環読み込みプログレスバーのカプセル化 (Vue プラグイン バージョンとネイティブ js バージョン)
  • Vueはnprogressを設定してページ上部にプログレスバーを実装します。
  • Vue で NProgress プログレスバーを使用する方法
  • Vue プロジェクトはファイルダウンロードの進行状況バー機能を実装します

<<:  deepin 2014 システムに MySQL データベースをインストールする方法

>>:  Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

推薦する

Html+CSS 描画三角形アイコン

まずはレンダリングを見てみましょう: XML/HTML コードコンテンツをクリップボードにコピー&l...

Linuxでテキスト比較を実現するコツを教えます

序文コードを書く過程で、必然的にコードに何らかの変更を加えることになります。しかし、変更を加えるとき...

SQLでEXPLAINコマンドを使用する方法

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

MySQL 8.0 の新機能の落とし穴と解決策についての簡単な説明 (要約)

1. ユーザーを作成して承認するMySQL 8.0 では、ユーザーの作成と認証が以前とは異なります...

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

グローバルトーストコンポーネントをカプセル化するVueの完全な例

目次序文1. vue-cliを使う1. Toastコンポーネントを定義する2. main.jsで設定...

vsCodeはワンクリックでvueテンプレートを生成します

1. ショートカットCtrl + Shift + Pを使用してコンソールを呼び出します 2、「スニペ...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...

jsを使って簡単な計算機を作る

この記事では、jsで簡単な計算機を作成する具体的なコードを参考までに共有します。具体的な内容は次のと...

CSS スティッキーフッターのいくつかの実装

「スティッキーフッター」とはいわゆる「スティッキー フッター」は、新しいフロントエンドの概念や技術で...

マークアップ言語 - リスト

標準化されたデザインソリューション - マークアップ言語とスタイルマニュアルWeb 標準ソリューショ...

vueを使用して登録ページの効果を実現し、vueを使用してSMS認証コードログインを実現します

この記事の例では、登録ページの効果を実現するためのVueの具体的なコードを参考までに共有しています。...

Docker を使用した RabbitMQ 環境のデプロイの詳細な紹介

前提条件: Dockerはすでにインストールされています1. 画像を見つける(方法は2つあります) ...

MySQLのkillがスレッドをkillできない理由

目次背景問題の説明原因分析シミュレーションする総括する背景日常の使用において、MySQL で個別また...

Ubuntu の空き容量を増やす 5 つの簡単な方法

序文ほとんどの人は、システム ディスク ストレージが少ないときにこの操作を実行するか、Linux シ...