ブリージングカルーセルを実装するネイティブJS

ブリージングカルーセルを実装するネイティブJS

今日は、ネイティブ JS で実装されたブリージング カルーセルを紹介します。効果は次のとおりです。

以下はコード実装です。コピーして貼り付けていただいて結構です。

<!DOCTYPE html>
<html>
 
<ヘッド>
    <メタ文字セット="utf-8" />
    <title>ブリージングカルーセルを実装するためのネイティブ JS</title>
    <スタイル>
        ul {
            マージン: 0;
            左パディング: 0;
        }
 
        li {
            リストスタイル: なし;
        }
 
        画像 {
            境界線: なし;
        }
 
        #主要 {
            幅: 280ピクセル;
            高さ: 330ピクセル;
            オーバーフロー: 非表示;
            位置: 相対的;
            マージン: 20px 自動 0 自動;
        }
 
        #メインul {
            位置: 絶対;
            左: 0;
        }
 
        #メイン ul li {
            幅: 280ピクセル;
            高さ: 330ピクセル;
            フロート: 左;
            位置: 絶対;
            フィルター:アルファ(不透明度=0);
            不透明度: 0;
        }
 
        #ボタン{
            行の高さ: 14px;
            テキスト配置: 中央;
            背景: #eeeeee;
            幅: 280ピクセル;
            マージン: 10px 自動 0 自動;
            ディスプレイ: フレックス;
            flex-direction: 行;
            コンテンツの両端揃え: スペースを空ける;
            アイテムの位置を中央揃えにします。
        }
 
        #ボタン{
            表示: インラインブロック;
            幅: 14px;
            高さ: 14px;
            テキスト装飾: なし;
            行の高さ: 12px;
            テキスト配置: 中央;
            境界線の半径: 7px;
        }
 
        #btn a.index {
            背景色: #ccc;
        }
 
        #btn a.active {
            背景色: 赤;
        }
    </スタイル>
    <script type="text/javascript" src="js/move.js"></script>
    <スクリプト>
        window.onload = 関数(){
            var oMain = document.getElementById('main');
            var oUl = oMain.getElementsByTagName('ul')[0];
            var aLi = oUl.getElementsByTagName('li');
 
            var oBtn = document.getElementById('btn');
            var aA = oBtn.getElementsByTagName('a');
 
            var iNow = 1;
            var iNow2 = 1;
            var bBtn = true;
            var 数値 = 3;
            var タイマー = null;
 
            oUl.style.width = aLi.length * aLi[0].offsetWidth + 'px';
 
            aA[0].onclick = 関数(){
                もし(bBtn){
                    タイマーの間隔をクリアします。
                    タイマー = setInterval(autoPlay, 3000);
                    (var i = 0; i < aLi.length; i++) の場合 {
                        aLi[i].style.position = '相対';
                        aLi[i].style.filter = 'alpha(不透明度=100)';
                        aLi[i].style.opacity = 1;
                    }
                    oUl.style.left = -(iNow - 1) * aLi[0].offsetWidth + 'px';
                    iNow == 1の場合{
                        iNow = aLi.length;
                        aLi[aLi.length - 1].style.position = '相対';
                        aLi[aLi.length - 1].style.left = -aLi.length * aLi[0].offsetWidth + 'px';
                    } それ以外 {
                        今--;
                    }
                    iNow2--;
                    実行();
                    bBtn = 偽;
                }
            };
            aA[aA.length - 1].onclick = 関数(){
                もし(bBtn){
                    タイマーの間隔をクリアします。
                    タイマー = setInterval(autoPlay, 3000);
                    (var i = 0; i < aLi.length; i++) の場合 {
                        aLi[i].style.position = '相対';
                        aLi[i].style.filter = 'alpha(不透明度=100)';
                        aLi[i].style.opacity = 1;
                    }
                    oUl.style.left = -(iNow - 1) * aLi[0].offsetWidth + 'px';
                    iNow == aLi.lengthの場合{
                        iNow = 1;
                        aLi[0].style.position = '相対';
                        aLi[0].style.left = aLi.length * aLi[0].offsetWidth + 'px';
                    } それ以外 {
                        iNow++;
                    }
                    iNow2++;
                    実行();
                    bBtn = 偽;
                }
            };
 
            (var i = 1; i < aA.length - 1; i++) の場合 {
                aA[i].インデックス = i;
                aA[i].onclick = 関数(){
                    タイマーの間隔をクリアします。
                    タイマー = setInterval(autoPlay, 3000);
                    インデックス
                    インデックス
                    表示する();
                };
            };
 
            関数toRun() {
                (var i = 1; i < aA.length - 1; i++) の場合 {
                    aA[i].className = 'インデックス';
                }
                aA[iNow].className = 'アクティブ';
 
                startMove(oUl, { 左: -(iNow2 - 1) * aLi[0].offsetWidth }, 関数 () {
                    iNow == 1の場合{
                        aLi[0].style.position = '相対';
                        aLi[0].style.left = 0;
                        oUl.style.left = 0;
                        1 を返します。
                    } そうでない場合 (iNow == aLi.length) {
                        aLi[aLi.length - 1].style.position = '相対';
                        aLi[aLi.length - 1].style.left = 0;
                        oUl.style.left = -(aLi.length - 1) * aLi[0].offsetWidth + 'px';
                        iNow2 = aLi.長さ;
                    }
 
                    (var i = 0; i < aLi.length; i++) の場合 {
                        aLi[i].style.position = '絶対';
                        aLi[i].style.filter = 'alpha(不透明度=0)';
                        aLi[i].style.opacity = 0;
                    }
                    oUl.style.left = 0;
                    aLi[iNow2 - 1].style.zIndex = num++;
                    aLi[iNow2 - 1].style.filter = 'alpha(不透明度=100)';
                    aLi[iNow2 - 1].style.opacity = 1;
 
                    bBtn = true;
                });
            };
 
            関数toShow() {
                (var i = 1; i < aA.length - 1; i++) の場合 {
                    aA[i].className = 'インデックス';
                }
                (var i = 0; i < aLi.length; i++) の場合 {
                    startMove(aLi[i], { 不透明度: 0 });
                }
                aA[iNow].className = 'アクティブ';
                startMove(aLi[iNow - 1], { 不透明度: 100 }, 関数() {
                    aLi[iNow - 1].style.zIndex = num++;
 
                });
            }
 
            タイマー = setInterval(autoPlay, 3000);
 
            関数autoPlay() {
                iNow == aLi.lengthの場合{
                    iNow = 1;
                    1 を返します。
                } それ以外 {
                    iNow++;
                    iNow2++;
                }
 
                表示する();
            }
        };
    </スクリプト>
</head>
 
<本文>
    <div id="メイン">
        <ul>
            <li style="z-index:2; filter:alpha(opacity=100); opacity:1;">
                <あ>
                    <img src="images/0.jpg" />
                </a>
            </li>
            <li>
                <あ>
                    <img src="images/1.jpg" />
                </a>
            </li>
            <li>
                <あ>
                    <img src="images/2.jpg" />
                </a>
            </li>
            <li>
                <あ>
                    <img src="images/3.jpg" />
                </a>
            </li>
        </ul>
    </div>
    <div id="btn">
        <a class="prev" href="javascript:;">
            <a class="active" href="javascript:;">
        </a>
        <a class="index" href="javascript:;"></a>
        <a class="index" href="javascript:;"></a>
        <a class="index" href="javascript:;"></a>
        <a class="next" href="javascript:;">></a>
    </div>
</本文>
 
</html>

以下は、上記のコードで紹介した move.js の最も重要な移動関数のコードです。

関数 startMove(obj, json, fnEnd) {
    タイマー間隔をクリアします。
    obj.timer = setInterval(関数() {
        doMove(obj、json、fnEnd);
    }, 30);
}
関数doMove(obj, json, fnEnd) {
    var iCur = 0;
    var 属性 = null;
    var bStop = true;
    for (json 内の属性) {
        属性 == '不透明度' の場合 {
            (parseInt(100 * getStyle(obj、attr))== 0)の場合{
                iCur = parseInt(100 * getStyle(obj, attr));
            } それ以外 {
                iCur = parseInt(100 * getStyle(obj, attr)) || 100;
            }
        } それ以外 {
            iCur = parseInt(getStyle(obj, attr)) || 0;
        }
        var iSpeed ​​= (json[attr] - iCur) / 5;
        iSpeed ​​= (iSpeed ​​> 0) ? Math.ceil(iSpeed) : Math.floor(iSpeed);
        json[attr] が iCur の場合
            bStop = false;
        }
        属性 == '不透明度' の場合 {
            obj.style.filter = 'alpha(opacity=' + (iCur + iSpeed) + ')';
            obj.style.opacity = (iCur + iSpeed) / 100;
        } それ以外 {
            obj.style[attr] = iCur + iSpeed ​​+ 'px';
        }
    }
    if (bStop) {
        タイマー間隔をクリアします。
        if (fnEnd) {
            fnEnd.call(obj);
        }
    }
}
関数stopMove(obj) {
    タイマー間隔をクリアします。
}
関数 getStyle(obj, attr) {
    (obj.currentStyle)の場合{
        obj.currentStyle[attr]を返します。
    } それ以外 {
        getComputedStyle(obj)[attr]を返します。
    }
}

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

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

<<:  Docker プラグインを使用して IDEA のクラウド サーバーにプロジェクトをリモートでデプロイする方法

>>:  MySQL Null は 5 つの問題を引き起こす可能性があります (すべて致命的)

推薦する

CSS3で背景画像にカラーマスクを追加する方法

以前、開発中に背景レイヤーにカラーマスクを追加する必要のあるプロジェクトに遭遇しました。ここでは、背...

Centos7 に yum 経由で MySQL をインストールする方法

1. MySQLがインストールされているかどうかを確認する yum インストール済みリスト | gr...

HTML+CSS+JS でキャンバスがマウスの小さな円に追従する特殊効果のソースコードを実現

効果(ソースコードは最後にあります): 成し遂げる: 1. タグを定義します。 <h1>...

CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...

Nginx の realip モジュールの使い方の基礎学習

序文nginx モジュールには、公式とサードパーティの 2 種類があります。nginx のインストー...

Vue-cliフレームワークはタイマーアプリケーションを実装します

技術的背景このアプリケーションは vue-cli フレームワークを使用し、カスタム コンポーネント ...

JavaScript関数の詳細な紹介

任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...

Presto をインストールし、Docker で Hive を接続する詳細なプロセス

1. はじめにPresto は、ギガバイトからペタバイトに及ぶデータ ソースに対してインタラクティブ...

Linux システムの .bash_profile ファイルの詳細な説明

目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...

JS で配列をループする 4 つの方法のまとめ

この記事では、配列を走査する 4 つの方法を比較してまとめます。 for ループ: for (let...

DockerはRedis5.0をビルドし、データをマウントします

目次1. 永続データの簡単なマウント2. DockerFileでイメージをビルドし、設定ファイルを指...

CSS3でアニメーションを実装する3つの方法

これは、面接者の CSS に関する基本的な知識をテストするものです。 CSSでアニメーションを実装す...

CSSリンクと@importの違いの詳細な説明

HTML に CSS を追加するにはどうすればいいですか? HTML で CSS を設定する方法は ...

WeChatアプレットがジグソーパズルゲームを実装

この記事では、WeChatアプレットでジグソーパズルゲームを実装するための具体的なコードを参考までに...

Nginx で Basic Auth ログイン認証を設定する方法

nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...