JavaScript が Jingdong のカルーセル効果を模倣

JavaScript が Jingdong のカルーセル効果を模倣

この記事では、JD.comのカルーセル効果の表示を実現するためのJavaScriptの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

JD.com を真似てカルーセルを作りましたが、もちろん公式サイトほど美しくはありません。

主な技術的ポイント:

  • 3秒ごとに画像を自動的に切り替えます。
  • マウスが画像内に移動すると、切り替えは自動的に一時停止され、マウスが画像外に移動すると、切り替えが続行されます。
  • 左矢印ボタンと右矢印ボタンをクリックして、手動で写真を切り替えます。
  • マウスを灰色の点に移動すると、対応する画像が表示され、強調表示されます。

HTMLコード:

<本文>
 <h1>スライドショー表示</h1>
 <div id="did">

 <!-- 画像 -->
 <div id="img-div" onmouseover="doStop()" onmouseout="doStart()">
  <img src="./1.jpg">
  <img src="./2.jpg">
  <img src="./3.jpg">
  <img src="./4.jpg">
  <img src="./5.jpg">
  <img src="./6.jpg">
  <img src="./7.jpg">
  <img src="./8.jpg">
 </div>

 <!-- 左ボタンと右ボタン -->
 <div id="btn-div">
  <div id="left-btn" onclick="doLeftClick()">
  <h3> < </h3>
  </div>
  <div id="right-btn" onclick="doRightClick()">
  <h3> > </h3>
  </div>
 </div>

 <!-- ドット -->
 <div id="cir-div">
  <div onmouseover="doMove(1)"></div>
  <div onmouseover="doMove(2)"></div>
  <div onmouseover="doMove(3)"></div>
  <div onmouseover="doMove(4)"></div>
  <div onmouseover="doMove(5)"></div>
  <div onmouseover="doMove(6)"></div>
  <div onmouseover="doMove(7)"></div>
  <div onmouseover="doMove(8)"></div>
 </div>
 </div>

</本文>

CSSコード:

<スタイル>
 * {
 マージン: 0px;
 パディング: 0px;
 }

 体 {
 背景色: rgb(255, 249, 249);
 }

 h1 {
 テキスト配置: 中央;
 パディング上部: 40px;
 色: rgba(250, 54, 129, 0.562);
 }

 #した {
 位置: 相対的;
 幅: 590ピクセル;
 高さ: 470ピクセル;
 マージン: 30px 自動;
 }

 #画像div {
 位置: 絶対;
 }

 #画像div 画像 {
 幅: 590ピクセル;
 表示: なし;
 カーソル: ポインタ;
 Zインデックス: -1;
 }

 /* これら 2 つの段落は省略できます */
 /* 最初の画像を表示する */
 #img-div img:最初の子 {
 表示: ブロック;
 }

 /* 最初のドットを点灯します */
 #cir-div div:最初の子 {
 背景: #fff;
 }

 #サークルdiv {
 位置: 絶対;
 /* 画像に対する相対位置 */
 左: 40px;
 下: 25px;
 }

 /* 下のドット*/
 #cir-div div {
 幅: 8px;
 高さ: 8px;
 フロート: 左;
 /* 50% は切り捨て*/
 境界線の半径: 50%;
 右マージン: 6px;
 境界線: 1px実線 rgba(0, 0, 0, .05);
 背景: rgba(255, 255, 255, .4);
 }

 #左ボタン{
 位置: 絶対;
 /* 画像に対する相対位置 */
 上位: 45%

 /*左半円ボタン*/
 幅: 27px;
 高さ: 38px;
 背景: rgba(119, 119, 119, 0.5);
 境界線の半径: 0 20px 20px 0;
 /* アニメーション効果。変更前に配置され、マウスがその上に移動すると、色がゆっくりと変化します*/
 トランジション: 背景色 0.3 秒のイーズアウト;
 }

 #右ボタン{
 位置: 絶対;
 /* 画像に対する相対位置 */
 上位: 45%
 右: 0px;

 /* 右半円ボタン */
 幅: 27px;
 高さ: 38px;
 背景色: rgba(119, 119, 119, 0.5);
 境界線の半径: 20px 0 0 20px;
 /* アニメーション効果。変更前に配置され、マウスがその上に移動すると、色がゆっくりと変化します*/
 トランジション: 背景色 0.3 秒のイーズアウト;
 }

 #左ボタン:ホバー{
 背景色: rgba(32, 32, 32, 0.5);
 カーソル: ポインタ;
 }

 #右ボタン:ホバー{
 背景色: rgba(32, 32, 32, 0.5);
 カーソル: ポインタ;
 }

 #左ボタン h3 {
 色: #fff;
 上マージン: 4px;
 左マージン: 2px;
 }

 #右ボタン h3 {
 色: #fff;
 上マージン: 4px;
 左マージン: 8px;
 }
</スタイル>

JavaScript コード:

<スクリプト>
 //最初の画像を表示します。var count = 1;
 //時間 var time = null;
 //画像リスト var imglist = document.getElementById("img-div").getElementsByTagName("img");
 //ドットリスト var cirlist = document.getElementById("cir-div").getElementsByTagName("div");

 //対応する画像を表示し、対応するドットを点灯します。 function show(x) {
 (var i = 0; i < imglist.length; i++) の場合 {
  (x == i + 1)の場合{
  //画像を表示します imglist[i].style.display = "block";
  //ドットが点灯します upcirlist[i].style.backgroundColor = "#fff";
  } それ以外 {
  imglist[i].style.display = "なし";
  cirlist[i].style.background = "rgba(255, 255, 255, .4)";
  }
 }
 }

 // 時間指定カルーセル画像(3 秒ごとに画像を切り替える)
 関数doStart() {
 時間 == null の場合 {
  時間 = setInterval(関数() {
  カウント++;
  表示(カウント);
  (カウント>=8)の場合
   カウント = 0;
  }
  }, 3000);
 }
 }

 //カルーセルを停止する関数doStop() {
 (時間!= null)の場合{
  クリア間隔(時間);
  時間 = null;
 }
 }

 //マウスがドットに移動すると、それに応じて画像が切り替わり、移動前の次のドットではなく次のドットが点灯します。 function doMove(x) {
 表示(x);
 //count に位置を割り当てると、画像は次の画像から切り替わります。count = x;
 //マウスが最後のドットに移動したら、count を 0 に変更する必要があります。そうしないと、doStart() の count++ が実行され、count が 9 になり、範囲外になります。if (count == 8) {
  カウント = 0;
 }
 }

 /*
 show(x) の i、count、x の関係について:
  私 = [0,7];
  x = [1,8];
  カウント = [1,8];
 */
 //左ボタンをクリックして画像を左に切り替える function doLeftClick() {
 (var i = 0; i < imglist.length; i++) の場合 {
  //現在表示されている画像を判断する if (imglist[i].style.display == "block") {
  (i == 0) の場合 {
   表示(8);
   // この文を忘れると、break は直接終了します。左ボタンが右端のドットに押されると、ドット 1 は無視され、ドット 2 に直接ジャンプします。
   カウント = 0;
   //スイッチが 3 秒であることを確認します doStop();
   実行を開始します。
   壊す;
  }
  表示(i);
  カウント = i;
  //スイッチが 3 秒であることを確認します doStop();
  実行を開始します。
  壊す;
  }
 }
 }

 //右ボタンをクリックして画像を右に切り替えます function doRightClick() {
 (var i = 0; i < imglist.length; i++) の場合 {
  //現在表示されている画像を判断する if (imglist[i].style.display == "block") {
  もし (i == 7) {
   表示(1);
   カウント = 1;
   停止します。
   実行を開始します。
   壊す;
  }
  表示(i + 2);
  カウント = i + 2;
  //画像がない状況への切り替えは行われません if (count >= 8) {
   カウント = 0;
  }
  停止します。
  実行を開始します。
  壊す;
  }
 }
 }

 実行を開始します。
 // デフォルトのオープニング ページには最初の画像が表示されます // (追加されていない場合は最初の円が点灯します。これは、ページを開いたばかりのときに左ボタンが反応しないことを意味します)
 1 を移動します。
</スクリプト>

遭遇した困難:

カルーセルは非常にシンプルに見えますが、実装にはまだ多くの問題があります。しかし、私が見つけた問題はすべて解決しました。

  • 画像上にドットやボタンを配置
  • 画像は自動的に切り替わりますが、対応するドットは点灯しません
  • マウスをドットに移動すると画像が切り替わりますが、次に自動的に点灯するドットは、移動したドットの 1 つ前のドットになります。
  • ページを開いたばかりのときに最初の円が点灯し、左ボタンは反応しません
  • 左ボタンを右端のドットまで押すと、ドット 1 は無視され、ボタンはドット 2 に直接ジャンプします。
  • 最後のドットで右ボタンをクリックすると、画像が写真のない状態に切り替わります。
  • 左ボタンをクリックした場合の切り替え時間は約 2 秒、右ボタンをクリックした場合の切り替え時間は約 5 秒と、標準の 3 秒に達していません。

でも解決しました!

最も大きな感情は、バグを解決したばかりで誇らしい気持ちになっているときに、別のバグが出現することです。

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

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

<<:  InnoDB のアーキテクチャと機能の詳細な説明 (InnoDB ストレージ エンジンの読書メモの要約)

>>:  Apache Web サーバーを使用して 2 つ以上のサイトを構成する方法

推薦する

デジタルテーブル特殊効果を実現するネイティブJS

この記事では、ネイティブ JS で実装されたデジタル時計エフェクトを紹介します。エフェクトは次のとお...

アコーディオンセカンダリメニューを実装するためのjQueryプラグイン

この記事では、jQueryプラグインを使用してアコーディオンセカンダリメニューを作成します。具体的な...

MySQL無料インストール版を解凍した後にパスワードが見つからない問題を解決する方法

1. mysql-8.0.21-winx64を解凍する2. 環境変数を設定し、アドレスをbinフォル...

MySQL の挿入およびバッチ ステートメントのいくつかの例の詳細な説明

目次序文1.無視を挿入2. 重複キーの更新時3. を置き換える4.存在しない場合は挿入する5. デー...

Net Core実装プロセス分析のDoc​​kerインストールと展開

1. Dockerのインストールと設定 #CentOS をインストールし、Docker パッケージを...

Linuxはシェルスクリプトを使用して履歴ログファイルを定期的に削除します

1. ツールディレクトリのファイル構造 [root@www tools]# ツリーツール/ ツール/...

DockerプライベートライブラリHarborのアーキテクチャとコンポーネントの説明

この記事では、Harbor アーキテクチャの構成と、実行時に各コンポーネントを使用する方法について説...

Hadoop 2.x と 3.x の 22 ポイントの比較、Hadoop 3.x の 2.x に対する改善点

質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...

MySQLインデックスの詳細

1. インデックスの原則インデックスは、列内の特定の値を持つ行をすばやく見つけるために使用されます。...

jsはユーザーのページ操作を記憶するためにクッキーを使用します

序文開発プロセスでは、ブラウザレベルでユーザーが実行した操作を記憶するなど、同様の要件に遭遇すること...

MySQLカーソルの詳細な紹介

目次1. カーソルとは何ですか? 2. カーソルの使い方1. カーソルを宣言する2.カーソルを開く3...

HTML の基礎: HTML コンテンツの詳細

まずは本体から始めましょう:ウェブページを閲覧するとき、最初に目に留まるのは通常、ページの背景です。...

Linux でファイルの種類を理解して識別する方法

序文ご存知のとおり、Linux ではハードディスクやグラフィック カードなどすべてがファイルです。 ...

Vue3 を使用してポップアップ コンポーネントをカプセル化するのは簡単ですか?

目次最初に要約: 🌲🌲 序文: 🍬🍬公開🍬🍬 🍬🍬グローバル🍬🍬 🍬🍬ボールボックス🍬🍬 🎉🎉🎉結論...