カルーセル効果を作成するための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の違いと理由

推薦する

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする yum インストール -y memcached #memcac...

NFS サーバーの原理と、その構築、構成、展開の手順を簡単に分析します。

目次NFS サービスの概要NFS とは何ですか? NFS マウントの原則NFS サーバーはデータ転送...

純粋なテキストとアイコン付きのボタンを実現するための HTML+CSS

この記事では、いくつかの基本的なページ要素の実装方法をまとめており、後で更新される予定です。まず、私...

JavaScriptの知識ポイントの詳しい説明

目次1. JavaScriptの基礎2. 基本的なJavaScript構文3. JavaScript...

CocosCreator Huarongdaoデジタルパズルの詳しい説明

目次序文文章1. パネル2. 華容島ソリューション3. コード4. 注記序文華容路とは何ですか? 誰...

Vue はシームレスなカルーセル効果を実現

この記事では、シームレスなカルーセル効果を実現するためのVueの具体的なコードを参考までに紹介します...

HTMLエンコードによる文字化け問題について

今日、3年生から質問がありました。彼が書いた HTML コードを開くと、文字化けした文字が表示されま...

MySQL の暗黙的な型変換によって発生するインデックス障害の解決策

目次質問再生暗黙的な変換要約する参照する質問仕事中、1 つの SQL クエリ ステートメントのみを実...

Linux DockerでSpringbootプロジェクトを実行するための詳細な手順

導入: springboot プロジェクトを実行する Docker の構成は実は非常にシンプルで、L...

Vue-cli4 ルーティング構成の詳細な理解

目次序文 - Vue ルーティング1. 最も基本的なルーティング構成1. router/index....

Linux ディスク クォータ管理のグラフィカルな例

ディスク クォータは、コンピューター内の指定されたディスクのストレージ制限です。つまり、管理者はユー...

JSのアンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。

アンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。 1. アンカ...

Navicat を MySQL に接続するときに発生する 2059 エラーの解決方法

最近、Djangoを学習しているときにデータベースを使用する必要があったため、MySQLで使用するた...

MySQLは実際に分散ロックを実装できる

序文前回の記事では、eコマース シナリオでのフラッシュ セールの例を通じて、モノリシック アーキテク...

ウェブデザインにおけるテキスト入力ボックスのパラメータの説明

一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われています。これは HTML 言...