JavaScript ベースのシンプルなカルーセルの実装

JavaScript ベースのシンプルなカルーセルの実装

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

js カルーセル実装のアイデア

1. まず要素ボックスの左と右のボタンを取得します
2. マウスが通過したときに左ボタンと右ボタンを表示/非表示にする
3. 小さな円を動的に生成し、カスタム属性を追加する
4. 小さな円のクリックイベントに現在のクラス名を追加します。
5. アニメーションイベント animate equals - インデックス番号 * focusWidth を追加します。
6. 最初の画像を最後まで複製する
7. 右/左ボタンクリックイベントを追加する
8. 右ボタンクリックイベントを手動で呼び出すタイマーを設定する

HTMLコード部分

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
 <メタ文字セット="UTF-8">
 <meta http-equiv="X-UA-compatible" content="IE=edge">
 <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
 <title>ドキュメント</title>
 <link rel="スタイルシート" href="css/index.css" >
 <script src="js/index.js"></script>
</head>

<本文>
 <div class="focus">
 <a href="javascript:;" class="arrow_r">></a>
 <a href="javascript:;" class="arrow_l">
  <</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>
</本文>

</html>

CSSスタイル部分

* {
 パディング: 0;
 マージン: 0;
 }
 
 li {
 リストスタイル: なし;
 }
 
 画像 {
 境界線: 0;
 垂直方向の位置合わせ: 上;
 }
 
 {
 テキスト装飾: なし;
 }
 
 。集中 {
 位置: 相対的;
 幅: 721ピクセル;
 高さ: 455px;
 マージン: 100px 自動;
 オーバーフロー: 非表示;
 }
 
 .focus ul {
 位置: 絶対;
 上: 0;
 左: 0;
 幅: 600%;
 }
 
 .focus ul li {
 フロート: 左;
 }
 
 .arrow_r,
 .arrow_l {
 表示: なし;
 位置: 絶対;
 上位: 50%;
 変換: translateY(-50%);
 幅: 40px;
 高さ: 40px;
 行の高さ: 40px;
 テキスト配置: 中央;
 フォントサイズ: 24px;
 背景: rgba(0, 0, 0, .2);
 色: #fff;
 zインデックス: 1;
 }
 
 .arrow_r {
 右: 0;
 }
 
 。丸 {
 位置: 絶対;
 下: 10px;
 左: 50px;
 }
 
 .circle li {
 フロート: 左;
 幅: 8px;
 高さ: 8px;
 境界線: 2px実線rgba(255, 255, 255, .5);
 境界線の半径: 50%;
 マージン: 0 3px;
 カーソル: ポインタ;
 }
 
 。現在 {
 背景色: #fff;
 }

JavaScript部分

window.addEventListener('load', 関数() {
 //要素を取得します var focus = document.querySelector('.focus');
 var arrow_r = document.querySelector('.arrow_r');
 var arrow_l = document.querySelector('.arrow_l');
 focusWidth を focus.offsetWidth に設定します。
 // マウスがフォーカスボックスを通過すると、左ボタンと右ボタンが表示/非表示になり、カルーセルが一時停止します focus.addEventListener('mouseenter', function() {
 arrow_r.style.display = 'ブロック';
 arrow_l.style.display = 'ブロック';
 タイマーの間隔をクリアします。
 タイマー = null;
 });
 focus.addEventListener('mouseleave', 関数() {
 arrow_r.style.display = 'なし';
 arrow_l.style.display = 'なし';
 タイマー = setInterval(関数() {
  //クリックイベントを呼び出す arrow_r.click();
 }, 2000);
 });
 // 小さな円を動的に生成します var ul = focus.querySelector('ul');
 var ol = focus.querySelector('.circle');
 (var i = 0; i < ul.children.length; i++) の場合 {
 var li = document.createElement('li');
 li.setAttribute('インデックス', i);
 ol.appendChild(li);
 // 小さな円のクリックイベント li.addEventListener('click', function() {
  (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
  }
  var index = this.getAttribute('index');
  num = インデックス;
  円 = インデックス;
  this.className = '現在の';
  アニメーション化(ul, -index * focusWidth);
 })
 }
 ol.children[0].className = '現在の';
 //最初の画像を複製し、最後の画像に配置します。var fis = ul.children[0].cloneNode(true);
 ul.appendChild(fis);
 // 右クリックイベント var num = 0;
 var 円 = 0;
 arrow_r.addEventListener('クリック', 関数() {
 num === ul.children.length - 1の場合{
  ul.style.left = 0;
  数値 = 0;
 }
 数値++;
 アニメーション化(ul, -num * focusWidth);
 サークル++;
 (円 === ul.children.length - 1)の場合{
  円 = 0;
 }
 (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
 }
 ol.children[circle].className = '現在の';
 });
 //左ボタンクリックイベント arrow_l.addEventListener('click', function() {
 数値 == 0 の場合
  num = ul.children.length - 1;
  ul.style.left = -num * focusWidth + 'px';

 }
 数値--;
 アニメーション化(ul, -num * focusWidth);
 丸 - ;
 円 = 円 < 0 ? ol.children.length - 1 : 円;
 //関数circleChange()を呼び出します。
 });
 //残っている小さな円の現在のクラス名をクリアします function circleChange() {
 (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
 }
 //現在の小さな円の現在のクラス名をそのままにします ol.children[circle].className = 'current';
 }
 //アニメーション関数 function animate(obj, target, callback) {
 タイマー間隔をクリアします。
 obj.timer = setInterval(関数() {
  var ステップ = (ターゲット - obj.offsetLeft) / 10;
  ステップ = ステップ > 0 ? Math.ceil(step) : Math.floor(step);
  obj.offsetLeft == ターゲットの場合 {
  タイマー間隔をクリアします。
  コールバック && コールバック();
  }
  obj.style.left = obj.offsetLeft + ステップ + 'px';

 }, 15);
 }
 //カルーセルを自動的に再生する var timer = setInterval(function() {
 //クリックイベントを呼び出す arrow_r.click();
 }, 2000);
});

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

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

<<:  Jenkins を通じて None のイメージを定期的にクリーンアップする方法

>>:  Alibaba Cloud に MySQL データベースをインストールするときに発生する 2002 エラーを解決する方法

推薦する

幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...

JS 配列の重複を排除する 9 つの高度な方法 (実証済みで効果的)

序文一般的な方法はここには記載されていませんが、等しいかどうかを判断するための二重ループや、比較のた...

mysql5.7.18のインストールと初期パスワードの変更方法

CentosでのMySQLのインストールについては、以前の記事を参照してください。 Centos7....

CentOS サーバーのセキュリティ構成戦略

最近、ブルートフォース攻撃によるサーバのクラッキングが頻発しています。侵入行為を大まかに分析し、よく...

Youdaの新しいプチビューの実装

目次序文導入ライブ使いやすいルートスコープマウント要素の指定ライフサイクルコンポーネントグローバル状...

Windows Server 2016 で Flash を有効にする方法

最近、VMware Horizo​​n を導入してテストしましたが、そのコンソールにはデフォルトで ...

CentOS で MySQL を完全にアンインストールする方法

この記事では、CentOSでのMySQLの完全アンインストールについて記録しています。具体的な内容は...

MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

目次1. 遭遇した問題2. 問題を分析する3. 本当の問題4. 解決策5. ソリューション効果1. ...

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

Mysql テーブルコメントフィールド取得操作

余計なことは言わないで、コードだけ見てみましょう〜 -- テーブル内のフィールドコメントを表示および...

DockerコンテナがJupyterにアクセスできない問題の解決策

このプロジェクトでは、環境を構築するために Docker コンテナを使用します。Dockerfile...

nginx + php の「入力ファイルが指定されていません」の解決策

本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...

フロントエンドコンポーネント化の基礎知識を詳しく解説

目次コンポーネントの基本概念オブジェクトとコンポーネントの違い成分属性属性とプロパティ属性:財産:ク...

Centos7のシステム言語を簡体字中国語に変更する方法

例示するシステムを自分でインストールする場合は、通常、システム言語をカスタマイズできます。ただし、ク...

LinuxとGNUシステムの関係の詳細な説明

目次私たちが毎日実行している Linux システムとは何でしょうか? LinuxカーネルとGNUシス...