この記事では、カルーセルチャートの小さなケースを実装するためのJSの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 分析:
1. マウスを内側または外側に動かして、左矢印と右矢印を表示または非表示にします。 // 左矢印要素と右矢印要素を取得します。let arrow_l = this.document.querySelector('.arrow-l'); arrow_r を this.document.querySelector('.arrow-r') とします。 // スライドショー ボックス要素を取得します。let focus = this.document.querySelector('.focus'); // スライドショーボックスにマウスインとマウスアウトのイベントを追加して、左矢印と右矢印を表示または非表示にします focus.addEventListener('mouseenter', function(e) { arrow_l.style.display = 'ブロック'; arrow_r.style.display = 'ブロック'; // マウスが移動したときにタイミング関数をクリアし、カルーセルは自動的にスライドしなくなります。clearInterval(timer); タイマー = null; }); focus.addEventListener('mouseleave', 関数(e) { arrow_l.style.display = 'なし'; arrow_r.style.display = 'なし'; //マウスを移動して時間指定タスクを追加し、2秒ごとに右矢印のクリックをトリガーします。timer = setInterval(function() { 矢印をクリックします。 }, 2000); }) 2. olにliタグを追加します。 // ul リスト (スライドショー リスト) と ol リスト (小さな円のリスト) の要素を取得します。 var ul = focus.querySelector('ul'); // 現時点では ol リストに要素はありません var ol = focus.querySelector('.circle'); // 円形スライドショーリスト内のスライドショーと同じ数の小さな円を追加します for (var i = 0; i < ul.children.length; i++) { // li タグを作成します var li = this.document.createElement('li'); // カルーセル画像のサブスクリプトとして li タグにカスタム属性を追加します for li.setAttribute('l-index', i); // ol タグに li タグを追加します ol.appendChild(li); //各liタグにクリック機能を追加します li.addEventListener('click', function() { // すべての小さな円のスタイルをクリアします for (var j = 0; j < ol.children.length; j++) { ol.children[j].className = ''; } // スタイルを追加するには小さな円をクリックします this.className = 'current'; // num を変更するには小さな円をクリックし、カルーセルを変更するには circl をクリックします。num = this.getAttribute('l-index'); circl = this.getAttribute('l-index'); // アニメーション効果 animate(ul, -num * focusWidth); }) } 3. 最初のスライドショーを ul の末尾にコピーして、スライドショーをより自然に見せます。スライドショーと小さな円を記録するための下付き文字を追加し、スロットルを追加します。 スロットルを追加します。デフォルト値は true です。クリック直後に false に変更すると、最後のクリック イベントが処理されていない場合、この時間内のクリック イベントは処理されなくなります。ロックに似ています。ロックされているときは 1 つのことだけが行われ、他のクリックは行われません。ロックが開いているときは、行うことができます。 // 最初のスライドショーのノードを複製して ul に追加します // 最後のスライドショーを再生するときに、一貫性を保つために最初のスライドショーに切り替えます ol.children[0].className = 'current'; cloneLi = ul.children[0].cloneNode(true); とします。 ul.appendChild(クローンLi); // カルーセルで再生された画像の数を記録するための下付き文字を追加します。num = 0; // num と同様に、小さい円の下付き文字を記録します。circl = 0; // スロットルフラグを追加 = true; 4. 右矢印と左矢印のイベントをクリックして、小さな円のスタイルを変更します。 // 右矢印のクリックイベントをクリックします arrow_r.addEventListener('click', function(e) { // スロットルを追加します。デフォルト値は True です。クリック直後に false に変更すると、最後のクリックイベントが処理されていない場合、この時間内のクリックイベントは処理されません。if (flag) { //スロットルバルブの状態を変更します。flag = false; // num インデックスが最後の場合は、最初のインデックスに復元し、num インデックスをデフォルトの 0 に変更します。 num == ul.children.length - 1の場合{ ul.style.left = 0; 数値 = 0; } // 数値の添え字に 1 を足す 数値++; // スライドのアニメーション効果をスライド数 * 1スライドの幅に変更します animate(ul, -num * focusWidth, function() { // コールバック関数はスロットルを true に設定し、再度クリックできるようにします。flag = true; }); // 小さな円 +1 円++; // 小さな円が最後の円に達すると、0 に戻ります (円 == ul.children.length - 1)の場合{ 円 = 0; } // 小さい円のスタイルを変更します circlChange(); } }) //左矢印クリックイベント arrow_l.addEventListener('click', function(e) { if (フラグ) { フラグ = false; // 値が0の場合、最初の画像から左に進むことを意味します if (num == 0) { // num の添え字を最後のものに変更します num = ul.children.length - 1; // カルーセル画像を最後のものに変更します ul.style.left = -num * focusWidth + 'px'; } // 数値 -1 数値--; // アニメーション効果 animate(ul, -num * focusWidth, function() { フラグ = true; }); // 小さな円が0の場合、最初のスライドショーに到達したことを意味します if (circl == 0) { // 最後まで小さな円 circl = ul.children.length - 1; } // 小さい円 -1 円--; // 小さい円のスタイルを変更します circlChange(); } }) 関数circlChange() { // ol リストを走査し、各小さな円のスタイルを削除します for (var i = 0; i < ol.children.length; i++) { ol.children[i].className = ''; }; // 現在の circl の下付き文字の小さい円にスタイルを追加します。ol.children[circl].className = 'current'; } 5. カルーセルアニメーション機能のカプセル化: 関数 animate(obj, target, callback) { // console.log(callback); callback = function() {} callback() を呼び出すとき // まず前のタイマーをクリアし、現在のタイマーのみを保持して実行します clearInterval(obj.timer); obj.timer = setInterval(関数() { // ステップ値をタイマーに書き込みます // 小数点の問題を回避するためにステップ値を整数に変更します // var step = Math.ceil((target - obj.offsetLeft) / 10); var ステップ = (ターゲット - obj.offsetLeft) / 10; ステップ = ステップ > 0 ? Math.ceil(step) : Math.floor(step); obj.offsetLeft == ターゲットの場合 { // アニメーションを停止すると、基本的にタイマーも停止します。clearInterval(obj.timer); //タイマーの最後にコールバック関数を記述します // if (callback) { // // 関数を呼び出す // callback(); // } コールバック && コールバック(); } // 1ずつ増加するステップ値を徐々に減少する値に変更します。ステップ式: (目標値 - 現在位置) / 10 obj.style.left = obj.offsetLeft + ステップ + 'px'; }, 15); } 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Docker で LNMP 環境を素早く構築する方法 (最新)
>>: マウスを置いたときに半透明効果のテキスト説明を実現するための純粋な CSS (初心者は必読)
誰もが色にとても敏感だと思います。私たちの目が見るところにはどこにでも色があります。では、CSS で...
簡単な説明<br />IE6および7では、一般的なaタグ(HTMLで記述され、DOM操作...
TypeScript を使用する場合、TypeScript が提供する型システムを使用してコードのあ...
プロジェクト ページの作成中に、子要素が親要素の透明度を継承するという問題に遭遇しました。多くのドキ...
目次1要素オフセットシリーズ1.1 オフセットの概要1.2 オフセットとスタイルの違い視覚領域クライ...
目次序文状態DockerをインストールするRedisのマスターノードとスレーブノードを構成する序文以...
共通コンベンションタグ自己終了タグ。閉じる必要はありません (例: img input br hr ...
導入MySQL の SQL クエリ ステートメントで is null、is not null、!= ...
1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...
シミュレーション環境を構築する:オペレーティングシステム: centos7メモリ: 1G 1.8.0...
Docker ダウンロード アドレス: http://get.daocloud.io/#instal...
MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...
序文通常、大量のデータを扱う MySQL クエリには「ページング」戦略が採用されます。ただし、ページ...
序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...
目次1. 原因2. デバイス情報3. 準備4. Apacheをインストールする5. gitを設定する...