スライダーを作成するためのネイティブ js ドラッグ アンド ドロップ機能のサンプル コード

スライダーを作成するためのネイティブ js ドラッグ アンド ドロップ機能のサンプル コード

ドラッグ アンド ドロップはフロントエンドでよく使われる機能であり、多くのエフェクトで js のドラッグ アンド ドロップ機能が使用されます。スライダーのコア機能は、js を使用してスライダーをドラッグし、位置を変更することです。完全なスライダーには、スライダー、スライド トレース、スライダー、テキスト、その他の要素が含まれます。まず、次に示すように HTML コードを記述します。

<div class="bar_wrap" id="wrap"><!--外側のラッピング要素-->
 <div class="bar_container"><!--スライドバー-->
  <div class="bar_into"></div><!--スライドの軌跡-->
 </div>
 <div class="bar_drag"><!--スライダー-->
  <div class="bar_text"></div><!--テキスト-->
 </div>
</div>

次に、各要素に CSS スタイルを追加して、次の効果を実現します。

次に、分析関数を使用して js コードをステップごとに完成させます。

1. スライダーの各要素を取得します。コードは次のとおりです。

//外側のラップ要素を取得します var eBarWrap = document.getElementById('wrap');
 //スライダーを取得します var eBarCon = eBarWrap.getElementsByClassName('bar_container')[0];
 //スライディングトレース要素を取得します。var eBarInto = eBarWrap.getElementsByClassName('bar_into')[0];
 //スライダーを取得します var eBarDrag = eBarWrap.getElementsByClassName('bar_drag')[0];
 //テキスト要素を取得します var eBarText = eBarWrap.getElementsByClassName('bar_text')[0];

2. 最大スライド値を取得する スライダーはスライダー バー内でのみスライドできるため、最大スライド位置を制限する必要があります。 DOM 要素の位置は要素の左側から計算されるため、最大値はスライダーの幅 - スライダーの幅になります (以下を参照)。

//最大位置を取得します。var nMax = eBarCon.offsetWidth - eBarDrag.offsetWidth;

3. スライダーをドラッグする機能を実現するには、マウス プレス イベント関数をスライダーにバインドします。コードは次のとおりです。

 //スライダーがドラッグイベントを追加します eBarDrag.addEventListener('mousedown',function(event){
  
 });

3.1 スライダーの位置を取得するには、スライダーをドラッグする必要があります。マウスの動きに合わせてスライダーをドラッグする前に、まずスライダーの元の位置を知っておく必要があります。イベント オブジェクトは、スライダーにバインドされたイベント関数に渡されます。このイベント オブジェクトは、現在のイベントのインスタンス オブジェクトを表し、現在のイベントに関連する情報を含んでいます。以下のように表示されます。

//スライダーがドラッグイベントを追加します eBarDrag.addEventListener('mousedown',function(event){
  // ドラッグを開始するためにマウスのクリック位置を初期化します var nInitX = event.clientX;
  //スライダーの位置を初期化します var nInitLeft = this.offsetLeft;
 });

3.2 スライダーはマウスと一緒に移動します。スライド トレースとテキスト値を変更するときは、スライダー上でマウスを押してからマウスを動かすと、スライダーがマウスと一緒に移動します。ただし、通常はスライダー上でのみマウスを動かすことは不可能なので、次に示すように、ページ上でマウス移動イベントをバインドする必要があります。

//スライダーがドラッグイベントを追加します eBarDrag.addEventListener('mousedown',function(event){
  /*...*/

  //ページはマウス移動イベントをバインドします document.onmousemove = event=>{
   //マウスが移動したときに他の要素やテキストが選択されないようにデフォルトの動作をキャンセルします。event.preventDefault();
   //マウスが動いた後にスライダーが移動する位置を取得します。let nX = event.clientX - nInitX + nInitLeft;
   //スライダーの最大移動位置を制限する if(nX>=nMax){
    nX = nMax;
   }
   //スライダーの最小移動位置を制限する if (nX <= 0) {
    nX = 0;
   }
   //スライダーの位置を変更します(矢印関数が使用されているため、これはまだスライダーを指しています)
   this.style.left = nX + 'px';
   // スライディング トレースの幅を変更します eBarInto.style.width = nX + this.offsetWidth/2 + 'px';
   //テキスト値を変更します eBarText.innerHTML = Math.ceil(nX/nMax*100)/10;
  };
 });

3.3 マウスを放すとスライダーの位置が固定されます。マウスを放すとスライダーは現在の位置で固定され、スライドの軌跡とテキストの値が一緒に変更されます。

//スライダーがドラッグイベントを追加します eBarDrag.addEventListener('mousedown',function(event){
  /*...*/

  //マウスバインディングイベントを解放し、ページ上のすべてのイベントをキャンセルします。document.onmouseup = function(event){
   ドキュメント.onmousemove = null;
   ドキュメント.onmouseup = null;
  }
 });

マウスプレスイベント機能が完成しました。スライダーのスタイルは CSS で実現できますが、デフォルトのテキスト値が空であるため、これは適切ではありません。そのため、次に示すように、テキスト要素のデフォルト値を 0 に割り当てるコードをもう 1 行追加する必要があります。

//デフォルト値を変更する eBarText.innerHTML = 0;

4. スライダーにクリック イベントを追加します。スライダー以外のスライダー上の任意の場所をクリックすると、スライダーはマウスがクリックされた場所に直接スライドします。この機能を実装するには、スライダーにクリック イベントを追加する必要があります。コードは次のとおりです。

//スライドバーにクリックイベントを追加 eBarCon.addEventListener('click',function(event){
  //スライダーの位置を設定します var nLeft = this.offsetLeft;
  // 配置された親要素を取得します。var eParent = this.offsetParent;
  //配置されたすべての親要素をループします while(eParent){
   // 親要素の offsetLeft 値を追加して、スライダーとページの左側の間の距離を正確に特定します。nLeft += eParent.offsetLeft;
   // 親要素の外側に配置された親要素を再度取得します。eParent = eParent.offsetParent;
  }
  //スライダーの位置を計算します var nX = event.clientX - nLeft;
  //スライダーの位置を変更します eBarDrag.style.left = nX + 'px';
  // スライディング トレースの幅を変更します eBarInto.style.width = nX + eBarDrag.offsetWidth/2 + 'px';
  //テキスト値を変更する eBarText.innerHTML = Math.ceil(nX/nMax*100)/10
 });

ネイティブ js ドラッグ アンド ドロップ機能を使用してスライダーを作成する方法に関するチュートリアルの記事はこれで終わりです。js ドラッグ アンド ドロップ機能を使用してスライダーを作成する方法の詳細については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。
  • 水平画面と垂直画面を判断し、ブラウザのスライドバーを禁止するjsの例
  • jsは水平および垂直スライダーを実現します

<<:  効率をN倍に高めるVimクイックリファレンステーブル15個

>>:  MacでMysqlのルートパスワードを忘れた場合の解決方法

推薦する

MySQL データベースの高度なクエリとマルチテーブルクエリ

MySQL マルチテーブルクエリワークシートを追加する -- ユーザーテーブル (ユーザー) テーブ...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

CocosCreator の新しいリソース管理システムの分析

目次1. 資源と建設1.1 クリエイターリソースファイルの基本1.2 リソースの構築2. アセットバ...

JS の toFixed() メソッドの丸め精度の問題の詳細な説明

目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...

QQtabBar による CSS 命名仕様 BEM の詳細な紹介

QQtabBar の BEMまず、BEMとはどういう意味でしょうか? BEM は、ブロック、要素、修...

MySqlデータベースの基礎知識のまとめ

目次基本的なデータベース操作2) データベースを表示する3) データベースを選択する4) データベー...

CSS3は三角形の連続拡大効果を実現します

1. CSS3の三角形は特殊効果でズームし続けます11.1 画像プレビュー 11.2 index.h...

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...

NodeとPythonの双方向通信実装コード

目次プロセスコミュニケーションプロセス間の双方向通信問題要約するサードパーティのデータ サプライヤー...

MySQL 5.7.18 リリース インストール ガイド (bin ファイル バージョンを含む)

インストール プロセスは、コンパイル手順を除いて、基本的にソース バージョンと同じです。この記事では...

HTMLはキャンバスを使用して箇条書きスクリーン機能を実装します

導入最近、大きな課題をこなす際に、弾幕プレイヤーを作る必要がありました。他の人のソースコードを借りて...

Vueカスタム命令の詳細な説明

目次Vueカスタムディレクティブカスタムディレクティブフック機能出力関連属性アプリケーション例要約す...

jQuery における Ajax の関連知識ポイントのまとめ

序文JavaScriptを学ぶ学生は、 AJAX (非同期JavaScriptとxml) 変換は非同...

Zabbixを使用してOracleテーブルスペースの操作プロセスを監視する

0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...