スライダーを作成するためのネイティブ 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のルートパスワードを忘れた場合の解決方法

推薦する

@font-face を使用して Web ページに特殊文字を実装する (カスタム フォントを作成する)

数日前、CSS を使用して三角形の矢印を実装する方法について記事を書きました。 目的の効果は達成され...

DockerにNginxをインストールする方法

DockerにNginxをインストールするNginx は、IMAP/POP3/SMTP サービスも提...

Linux システムで複数のバージョンの PHP を共存させるソリューション (超シンプル)

PHP7が出たので、最新バージョンのファンとしては、早速アップグレードして体験してみました。しかし...

Tomcatがセッションを管理する方法の例

ConcurrentHashMapを学習しましたが、どのように適用すればよいかわかりませんか? To...

CSS3 を使用したテキスト折り紙効果のサンプルコード

序文この記事では主に、CSS3 を使用してテキスト折り紙効果を実現する例を紹介します。これは、参考と...

MySQL 5.7 と Mac 上の MySql の詳細なインストール図をダウンロードする

1.ブラウザに次のアドレスを入力します参考: 2. 次のインターフェースに入ります。下の場所をクリッ...

MySQLからClickHouseに移行する5つの方法

データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以...

フロントエンドの HTML 知識ポイントのまとめ (推奨)

1. HTMLの概要htyper テキスト マークアップ言語 ハイパーテキスト マークアップ言語ハ...

列名を知らなくてもMySQLインジェクションを詳細に解説

序文最近、穴を掘ってスペースを作っているだけなので、心が空っぽになっているように感じます。テクノロジ...

MAC+PyCharm+Flask+Vue.js ビルドシステム

目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...

MySQL 8.0 をインストールした後、初めてログインするときにパスワードを変更する問題を解決する

MySQL 8.0.16で初回ログイン時のパスワードを変更する方法を紹介します。 MySQLデータベ...

CocosCreatorでシューティングゲームを作る詳しい解説

目次シーン設定ゲームリソース砲塔の回転動的に生成された弾丸衝突計算効果を高めるターゲットの動き弾薬庫...

Ubuntu 18.04 で apt ソースを Alibaba Cloud ソースに変更する詳細なプロセス

目次序文: Ubuntu 18.04 は apt ソースを Alibaba Cloud ソースに変更...

jsはポップアップウィンドウをクリックすることでポップアップログインボックスを実装します

この記事では、ポップアップウィンドウをクリックしたときにポップアップログインボックスを実現するための...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...