カルーセル効果を作成するためのjs

カルーセル効果を作成するためのjs

カルーセルはフロントエンド開発において比較的重要なポイントだと思います。ネイティブjsの知識ポイントがたくさんあるからです。以下はカルーセルの作り方を学ぶプロセスです。

困難:

1. 以下の対応する円と画像を動的に自動生成する方法
2. 下の円を絵に合わせる方法
3. 前のページと次のページのボックスが移動する距離
4. 画像切り替え時のフェードアウトアニメーション効果
5. スロットルバルブの概念

効果:

コード:

<!DOCTYPE html>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <スタイル>
        * {
            パディング: 0;
            マージン: 0;
        }
 
        {
            テキスト装飾: なし;
            色: 白;
            行の高さ: 50px;
            テキスト配置: 中央;
        }
 
        li {
            リストスタイル: なし;
        }
 
        .tb-プロモーション {
            位置: 相対的;
            幅: 700ピクセル;
            高さ: 300px;
            マージン: 自動;
            オーバーフロー: 非表示;
        }
 
        .tb-プロモ .imgg {
            位置: 絶対;
            上: 0;
            左: 0;
            幅: 3000ピクセル;
        }
 
        .tb-promo .imgg li {
            フロート: 左;
 
 
        }
 
        .tb-promo .imgg li img {
            幅: 700ピクセル;
            高さ: 300px;
        }
 
        .tb-プロモ .prev {
            表示: なし;
            位置: 絶対;
            上: 125px;
            左: 0;
            幅: 25px;
            高さ: 50px;
            背景色: rgba(0, 0, 0, 0.2);
            右上の境界線の半径: 25px;
            右下の境界線の半径: 25px;
            zインデックス: 999;
        }
 
        .tb-promo .prev:hover {
            背景色: rgba(0, 0, 0, 0.5);
        }
 
        .tb-プロモ .next {
            表示: なし;
            位置: 絶対;
            上: 125px;
            右: 0;
            幅: 25px;
            高さ: 50px;
            背景色: rgba(0, 0, 0, 0.2);
            左上の境界線の半径: 25px;
            左下の境界線の半径: 25px;
            zインデックス: 999;
        }
 
        .tb-promo .next:hover {
            背景色: rgba(0, 0, 0, 0.5);
        }
 
        .tb-プロモ .プロモ-nav {
            位置: 絶対;
            上: 270px;
            左: 50%;
            左マージン: -40px;
 
            高さ: 25px;
 
        }
 
        .tb-promo .promo-nav li {
            フロート: 左;
            幅: 16px;
            高さ: 16px;
            背景色: 白;
            境界線の半径: 8px;
            マージン: 4px;
 
 
        }
 
        .tb-プロモ .プロモnav .one {
 
            背景色: トマト;
        }
    </スタイル>
</head>
 
<本文>
    <div class="tb-promo">
 
        <a href="javascript:;" class="prev"><</a>
                <a href="javascript:;" class="next">></a>
                <ul class="imgg">
                    <li><img src="./61.jpeg" alt=""></li>
                    <li><img src="./62.jpeg" alt=""></li>
                    <li><img src="./63.jpeg" alt=""></li>
 
                </ul>
                <ol class="promo-nav">
 
 
 
                </ol>
    </div>
    <スクリプト>
        var prev = document.querySelector('.prev');
        var next = document.querySelector('.next');
        var tbpromo = document.querySelector('.tb-promo');
        var ul = document.querySelector('ul');
        var ol = document.querySelector('ol');
        //アニメーション関数 function animate(obj, target) {
            clearInterval(obj.timer); // 複数回のクリックを防ぐために呼び出します obj.timer = setInterval(function () {
                var ステップ = (ターゲット - obj.offsetLeft) / 10;
                step = step > 0 ? Math.ceil(step) : Math.floor(step); // 正と負の値を丸める ​​if (obj.offsetLeft == target) {
                    タイマー間隔をクリアします。
                } それ以外 {
                    obj.style.left = obj.offsetLeft + ステップ + 'px';
                }
            }, 10)
        }
 
        // 動的なナビゲーション サークルを生成します var tbpromWidth = tbpromo.offsetWidth;
        (var i = 0; i < ul.children.length; i++) の場合 {
            var li = document.createElement('li');
            ol.appendChild(li);
            //カスタム属性を通じてインデックス番号を記録します li.setAttribute('index', i);
            //円の色の変更を記述するための独自のアイデア li.addEventListener('click', function () {
                // すべての円の色をクリアします for (var i = 0; i < ol.children.length; i++) {
                    ol.children[i].className = '';
                }
                this.className = 'one';
 
                var index = this.getAttribute('index');
                // li をクリックし、li のインデックス番号をコントロール変数に割り当てます。num = index;
                円=インデックス;
                アニメーション化(ul, -index * tbpromWidth);
 
 
            })
            ol.children[0].className = 'one';
        }
        //最初の画像 li を複製し、シームレスに切り替えるために最後に配置します。var frist = ul.children[0].cloneNode(true);
        ul.appendChild(frist);
 
 
        //次のページと前のページを非表示にして表示する tbpromo.addEventListener('mouseenter', function () {
            prev.style.display = 'ブロック';
            next.style.display = 'ブロック';
            タイマーの間隔をクリアします。
            timer=0; // タイマー変数をクリアする })
        tbpromo.addEventListener('mouseleave', 関数() {
            prev.style.display = 'なし';
            next.style.display = 'なし';
            タイマー = setInterval(関数() {
            next.click(); // クリックイベントを手動で呼び出す}, 1500)
 
        })
 
        //次の前のアニメーション var num = 0;
        // 制御円 var circle = 0;
        //スロットルバルブ変数 var flag=true;
        
        //次のページ next.addEventListener('click', function () {
           
                //最後はulを判断してleftを0に戻す
            num == (ul.children.length - 1) の場合 {
                ul.style.left = 0;
                数値 = 0;
            }
            
                数値++;
                アニメーション化(ul, -num * tbpromWidth);
                サークル++;
                (円 == 3)の場合{
                    円 = 0;
                }
                (var i = 0; i < ol.children.length; i++) {
                    ol.children[i].className = '';
                }
                ol.children[circle].className = 'one';
           
            
        })
        //前のページ prev.addEventListener('click', function () {
            
            数値 == 0 の場合
                num = ul.children.length-1;
                ul.style.left = -num*tbpromWidth+'px';
                
            }
            それ以外 {
                数値--;
                アニメーション化(ul, -num * tbpromWidth);
                丸 - ;
                (円<0)の場合{
                    円 = 2;
                }
                (var i = 0; i < ol.children.length; i++) {
                    ol.children[i].className = '';
                }
                ol.children[circle].className = 'one';
            }
        })
        //自動再生 var timer = setInterval (function () {
            next.click(); // クリックイベントを手動で呼び出す}, 2000)
    </スクリプト>
</本文>
 
</html>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

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

<<:  Docker-compose インストール db2 データベース操作

>>:  MySQLクエリ条件のnot inとinの違いと理由

推薦する

Linuxでmore、less、catコマンドを使用してファイルの内容を表示します

Linux では、cat、more、less の各コマンドを使用してファイルの内容を表示できます。c...

Vue のフィルターの適用シナリオの詳細な説明

filterは通常、特定の値をフィルターするために使用されます。たとえば、フィールドが空だが、フロン...

Docker コンテナのネットワーク設定によく使われるコマンドの詳しい説明

基本的なネットワーク構成Docker はイメージに基づいて複数のコンテナを「開く」ことができ、各コン...

JavaScript シングルスレッドと非同期の詳細

目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...

CSS3 カテゴリメニュー効果

CSS3 カテゴリ メニューの効果は次のとおりです。 html <html> <ヘ...

Linux で ss コマンドと zabbix を組み合わせてソケットを監視する方法の詳細な説明

目次序文1. ssコマンド2. Zabbix監視マシンの全体的なソケットステータス2.1. スクリプ...

CSS で要素を中央揃えにする N 通りの方法

目次序文インライン要素の中央揃えテキストを垂直に中央揃え要素を水平方向に中央揃えにするブロックレベル...

MySQLの行数カウントに関する簡単な説明

各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...

ローカルサーバーを構築するためのwebpack-dev-serverの実装

目次序文webpack-deb サーバーwebpack-dev-server 起動エラー解決策1解決...

MySQL 結合バッファの原理

目次1. MySQL 結合バッファ2. JoinBufferCacheストレージスペースの割り当て3...

Debian 9 システムに MySQL データベースをインストールする方法

序文タイトルを見ると、誰もが「Debian 9 に MySQL をインストールするにはどうすればいい...

mysql データ型変換の実装

1. 問題下図のような表があり、結果値がreference_high値より大きいデータを見つける必要...

MySQL で '%' を含むフィールドをクエリする方法の詳細な説明 (ESCAPE の使用法)

SQLのlike文では、例えば SELECT * FROM user WHERE username...

JavaScript で同時実行制御を実装する方法

目次1. 同時実行制御の概要1.1 フェーズ1 1.2 フェーズ2 1.3 フェーズ3 2. 同時実...

MySQL における制限関数と合計関数の混在使用の問題の詳細な説明

序文今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LI...