ドラッグ アンド ドロップはフロントエンドでよく使われる機能であり、多くのエフェクトで 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 効率をN倍に高めるVimクイックリファレンステーブル15個
>>: MacでMysqlのルートパスワードを忘れた場合の解決方法
translate(-50%,-50%) 属性:中央に配置するには、長さと幅の 50% だけ上と左...
この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...
CSS3 を学習する過程で、CSS3 属性を使用すると多くのクールな効果を簡単に実現できることが分か...
負荷分散とは何ですか?ドメイン名が複数の Web サーバーを指している場合は、nginx ロード バ...
in() の ID の順序に従った Mysql クエリ結果の順序の詳細な説明コード例: <se...
React は、ユーザー インターフェイスを構築するための JavaScript ライブラリです。F...
目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...
docker アタッチコマンドdocker attach [options] 容器実行中のコンテナに...
最適化する理由:実際のプロジェクトが開始され、データベースが一定期間稼働した後、初期のデータベース設...
VMware Tools は VMware 仮想マシンに付属するツールで、VirtualBox (...
LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | grep ...
テーブル ヘッダーの背景画像を設定します。任意の GIF または JPEG 画像ファイルを使用できま...
CSS3 - 影の追加(ボックスシャドウの使用) CSS3 - div またはテキストに影を追加する...
1. 問題の説明MYSQL を起動すると、図に示すように、「ERROR 2003 (HY000): ...
Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...