今日は、ネイティブ 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Docker プラグインを使用して IDEA のクラウド サーバーにプロジェクトをリモートでデプロイする方法
>>: MySQL Null は 5 つの問題を引き起こす可能性があります (すべて致命的)
Docker デーモンは、 HTTP_PROXY 、 HTTPS_PROXY 、およびNO_PRO...
CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...
H5 レイアウトを設計する場合、通常はバナーに遭遇することになります。例えば、2:1 で表示したい場...
はじめに: Windows 10 を再インストールし、同時にファイルを整理しました。しかし、MySQ...
目次1. シーン紹介2 コードの最適化2.1 ファンを増やす問題を解決する2.2 作品追加の問題を解...
Visual Studio Code は、Microsoft が開発した強力なテキスト エディター...
HTML はタグと属性で構成されており、これらを組み合わせてブラウザにページの表示方法を指示します。...
目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...
MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...
使用環境cmd モードで、mysql --version と入力します (インストールされている M...
目次1. scrapy_splash とは何ですか? 2. scrapy_splashの役割3. s...
序文元のプロジェクトは、パブリックネットワークgitlabに配置されていました。セキュリティ上の理由...
1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...
ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定する必要があります。以下...
導入: Lambda Probe (旧称 Tomcat Probe) は、Apache Tomcat...