JS でカルーセル画像を実装するいくつかの方法

JS でカルーセル画像を実装するいくつかの方法

カルーセル

主なアイデアは次のとおりです。

大きなコンテナには、コンテナの幅の整数倍の非常に長いテーブルがあります。

次に、リスト スタイルの left 属性を変更して、左右のスライドを実現します。

この記事では5 枚の画像のスライドを制御することを目的としていますが、HTML では7 枚の画像が使用されています。最初と最後の画像が重複しています。理由は後述します。

ここに画像の説明を挿入

コンテナに overflow:hidden 属性を設定することで、コンテナのビューポートのサイズの画像が 1 つだけ表示されるようになります。

<本文>
 <div id="コンテナ"> /*コンテナ*/
  <div id="wrap" style="left: -400px;"> /*画像リスト*/
   <div class="item item5">l5</div>
   <div class="item item1">1</div>
   <div class="item item2">2</div>
   <div class="item item3">3</div>
   <div class="item item4">4</div>
   <div class="item item5">5</div>
   <div class="item item1">r1</div>
  </div>
 </div>
 <div id="key"> /*ボタンを設定*/   
  <div id="list"> /*小さな円をクリックすると固定画像に切り替わります*/
   <div class="btn1 btnNum">1</div>
   <div class="btn2 btnNum">2</div>
   <div class="btn3 btnNum">3</div>
   <div class="btn4 btnNum">4</div>
   <div class="btn5 btnNum">5</div>
  </div>
  <div id="btn"> /*左右を切り替えるボタン*/
   <button class="left">←</button>
   <button class="right">→</button>
  </div>
 </div>
</本文>

CS: ...

ラップ リストの flex プロパティを設定すると、画像を 1 行に表示できます。ニーズに応じて他のレイアウトも作成できます。

id="wrap" のノードではインライン スタイル left が設定されていることに注意してください。なぜなら、画像を切り替えるときに left 属性を使用するのですが、 left 属性を設定しないと、DOM でスタイルを設定するときに left 属性を見つけることができないからです。

<スタイル>
  #容器 {
   幅: 400ピクセル;
   高さ: 300px;
   境界線: 8px rgb(8, 8, 8) 実線;
   マージン: 0 自動;
   上マージン: 150px;
   オーバーフロー: 非表示;
   位置: 相対的;
  }
  #包む {
   幅: 2800ピクセル;
   高さ: 300px;
   ディスプレイ: フレックス;
   位置: 相対的;
  }
  。アイテム {
   フレックス: 1;
   幅: 400ピクセル;
   高さ: 300px;
  }
  .item1 {
   背景色: ローズブラウン;
  }
  .item2 {
   背景色: rgb(12, 226, 37);
  }
  .item3 {
   背景色: rgb(212, 221, 29);
  }
  .item4 {
   背景色: rgb(61, 27, 182);
  }
  .item5 {
   背景色: rgb(221, 23, 145);
  }
  #鍵 {
   幅: 400ピクセル;
   高さ: 300px;
   マージン: 0 自動;
  }
  #リスト{
   幅: 400ピクセル;
   高さ: 40px;
   ディスプレイ: フレックス;
   コンテンツの中央揃え: 中央;
  }
  #リストdiv{
   上マージン: 10px;
   左マージン: 10px;
   幅: 20px;
   高さ: 20px;
   背景色: rgb(13, 162, 221);
   テキスト配置: 中央;
   境界線の半径: 45%;
   不透明度: 0.6;
  }
  #リスト div:hover {
   カーソル: ポインタ;
   不透明度: 1;
  }
  #ボタン{
   幅: 400ピクセル;
   テキスト配置: 中央;
  }
 </スタイル>

これが完全なスタイルです

ここに画像の説明を挿入

各色は絵を表し、順番に番号が付けられています。開始位置は2枚目の写真です。

最初と最後の画像の両端に余分な重複画像が配置されている理由は、スライド効果を作成するときに、最後の画像(最後から2番目の画像、ピンクと紫)が最初の画像(実際にはこの画像では2番目の画像、薄茶色)に向かって右にスムーズにスライドし続けることができるようにするためです。最初の画像(この画像では2番目、薄茶色)を左にスライドすると、最後の画像(実際には最後から2番目の画像)までスムーズにスライドできます。以下を読み続けてください。

1. 複数のカルーセルモード

カルーセルを配置し、ラップ リストの left 属性を変更してカルーセルを移動する必要があります。

まずデータを初期化する

var wrap = document.getElementById('wrap');
var nowleft = -400; //現在のリストの left の値を格納するために使用されますvar currIndex = 1; //現在の画像番号を格納するために使用されます//複数のボタンを検索var btnNum = document.getElementsByClassName('btnNum'); //小さな円var right = document.getElementsByClassName('right')[0]; //右にスライドするボタンvar left = document.getElementsByClassName('left')[0]; //左にスライドするボタン

1.1 自動カルーセル効果のタイミング

自動左スライドの効果についてのみ話す

自動回転なので、連続回転を維持するためには setInterval() タイマーが不可欠です。

関数 next() {
  setInterval(function() { // 画像を 2 秒ごとに切り替えます wrap.style.transition = 'left 1s' // トランジションのスライド効果を設定します nowleft = parseInt(wrap.style.left) - 400; // 一度切り替えた後、nowleft は画像 1 枚分の幅だけ縮小されます (つまり、左にスライドします) wrap.style.left = nowleft + 'px'; // 次に、nowleft を wrap の left 属性に割り当てますif(parseInt(wrap.style.left) == -2400) { // 最後の 1 つを判断した後、こっそりと最初に戻ります setTimeout(() => {
       wrap.style.transition = 'none' // こっそりと元に戻るので、トランジション効果をキャンセルする必要があります nowleft = -400;
       wrap.style.left = nowleft + 'px'
      },1200) // タイマー時間が遷移時間より大きく、各回転の時間より短いことを確認します}
  },2000)
}

/ wrap.style.left は px を含む文字列を返すので、parseInt を使用して前の値を取得できます/

1.2 右スライドボタンを押す

right.addEventListener('click',function() {
  if(nowleft >= -2000){ //最後の画像かどうかを判断し、そうでない場合はスライドを開始します nowleft -= 400;
   wrap.style.transition = '左1秒';
   wrap.style.left = nowleft + 'px';
  }
  if(nowleft == -2400) { //最後の画像に到達したら、秘密裏に最初の画像に戻ります setTimeout(() => {
    wrap.style.transition = 'なし';
    今左 = -400;
    wrap.style.left = nowleft + 'px';
   },1020)
  }
})

1.3 小さな円の切り替え画像

for(i = 0; i < btnNum.length; i++) {
  btnNum[0].style.opacity = 1;
  btnNum[i].addEventListener('click',function() {
   wrap.style.transition = '左1秒';
   for(j = 0; j < btnNum.length; j++) {
    btnNum[j].style.opacity = '0.6';
   }
   btnNum[i].style.opacity = 1;
   nowleft = nowleft - (i+1 - currIndex)*400;
   currIndex = i + 1;
   wrap.style.left = nowleft + 'px';
})

実は、この記事の最後の画像から最初の画像にこっそり切り替える操作には欠陥があり、シーケンス番号 5 の画像をシーケンス番号 r1 の画像にスライドさせるのに 1 秒かかりますが、wrap.style.left は直接変化し、遷移期間中の変位に応じて変化しません。したがって、シーケンス番号 5 を r1 に完全にスライドさせてから、シーケンス番号 1 に秘密裏に切り替える時間を制御することは、やや困難です。

たとえば、シーケンス番号 1 から 3 回連続してクリックすると、シーケンス番号 4 に切り替えることができます。もちろん、シーケンス番号 5 から 3 回連続でクリックすることはできません。R1 がシーケンス番号 1 に切り替わると、クリック効果に反応がないため、ここでのインタラクションの違いは違和感を感じやすくなります。

この厄介なバグを改善したい場合は、手ぶれ補正機能を使用して改善することができます。

これで、カルーセル画像を JS でネイティブに実装するいくつかの方法についての記事は終了です。より関連性の高い JS ネイティブ カルーセル コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript で円形カルーセルを実装する
  • カルーセル効果を書くためのjs
  • JavaScript ベースのシンプルなカルーセルの実装
  • JavaScript が Jingdong のカルーセル効果を模倣
  • JavaScript Domはカルーセルの原理と例を実装します
  • シームレスなカルーセル効果を実現するネイティブ js
  • モバイルカルーセルスライドスイッチを実現する js
  • スクロールホイールカルーセル画像を実現するための JavaScript
  • ネイティブ Js で実装されたシンプルなシームレス スクロール カルーセルのサンプル コード

<<:  新しいカーネルをLinuxシステムに移植する手順

>>:  Python3.6-MySql 挿入ファイルパス、バックスラッシュをなくす解決策

推薦する

MySQL 8.0 の新機能 - チェック制約の紹介

目次序文チェック制約作成、削除、表示制限要約する序文MySQL 8.0 では、チェック制約という非常...

MySQLデータのセキュリティを確保するための提案

データは企業の中核資産であり、企業にとって最も重要なタスクの 1 つです。注意しないと、データが意図...

dockerにros2をインストールするための詳細な手順

目次メイントピック1. UbuntuにDockerをインストールする2. DockerにROS2-F...

Linux Centos でスクリプトを使用して Docker をインストールする方法

Dockerの主な機能は何ですか?現在、Docker には少なくとも次のアプリケーション シナリオが...

Ubuntu Server でのワイヤレス ネットワーク カードの詳細な設定

1. ワイヤレス ネットワーク カードを挿入し、コマンドiwconfigを使用してワイヤレス ネット...

CSS コンテナ背景 10 色グラデーション デモ (linear-gradient())

文法 背景: linear-gradient(direction,color-stop1,color...

MySQL データベース インデックスが B+ ツリーの使用を選択するのはなぜですか?

MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...

Win10でIIS10を構成し、ASPプログラムのデバッグをサポートする手順

マイクロソフトIIS (Internet Information Server) は、Microso...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...

mysql-joinsの具体的な使用方法

目次結合構文: 1. InnerJOIN: (内部結合) 2. LeftJOIN: (左結合) 3....

Win10にnginxをインストールする方法

会社から、負荷を実装するためにnginxをベースにFordプロジェクトのWebServiceサーバー...

Ubuntu 16.04 にソースコードから Mininet をインストールする

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

Centos7.2 で mysql5.7 データベースをインストールするための詳細な手順

サーバー上の mysql はバージョン 8.0.12 でインストールされており、ローカルのものはバー...

react+antd.3x は IP 入力ボックスを実装します

この記事では、IP入力ボックスを実装するための react+antd.3x の具体的なコードを参考ま...

花火効果を実現するJavaScript(オブジェクト指向)

この記事では、花火効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具...