目次
タイマーで 1500 ミリ秒ごとに goNext メソッドを呼び出して、画像を自動的に切り替えます
実装原理: imgBox の左の値に基づいて、どの小さな円が選択されるかを計算できます。絶対値は、小さな円のインデックス値です。これは、理解に役立つ図です (言葉は少し見苦しいので、無視してください、ふふ...)
これまでのカルーセル チャートの機能を実装しましたが、強迫性障害の私としては、自動切り替え時に左右の矢印が表示されて見栄えが悪いことがわかったので、微調整してみます。
ホームページ ウェブフロントエンド jsチュートリアル ネイティブjsを実装してカルーセルチャートを実装する

ネイティブjsを実装してカルーセルチャートを実装する

Jan 20, 2021 pm 05:45 PM
javascript カルーセル

ネイティブjsを実装してカルーセルチャートを実装する

無料学習の推奨事項: JavaScript ビデオ チュートリアル

# #ネイティブ JS を使用してカルーセル画像を実装する

今日は、ネイティブ JS を使用してカルーセル画像を実装するケースを共有し、プロセスのより詳細な説明を行います。友達は閲覧して批判することを歓迎します。静的レンダリングは次のとおりです。


ネイティブjsを実装してカルーセルチャートを実装する

核となるアイデア

いくつかの画像を連続して並べて、オフセットを計算し、タイマーを使用してスケジュールされたローテーションを実装します。

手順:

1. まず基本的な HTML 構造を構築します

<!-- 结构部分 --><!-- 结构说明:外层一个container盒子,用于放图片盒子(imgBox)、左箭头、右箭头、底部小圆圈, 
        图片盒子中放的是轮播的图片 -->
    <p class="container">
      <!-- 注意:此处强调一下,图片盒子imgBox的left属性必须写成行内样式,否则js中拿不到left的值 -->
        <p class="imgBox" style="left: -500px;"> 
            <img src="/static/imghw/default1.png"  data-src="./images/lunbo1.jpg"  class="lazy"   alt="轮播图1">
            <img src="/static/imghw/default1.png"  data-src="./images/lunbo2.jpg"  class="lazy"   alt="轮播图2">
            <img src="/static/imghw/default1.png"  data-src="./images/lunbo3.jpg"  class="lazy"   alt="轮播图3">
            <img src="/static/imghw/default1.png"  data-src="./images/lunbo4.jpg"  class="lazy"   alt="轮播图4">
            <img src="/static/imghw/default1.png"  data-src="./images/lunbo5.jpg"  class="lazy"   alt="轮播图5">
        </p>

        <a href="javascript:;" class="leftArrow"  style="display: none;">
            <img src="/static/imghw/default1.png"  data-src="./images/leftArrow.png"  class="lazy"   alt="左箭头">
        </a>
        <a href="javascript:;" class="rightArrow"  style="display: none;">
            <img src="/static/imghw/default1.png"  data-src="./images/rightArrow.png"  class="lazy"   alt="右箭头">
        </a>

        <ul class="circleFather">
            <li class="select"></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </p>
ログイン後にコピー

2. スタイル パーツ

絶対配置を使用して、左右の矢印と下部の小さな円を適切な位置に配置します。外側のコンテナ ボックスの幅はピクチャの幅と等しく、ピクチャ ボックスの幅はすべてのピクチャの幅の合計であり、すべてのピクチャは水平配置を実現するためにフローティングのままになります。

☆☆☆注: ここでは、イメージ ボックス imgBox の left 属性はインライン スタイルで記述する必要があることを強調します。そうしないと、js## で left の値を取得できません。 #

 <style>
        /* 内联样式表 */
        
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
            list-style: none;
        }
        /* 外层容器样式 */
        
        .container {
            height: 330px;
            width: 500px;  //外层容器盒子的宽度等于一张图片的宽度
            margin: 100px auto;
            position: relative;
            overflow: hidden;  //超出隐藏
        } 
        /* 左右箭头样式 */
        
        .container .leftArrow,
        .container .rightArrow {
            position: absolute;
            top: 50%;
            transform: translate(0, -50%);
            z-index: 1;
        }
        
        .container .leftArrow {
            left: 5px;
        }
        
        .container .rightArrow {
            right: 5px;
        }
        /* 图片盒子样式 */
        
        .imgBox {
            position: absolute;
            transition: all 0.5s;
            height: 333px;
            width: 3500px;  //图片盒子的宽度为所有图片宽度之和
        }
        
        .imgBox img {
            height: 330px;
            width: 500px;
            float: left;  //所有图片左浮动,实现水平排列
        }
        /* 底部小圆圈样式 */
        
        .circleFather {
            position: absolute;
            bottom: 10px;
            left: 50%;
            transform: translate(-50%, 0);
        }
        
        .circleFather li {
            float: left;
            height: 10px;
            width: 10px;
            margin: 0 5px;
            border: 2px solid #e7641c;
            border-radius: 50%;
        }
        
        .select {
            background-color: #e7641c;
        }
    </style>
ログイン後にコピー

3. jsロジック部分

3.1 まずは左右の矢印をクリックして左右にスライドする機能を実装します

var container = document.querySelector(&#39;.container&#39;) //获取外层容器盒子
        var imgBox = document.querySelector(&#39;.imgBox&#39;) //获取图片盒子
        var leftArrow = document.querySelector(&#39;.leftArrow&#39;) //获取左箭头
        var rightArrow = document.querySelector(&#39;.rightArrow&#39;) //获取右箭头


        //给左箭头绑定点击事件
        leftArrow.onclick = function() {
            goLast()
        }

        //右箭头点击事件
        rightArrow.onclick = function() {
            goNext()
        }

        // 显示上一张图片
        // 1.点一次左箭头,就让left值-500,点一次右箭头,就让left值+500
        // 2.但是有两种特殊情况,(1)当前展示图片1时,点击左箭头则需展示图片5,(2)当前展示图片5时,点击右箭头则需展示图片1
        function goLast() {
            let newBoxLeft            if (imgBox.style.left === &#39;0px&#39;) {
                newBoxLeft = -2000
            } else {
                // imgBox.style.left是一个字符串,所以要转化为数字才能进行计算,而设定left时就要加上px成为一个字符串
                newBoxLeft = parseInt(imgBox.style.left) + 500;
            }
            imgBox.style.left = newBoxLeft + "px"
        }

        // 显示下一张图片
        function goNext() {
            let newBoxLeft            if (imgBox.style.left === &#39;-2000px&#39;) {
                newBoxLeft = 0
            } else {
                newBoxLeft = parseInt(imgBox.style.left) - 500;
            }
            imgBox.style.left = newBoxLeft + "px"
        }
ログイン後にコピー
レンダリングは次のとおりです:


 3.2 自動カルーセル関数を実装します

タイマーで 1500 ミリ秒ごとに goNext メソッドを呼び出して、画像を自動的に切り替えます

// 使用setInterval()定时器实现自动切换功能
        var timer        function autoChange() {
            timer = setInterval(goNext, 1500)
        }
        autoChange()
ログイン後にコピー

3.3 画像上にマウスを置くことを実装します。オンにすると、自動切り替えを停止し、現在の画像に留まり、移動するときに自動的に切り替えを続けます。

 // 监听鼠标移入事件和移出事件,实现鼠标悬停在图片上时,停止自动切换,停留在当前图片,
 // 鼠标移出时继续自动切换
        container.addEventListener(&#39;mouseenter&#39;, function() {
            clearInterval(timer)
        })
        container.addEventListener(&#39;mouseleave&#39;, autoChange)
ログイン後にコピー

ここに小さなエピソードを追加します

:最初に監視したのはマウスアウト イベントでしたが、テスト中に、マウスがコンテナ ボックスの外に移動すると、マウスアウト イベントが複数回トリガーされ、autoChange 関数が複数回呼び出されることが判明しました。 、複数のタイマーがオンになり、画像がカオスに切り替わります。mouseout イベントと Mouseleave イベントの違いを確認しました。:

mouseover と Mouseout は、親要素とその子要素の両方でトリガーできます。マウスが要素を通過するとき、トリガーの数は子要素の数に応じて異なります。
  • mouseenter と Mouseleave は、親要素でのみトリガーされます。マウスが要素を通過するときに、一度だけトリガーされます。
  • mouseoverとmouseoutはmouseenterとmouseleaveの前にトリガーされます
つまり、

:

    mouseoutは次のとおりです。選択領域内では、親要素から子要素への移動も移動トリガーとみなされます。
  • mouseleave は、選択した領域内で、サブ要素があるかどうかに関係なく、外に移動した場合にのみトリガーされます。
  • 3.4 下部の小さな円が画像と同期して切り替わることを認識します。

実装原理: imgBox の左の値に基づいて、どの小さな円が選択されるかを計算できます。絶対値は、小さな円のインデックス値です。これは、理解に役立つ図です (言葉は少し見苦しいので、無視してください、ふふ...)


goLast() 関数と goNext() 関数で計算/計算された 選択された小さな円のインデックス ネイティブjsを実装してカルーセルチャートを実装する

 var index = 0 // 定义index变量,表示第几个小圆圈被选中
 
 function goLast() {
            let newBoxLeft            if (imgBox.style.left === &#39;0px&#39;) {
                newBoxLeft = -2000
            } else {
                // imgBox.style.left是一个字符串,所以要转化为数字才能进行计算,而设定left时就要加上px成为一个字符串
                newBoxLeft = parseInt(imgBox.style.left) + 500;
            }
            imgBox.style.left = newBoxLeft + "px"
            index = Math.abs(newBoxLeft / 500)  //计算出被选中小圆圈的索引
        }

 function goNext() {
            let newBoxLeft            if (imgBox.style.left === &#39;-2000px&#39;) {
                newBoxLeft = 0
            } else {
                newBoxLeft = parseInt(imgBox.style.left) - 500;
            }
            imgBox.style.left = newBoxLeft + "px"
            index = Math.abs(newBoxLeft / 500)  ///计算出被选中小圆圈的索引
        }
ログイン後にコピー

3.2、3.3、および 3.4 を完了した後のレンダリングは次のとおりです。

3.5 下部の小さな円をクリックすると、対応するものに切り替わります。 画像

// 实现点击底部某个小圆圈时切换成对应的图片
        (function clickCircle() {
            let circleArr = document.getElementsByTagName(&#39;li&#39;)
            for (let j = 0; j < circleArr.length; j++) {
                circleArr[j].addEventListener(&#39;click&#39;, () => {
                    index = j                    selectCircle()
                    imgBox.style.left = -(index * 500) + "px"
                })
            }
        })() //函数自调用写法,格式:(函数)()
ログイン後にコピー

レンダリングは次のとおりです。ネイティブjsを実装してカルーセルチャートを実装する

これまでのカルーセル チャートの機能を実装しましたが、強迫性障害の私としては、自動切り替え時に左右の矢印が表示されて見栄えが悪いことがわかったので、微調整してみます。

3.6 補足実装: マウスが画像上にあると、左右の矢印が表示され、マウスを外に出すと、左右の矢印が非表示になります。マウス イベントのリッスンでは、次のコードに変更します

//给左右箭头默认隐藏<a href="javascript:;" class="leftArrow"   style="max-width:90%">
    <img src="/static/imghw/default1.png"  data-src="./images/leftArrow.png"  class="lazy"   alt="左箭头"></a><a href="javascript:;" class="rightArrow"   style="max-width:90%">
    <img src="/static/imghw/default1.png"  data-src="./images/rightArrow.png"  class="lazy"   alt="右箭头"></a>
ログイン後にコピー
ネイティブjsを実装してカルーセルチャートを実装する レンダリング:

以上です。整理するのは簡単ではありません。気に入ったら、「いいね!」して保存してください。それ!


個人ブログ Gedong Zhang へようこそネイティブjsを実装してカルーセルチャートを実装する
以下は完全なコードです。

// 监听鼠标移入事件和移出事件,实现鼠标悬停在图片上时,停止自动切换,停留在当前图片,鼠标移出时继续自动切换
        container.addEventListener(&#39;mouseenter&#39;, function() {
            clearInterval(timer)
            leftArrow.style.display = "inline"
            rightArrow.style.display = "inline"
        })
        container.addEventListener(&#39;mouseleave&#39;, function() {
            autoChange()
            leftArrow.style.display = "none"
            rightArrow.style.display = "none"
        })
ログイン後にコピー

関連する無料学習の推奨事項:

javascript

(ビデオ)

以上がネイティブjsを実装してカルーセルチャートを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

WeChat アプレットを使用してカルーセル切り替え効果を実現する WeChat アプレットを使用してカルーセル切り替え効果を実現する Nov 21, 2023 pm 05:59 PM

WeChat アプレットを使用してカルーセル スイッチング効果を実現する WeChat アプレットは、シンプルで効率的な開発と使用特性を備えた軽量のアプリケーションです。 WeChat ミニ プログラムでは、カルーセル スイッチング効果を実現することが一般的な要件です。この記事では、WeChat アプレットを使用してカルーセル切り替え効果を実現する方法と、具体的なコード例を紹介します。まず、カルーセル コンポーネントを WeChat アプレットのページ ファイルに追加します。たとえば、&lt;swiper&gt; タグを使用すると、カルーセルの切り替え効果を実現できます。このコンポーネントでは、 b を渡すことができます。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

See all articles