この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 これまでに学んだこと、つまりマウスの監視イベント(出入り、クリック)、ノードの作成、排他的なアイデア、タイマーなどを組み合わせることで、手動および自動で再生できるカルーセルを実現できます。 レンダリングコード1. CSS /*要素のデフォルトの内側と外側の余白をクリアします*/ * { マージン: 0; パディング: 0 } 体{ 幅: 1000ピクセル; マージン: 0 自動; } /*リストの前のドットを削除します*/ li { リストスタイル: なし; } /*画像に枠線がなく、画像の下部の空白部分が削除されます*/ 画像 { 境界: 0; /*ie6*/ 垂直位置合わせ: 中央; } /*リンクの下線を削除します*/ { 色: #666; テキスト装飾: なし; } ホバー{ 色: #e33333; } .fl { フロート: 左; } .fr { フロート: 右; } 。集中 { 位置: 相対的; 幅: 721ピクセル; 高さ: 455px; 背景色: 紫; オーバーフロー: 非表示; 上マージン: 20px; } .focus ul { 位置: 絶対; 上: 0; 左: 0; 幅: 600%; } .focus ul li { フロート: 左; } .矢印-l, .矢印-r { 表示: なし; 位置: 絶対; 上位: 50%; 上マージン: -20px; 幅: 24px; 高さ: 40px; 背景: rgba(0, 0, 0, .3); テキスト配置: 中央; 行の高さ: 40px; 色: #fff; フォントファミリー: 'icomoon'; フォントサイズ: 18px; zインデックス: 2; } .矢印-r { 右: 0; } 。丸 { 位置: 絶対; 下: 10px; 左: 50px; } .circle li { フロート: 左; 幅: 8px; 高さ: 8px; /*背景色: #fff;*/ 境界線: 2px実線 rgba(255, 255, 255, 0.5); マージン: 0 3px; 境界線の半径: 50%; /*マウスが通過するときに小さな手を表示します*/ カーソル: ポインタ; } 。現在 { 背景色: #fff; } 2.html <div class="focus fl"> <!-- 左ボタン --> <a href="javascript:;" class="arrow-l arrow"> < </a> <!-- 右ボタン --> <a href="javascript:;" class="arrow-r arrow"> > </a> <!-- コアスクロール領域 --> <ul> <li> <a href="#" ><img src="images/focus.jpg" alt=""></a> </li> <li> <a href="#" ><img src="images/focus1.jpg" alt=""></a> </li> <li> <a href="#" ><img src="images/focus2.jpg" alt=""></a> </li> <li> <a href="#" ><img src="images/focus3.jpg" alt=""></a> </li> </ul> <!-- 小さな円 --> <ol class="circle"> </ol> </div> 3. JavaScript window.addEventListener('load', 関数() { // 1. 要素を取得する var arrow_l = document.querySelector('.arrow-l'); var arrow_r = document.querySelector('.arrow-r'); var focus = document.querySelector('.focus'); focusWidth を focus.offsetWidth に設定します。 // 2. マウスがフォーカスを通過すると、左ボタンと右ボタンが表示され、非表示になります focus.addEventListener('mouseenter', function() { arrow_l.style.display = 'ブロック'; arrow_r.style.display = 'ブロック'; タイマーの間隔をクリアします。 timer = null; // タイマー変数をクリアします }); focus.addEventListener('mouseleave', 関数() { arrow_l.style.display = 'なし'; arrow_r.style.display = 'なし'; タイマー = setInterval(関数() { //クリック イベントを手動で呼び出します arrow_r.click(); }, 2000); }); // 3. 小さな円を動的に生成します。写真は複数あるので、小さな円をいくつか生成します。var ul = focus.querySelector('ul'); var ol = focus.querySelector('.circle'); // console.log(ul.children.length); (var i = 0; i < ul.children.length; i++) の場合 { // 小さなliを作成する var li = document.createElement('li'); // カスタム属性を通じて現在の小さな円のインデックス番号を記録します li.setAttribute('index', i); // 小さな li を ol に挿入します ol.appendChild(li); // 4. 小さな円の独自のアイデア 小さな円を生成するときにクリックイベントを直接バインドできます li.addEventListener('click', function() { // 全員を殺し、すべての小さいli現在のクラス名をクリアします for (var i = 0; i < ol.children.length; i++) { ol.children[i].className = ''; } // 現在の小さな li を残します。現在のクラス名を設定します。this.className = 'current'; // 5. 小さな円をクリックして画像を移動します。もちろん、ul も移動します。 // ul の移動距離は、小さな円のインデックス番号に画像の幅を掛けた値です。負の値であることに注意してください。// 小さな li をクリックすると、現在の小さな li のインデックス番号が取得されます。var index = this.getAttribute('index'); // 小さな li をクリックしたとき、この li のインデックス番号を num に渡す必要があります。 num = インデックス; // 小さな li をクリックしたとき、この li のインデックス番号を円に渡す必要があります。 円 = インデックス; // num = 円 = インデックス; console.log(フォーカス幅); コンソールログ(インデックス); アニメーション化(ul, -index * focusWidth); }) } // olの最初の小さなliのクラス名を現在のものに設定します ol.children[0].className = '現在の'; // 6. 最初の画像 (li) を複製し、ul の末尾に配置します。var first = ul.children[0].cloneNode(true); ul.appendChild(最初の子); // 7. 右側のボタンをクリックして 1 枚の画像をスクロールします。var num = 0; //circle は小さな円の再生を制御します var circle = 0; // フラグスロットル var flag = true; arrow_r.addEventListener('クリック', 関数() { if (フラグ) { flag = false; // スロットルを閉じる // 最後にコピーしたイメージに到達したら、ul はすぐに left を 0 に戻す必要があります num == ul.children.length - 1の場合{ ul.style.left = 0; 数値 = 0; } 数値++; アニメーション(ul, -num * focusWidth, 関数() { flag = true; // スロットルを開く }); // 8. 右側のボタンをクリックすると、それに応じて小さい円が変化します。別の変数を宣言して、小さい円の再生を制御することができます。circle++; //circle == 4 の場合、クローンされたイメージの終わりに到達したことを意味し、復元します if (circle == ol.children.length) { 円 = 0; } //関数circleChange()を呼び出します。 } }); // 9. 左ボタンメソッド arrow_l.addEventListener('click', function() { if (フラグ) { フラグ = false; 数値 == 0 の場合 num = ul.children.length - 1; ul.style.left = -num * focusWidth + 'px'; } 数値--; アニメーション(ul, -num * focusWidth, 関数() { フラグ = true; }); // 左側のボタンをクリックすると、それに応じて小さな円が変化します。別の変数を宣言して、小さな円の再生を制御することができます。circle--; // 円 < 0 の場合、最初の画像を示し、小さな円を 4 番目の小さな円に変更する必要があります (3) // 円が 0 未満の場合 // 円 = ol.children.length - 1; // } 円 = 円 < 0 ? ol.children.length - 1 : 円; //関数circleChange()を呼び出します。 } }); 関数circleChange() { // 最初に残りの小さな円の現在のクラス名をクリアします for (var i = 0; i < ol.children.length; i++) { ol.children[i].className = ''; } //現在の小さな円の現在のクラス名をそのままにします ol.children[circle].className = 'current'; } // 10. カルーセルを自動的に再生する var timer = setInterval(function() { //クリック イベントを手動で呼び出します arrow_r.click(); }, 2000); }) 肝心なところ! ! ! 画像の動きを実現するためのアニメーションファイル、 animate.js 関数 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL で JSON 形式のフィールドをクエリする詳細な説明
目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...
Linux の ps コマンドは Process Status の略です。 ps コマンドは、システ...
マクロタスクとマイクロタスクJavaScript はシングルスレッド言語です (マルチスレッドの場合...
この記事では、MySQL のマルチテーブル共同クエリ操作について説明します。ご参考までに、詳細は以下...
目次実生活からの例クエリが遅い最適化する方法カウント制限最大値と最小値 min&max実生活...
序文スワップは、ディスク上にある「仮想メモリ」の一部である特殊なファイル (またはパーティション) ...
目次コード:補充:要約する要件: 左のツリーと右のテーブル。組織ツリーでノードを選択した後、詳細ペー...
目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...
この記事では、RHEL8 のネットワーク サービスとネットワーク構成ツール、およびネットワーク ファ...
この記事では、参考までに、簡単な計算機機能を実現するためのVueの具体的なコードを紹介します。具体的...
CDN(コンテンツ配信ネットワーク)を通じて参照できます。 jQuery は Google と Mi...
フレックス レイアウトは間違いなくシンプルで使いやすいです。レイアウトをよりシンプルかつ高速にします...
私は、WinForm と HTML5 を組み合わせた小さなものを作りたいだけなのですが、突然、そこに...
tomcat の web.xml を構成する場合、サーブレットは比較的重要な問題です。ここでは、サー...
HTML img タグ: Web ページに導入される画像を定義します。興味深い usemap 属性も...