カルーセル例の JS 実装

カルーセル例の JS 実装

この記事では、カルーセルチャートの小さなケースを実装するためのJSの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

分析:

  • 左右の矢印をクリックしてカルーセルをスライドします
  • マウスがカルーセル内にない場合、カルーセルは2秒ごとに自動的にスライドします。
  • マウスが移動したときにカルーセルの自動スライドを停止します
  • 小さな円をクリックすると対応するカルーセルが表示されます

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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScriptカルーセルの実装について
  • JS でカルーセル効果を実現する 3 つの簡単な方法
  • カルーセル効果を実現するための純粋なjs
  • ブリージングカルーセルを実装するネイティブJS
  • JavaScript を使用してカルーセル効果を実装する
  • JavaScript による Web ページ カルーセルの超詳細な実装

<<:  Docker で LNMP 環境を素早く構築する方法 (最新)

>>:  マウスを置いたときに半透明効果のテキスト説明を実現するための純粋な CSS (初心者は必読)

推薦する

MySQL で中国語の文字をピンインでソートする簡単な例

名前を格納するフィールドが GBK 文字セットを使用している場合、GBK 内部コード自体がエンコード...

MySQL 5.7.25 のインストールと設定方法のグラフィックチュートリアル

MySQL インストール ファイルには、msi 形式と zip 形式の 2 種類があります。クリック...

MYSQLはUnionを使用して2つのテーブルのデータを結合し、表示します。

UNION演算子の使用union : 2 つ以上の SELECT ステートメントの結果を 1 つの...

React 手書きタブ切り替え問題

親ファイル React をインポートし、{useState} を 'react' か...

CSS における @ の使用法の概要 (例と説明付き)

@ ルールは、CSS の実行または動作に関する指示を提供する宣言です。各宣言は @ で始まり、その...

MySQLのさまざまなオブジェクトのサイズと長さの制限について話しましょう

目次識別子の長さ制限権限テーブルの範囲フィールドの長さ制限データベースとテーブルの数の制限テーブルサ...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

my.cnf (my.ini) 重要なパラメータの最適化設定手順

MyISAM ストレージエンジンMyISAM ストレージ エンジンは、書き込みよりも読み取りが多く、...

Alibaba Cloud ホストが IP を使用して Web サイトにアクセスできない問題の解決策 (セキュリティ グループ ルールを構成することで解決)

Alibaba Cloud ホストを購入したばかりで、その速度を試すのが待ちきれませんでした。しか...

js はマウスインとマウスアウトによるカード切り替えコンテンツを実装します

この記事では、マウスでカード内外のコンテンツを切り替えるためのjsの具体的なコードを紹介します。具体...

CSSでイメージマッピングを実装する方法

1. はじめにイメージマップを使用すると、画像の領域をホットスポットとして指定できます。この領域にマ...

フレックスレイアウトは左のテキストオーバーフローを実現し、右のテキストの適応を省略します

テキストの長さに応じて、左側のテキストの幅を自動調整できる状況を実現したい。1行が表示できない場合、...

mysql5.7でbinlogを使用してデータを復元する方法

ステップ1: MySQLでbinlogが有効になっていることを確認する '%log_bin%...

nginxコンテナ設定ファイルの独立した実装

コンテナを作成する [root@server1 ~]# docker run -it --name ...

JavaScript が Jingdong のカルーセル効果を模倣

この記事では、JD.comのカルーセル効果の表示を実現するためのJavaScriptの具体的なコード...