ドラッグ アンド ドロップはフロントエンドでよく使われる機能であり、多くのエフェクトで 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のルートパスワードを忘れた場合の解決方法
数日前、CSS を使用して三角形の矢印を実装する方法について記事を書きました。 目的の効果は達成され...
DockerにNginxをインストールするNginx は、IMAP/POP3/SMTP サービスも提...
PHP7が出たので、最新バージョンのファンとしては、早速アップグレードして体験してみました。しかし...
ConcurrentHashMapを学習しましたが、どのように適用すればよいかわかりませんか? To...
序文この記事では主に、CSS3 を使用してテキスト折り紙効果を実現する例を紹介します。これは、参考と...
1.ブラウザに次のアドレスを入力します参考: 2. 次のインターフェースに入ります。下の場所をクリッ...
データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以...
1. HTMLの概要htyper テキスト マークアップ言語 ハイパーテキスト マークアップ言語ハ...
序文最近、穴を掘ってスペースを作っているだけなので、心が空っぽになっているように感じます。テクノロジ...
目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...
MySQL 8.0.16で初回ログイン時のパスワードを変更する方法を紹介します。 MySQLデータベ...
目次シーン設定ゲームリソース砲塔の回転動的に生成された弾丸衝突計算効果を高めるターゲットの動き弾薬庫...
目次序文: Ubuntu 18.04 は apt ソースを Alibaba Cloud ソースに変更...
この記事では、ポップアップウィンドウをクリックしたときにポップアップログインボックスを実現するための...
この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...