シンプルなカルーセル チャートを実装するための JavaScript の最も完全なコード分析 (ES5)

シンプルなカルーセル チャートを実装するための JavaScript の最も完全なコード分析 (ES5)

この記事では、シンプルなカルーセル効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

完全なコード:

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="UTF-8">
  <title>ES5 カルーセル画像</title>
  <スタイル>
   * {パディング: 0;マージン: 0;}
   #ラッパー{
    位置: 相対的;
    マージン: 50px 自動;
    パディング: 0;
    幅: 1000ピクセル;
    高さ: 300px;
   }
   #ラッパー.コンテンツ{
    位置: 相対的;
    幅: 100%;
    高さ: 100%;
    オーバーフロー: 非表示;
   }
   #ラッパー>.コンテンツ>.imgs {
    位置: 絶対;
    マージン: 0;
    パディング: 0;
    左: 0;
    上: 0;
    幅: 6000ピクセル;
    /* 追加の画像用に十分なスペースを残してください。 */
    リストスタイル: なし;
   }
   #ラッパー>.コンテンツ>.imgs li {
    フロート: 左;
    マージン: 0;
    パディング: 0;
    幅: 1000ピクセル;
    高さ: 300px;
   }
   #ラッパー>.content>.imgs>li img {
    幅: 100%;
    高さ: 100%;
   }
   #ラッパー>.コンテンツ>.ドット{
    幅: 163ピクセル;
    位置: 絶対;
    右: 0;
    左: 0;
    マージン: 自動;
    下: 10px;
    リストスタイル: なし;
   }
   #ラッパー>.コンテンツ>.ドットli {
    フロート: 左;
    幅: 20px;
    高さ: 20px;
    テキスト配置: 中央;
    行の高さ: 20px;
    境界線の半径: 50%;
    左マージン: 10px;
    カーソル: ポインタ;
   }
   li.アクティブ{
    背景色: 白;
   }
   li.quiet {
    背景色: #5a5a58;
   }
   .btns{
    表示: なし;
   }
   .btns スパン {
    位置: 絶対;
    幅: 25px;
    高さ: 40px;
    上位: 50%;
    上マージン: -20px;
    行の高さ: 40px;
    テキスト配置: 中央;
    フォントの太さ: 太字;
    フォントファミリー: Simsun;
    フォントサイズ: 30px;
    境界線: 1px 実線 #fff;
    不透明度: 0.5;
    カーソル: ポインタ;
    色: #fff;
    背景:黒;
   }
   .btns .left {
    左: 5px;
   }
   .btns .right {
    左: 100%;
    左マージン: -32px;
   }
  </スタイル>
 </head>
 <本文>
  <div id="ラッパー">
   <div class="content">
    <ul class="imgs">
     <li><img src="img/s1.jpg" /></li>
     <li><img src="img/s2.jpg" /></li>
     <li><img src="img/s3.jpg" /></li>
     <li><img src="img/s4.jpg" /></li>
     <li><img src="img/s5.jpg" /></li>
    </ul>
    <ul class='ドット'></ul>
   </div>
   <div class="btns">
    <span class="left">&lt;</span>
    <span class="right">&gt;</span>
   </div>
  </div>
 </本文>
</html>
<スクリプト>
 var wrapper = document.getElementById("wrapper");
 var imgs = document.getElementsByClassName("imgs")[0];
 var ドット = document.getElementsByClassName("ドット")[0];
 var btns = document.getElementsByClassName("btns")[0];
 var dots = dots.children;
 var len = imgs.children.length; //画像の数 var width = wrapper.offsetWidth; //各画像の幅 var rate = 15; //画像の切り替え速度(px)
 var times = 1; // 速度を倍数に切り替える var timer = null; // タイマーを初期化する var imgSub = 0; // 現在表示されている画像の添え字 var dotSub = 0; // 現在表示されている画像のドット添え字 var temp;
 // DOM 構造にまだ挿入されていないドキュメント フラグメントを作成します。const frag = document.createDocumentFragment()
 // 写真の数に応じて対応するドットをドキュメントフラグメントに追加します for (let i = 0; i < len; i++) {
  const ドット = document.createElement("li");
  dot.className = 'quiet';
  // 最初にドキュメントフラグメントに挿入します frag.appendChild(dot);
 }
 //dotsフラグメントをDOM構造に均一に挿入する dots.appendChild(frag)
 // 最初のドットが強調表示されます dots.children[0].className = "active";
 // スライディング関数 function Roll(distance) { // パラメータ distance: スクロールのターゲットポイント(画像の幅の倍数である必要があります)
  clearInterval(imgs.timer); // この関数を実行するたびに、前のタイマーをクリアする必要があります。
  //画像の移動方向を決定します var speed = imgs.offsetLeft < distance ? rate : (0 - rate);
  // 10 ミリ秒ごとに匿名関数を呼び出すタイマーを設定します。imgs.timer = setInterval(function() {
   //各呼び出しのスクロール位置(速度は speed px/10 ms)         
   imgs.style.left = imgs.offsetLeft + speed + "px";
   //ターゲット ポイントからの残りの px 値 var leave = distance - imgs.offsetLeft;
   /* ターゲットポイントに近づいたときに処理し、ターゲットの近くまでスクロールすると直接ターゲットに到達します。レート値が不適切に設定されている場合に画像を完全に表示できないことを回避します */
   もし (Math.abs(leave) <= Math.abs(speed)) {
    間隔をクリアします(imgs.timer);
    imgs.style.left = 距離 + "px";
   }
  }, 10);
 }
 /*最初の li をリストの最後に複製します*/
 imgs.appendChild(imgs.children[0].cloneNode(true));
 関数autoRun() {
  サブクラス
  ドットサブ++;
  if (imgSub > len) { // クローンされたアイテムをスクロールした後、imgs.style.left = 0; // 左を実際の最初のアイテムに変更します imgSub = 1; // 2 番目のアイテムから表示を開始します}
  // スクロール関数を呼び出します。パラメーターは下付き文字のスクロール距離です。Roll(-imgSub * width);
  // ドットインデックスが最後までスクロールした場合は、インデックスを 0 にリセットします
  if (dotSub > len - 1) { //最後のドットに到達したかどうかを判断 dotSub = 0;
  }
  // すべてのドットのデフォルトスタイルを変更するループ for (var i = 0; i < len; i++) {
   dots[i].className = "静かな";
  }
  // 現在スクロールされているドットにハイライト スタイルを追加します dotss[dotSub].className = "active";
 }
 // 自動スクロールを開始するためのタイマーを作成します。timer = setInterval(autoRun,2000);
 // 小さなドットを追加するループトリガーイベント for (var i = 0; i < len; i++) {
  ドット[i].インデックス = i;
  ドット[i].onmouseover = 関数() {
   (var j = 0; j < len; j++) の場合 {
    dots[j].className = "静かな";
   }
   this.className = "アクティブ";
   temp = ドットサブ;
   imgSub = dotSub = this.index;
   times = Math.abs(this.index - temp); // 前のドットからの距離 rate = rate * times; // 距離に応じて切り替え速度を変更します Roll(-this.index * width);
   レート = 15;
  }
 }
 // イベントを追加: マウスがラッパー上に移動すると、左と右のトグルボタンが表示されます wrapper.onmouseover = function() {
  タイマーの間隔をクリアします。
  btns.style.display = 'ブロック';
 }
 // イベントを追加: マウスがラッパーの外に出ると、左と右のトグルボタンが非表示になります wrapper.onmouseout = function() {
  タイマー = setInterval(autoRun,2000);
  btns.style.display = 'なし';
 }
 // 前のボタンをクリックしてイベントをトリガーします btns.children[0].onclick = function() {
  画像サブ--;
  ドットサブ--;
  if (imgSub < 0) { //最初の項目をスクロールした後、imgs.style.left = -len * width + "px"; //左を最初の複製された項目に変更します。imgSub = dotSub = len - 1;
  }
  ロール(-imgSub * 幅);
  (ドットサブ<0)の場合{
   ドットサブ = 長さ - 1;
  }
  (var i = 0; i < len; i++) の場合 {
   dots[i].className = "静かな";
  }
  dotss[dotSub].className = "アクティブ";
 }
 // 次のボタンをクリックしてイベントをトリガーします btns.children[1].onclick = autoRun;
</スクリプト>

写真:

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

以下もご興味があるかもしれません:
  • JS は複数のタブを切り替えるカルーセルを実装します
  • カルーセル効果を実現するネイティブJavaScript
  • jsを使用してシンプルなカルーセル効果を実現する
  • シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)
  • カルーセルの完全なコードを実装するためのjs
  • ネイティブ js でカルーセルを実装するためのサンプル コード
  • 携帯電話のスライドスイッチカルーセル画像の例をサポートする効果を実現するためのjs
  • JS カルーセル図の実装の簡単なコード
  • js で左右のボタンをクリックして画像を再生する
  • カルーセル例の JavaScript 実装

<<:  MySQL でのデータベース間クエリの例

>>:  MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

推薦する

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズするVue カスタム ディレクティブの構文は次のとおりです。 Vue.di...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

Dockerの基本的な手順

目次基本的な指示1. 現在のマシンのコンテナステータスを確認する2. イメージをダウンロードまたは取...

Vue が 4 レベルのナビゲーションと検証コードを実装する方法の例

効果: まず5つのVueインターフェースを作成する1.home.vueページ <テンプレート&...

SpringBoot を MySQL に接続してデータを取得し、バックエンド インターフェースに書き込む方法

目次1. 新しいプロジェクトを作成する2. 依存関係を追加する3. SpringコンテナにDrive...

レンダリング関数と JSX の詳細

目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...

MYSQLが中国語を認識できない問題の恒久的な解決策

ほとんどの場合、MySQL はインストールしたばかりのときは中国語をサポートしません。これはエンコー...

JavaScript クロージャの詳細

目次1. クロージャとは何ですか? 2. 閉鎖の役割序文: JavaScript部分ではクロージャが...

Fabric.js は DIY ポストカード機能を実装します

この記事では、DIYポストカード機能を実現するためのfabricjsの具体的なコードを参考までに共有...

jQueryはテーブルのシームレスなスクロールを実現します

この記事の例では、テーブルのシームレスなスクロールを実現するためのjQueryの具体的なコードを参考...

Linux システムのパフォーマンスを分析するための top コマンドの詳細な説明

Linux topコマンドの紹介top コマンドは、Linux でよく使用されるパフォーマンス分析ツ...

ネイティブ js でカスタム難易度のマインスイーパ ゲームを実装する

この記事の例では、マインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有しています...

HTML で Flash を読み込む方法 (2 つの実装方法)

最初の方法: CSSコード:コードをコピーコードは次のとおりです。 .b970-a{幅:970px;...

HTML テーブルタグチュートリアル (44): テーブルヘッダータグ

<br />ソース コード内で表の構造を明確に区別するために、HTML 言語では、表のヘ...