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 挿入ファイルパス、バックスラッシュをなくす解決策

推薦する

スタックメニューを実装するためのjQueryプラグイン

jQueryプラグインの毎日の積み重ねメニュー、参考までに、具体的な内容は次のとおりです。スタックメ...

H5ウェイクアップアプリの実装方法と注意点のまとめ

目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...

WeChatアプレットキャンバスが署名機能を実装

WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...

Docker に influxdb をインストールするための詳細なチュートリアル (パフォーマンス テスト)

1. 前提条件1. プロジェクトが展開されました2. Dockerはすでにインストールされている2...

React HTML で react を使用する 2 つの方法

基本的な使い方 <!DOCTYPE html> <html lang="...

TCPソケットSYNキューとAcceptキューの差異分析

まず、「LISTENING」状態の TCP ソケットには 2 つの独立したキューがあることを理解する...

航空機戦争ゲームを実装するためのネイティブJS

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...

よく忘れられがちな CSS のヒント 26 選

これは、よく使われるけれども忘れられがちな CSS 実装方法のコレクションです。抜けや追加があれば、...

スクロール時に選択領域のフォント色を暗くするために CSS を使用するサンプルコード

日付ピッカーをカプセル化する場合、選択時にフォントの色を暗くする必要があります。実装後の効果を見てみ...

Alibaba Cloud CentOS7 サーバーの nginx 構成と FAQ の分析

序文:この記事は、jackyzm のブログ https://www.cnblogs.com/jack...

Windows 10にOdoo12開発環境をインストールする方法

序文多くの友人は Mac コンピューターを持っていないと言っていますが、Windows 開発は実際に...

WeChatミニプログラムにナビゲーション機能を実装する方法

1. レンダリング2. 操作手順1. テンセントマップキーを申請する - 住所2. ミニプログラムの...

CSS3 カウントダウン効果

成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...

HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法

1. HTMLフォントカラー設定HTML では、フォント タグを使用してフォント コンテンツの色を設...

MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

開発の背景:最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいま...