H5 を使用したカルーセル (タッチ スクリーン バージョン) の実装に関するサンプル チュートリアル
私はフロントエンドの初心者です。携帯電話でのタッチスクリーンバージョンのカルーセルの実装プロセスを共有させてください。一般的な機能は次のとおりです:
円形スライドをサポート
幅は次のとおりです。任意に設定でき、画面と同じ幅である必要はありません
垂直方向にスクロールできます
要素の切り替えをリッスンするコールバックを設定できます
サードパーティのライブラリを含まない純粋な js
原則
子要素
.item
がwidth
が375ピクセルであると仮定し、絶対配置を使用してすべての子要素を親要素内に配置します.item
的width
为375px,使用绝对定位将所有子元素放在父元素内将父元素
.carousel
的width
设置为375px,与子元素.item
宽度相同为父元素
.carousel
添加触摸事件:touchstart
,touchmove
,touchend
手指按下时,保存初始位置(
clientX
)手指滑动时,通过滑动距离判断滑动的方向:
手指向左滑动,则同时移动当前元素和当前元素右边的元素
手指向右滑动,则同时移动当前元素和当前元素左边的元素
手指抬起时,通过滑动距离判断是否切换到下一页
移动距离未超过子元素宽度的50%,将当前页面回滚到初始位置,不切换当前元素。
移动距离超过子元素宽度的50%,切换当前元素为下一个元素。
将当前元素的
transform
属性设置为translate3d(0px, 0px, 0px)
,并将z-index
属性+1将下一个子元素的
transform
属性设置为translate3d(375px, 0px, 0px)
,并将z-index
属性+1将上一个子元素的
transform
属性设置为translate3d(-375px, 0px, 0px)
,并将z-index
属性+1将其他所有子元素的
z-index
属性设置为默认值第一个子元素的上一个元素是最后一个元素,最后一个元素的下一个元素是第一个元素,该步骤通过循环链表实现。
移动时设置的是子元素.item的transform属性,而不是父元素
.carousel
实现步骤
html&css
//html <p class="carousel" ontouchstart="" > <p class="item" style="background: #3b76c0" > <h3 >item-1</h3> </p> <p class="item" style="background: #58c03b;"> <h3>item-2</h3> </p> <p class="item" style="background: #c03b25;"> <h3>item-3</h3> </p> <p class="item" style="background: #e0a718;"> <h3>item-4</h3> </p> <p class="item" style="background: #c03eac;"> <h3>item-5</h3> </p> </p> //css .carousel{ height: 50%; position: relative; overflow: hidden; } .item { position: absolute; left: 0; top: 0; width: 100%; height: 100%; }
js
设置初始状态
首先实现一个双向链表,用于维护轮播组件中的元素。
function Node(data) { this.data = data; this.prev = null; this.next = null; this.index = -1; } //双向循环列表 function LinkList() { var _nodes = []; this.head = null; this.last = null; if (typeof this.append !== "function") { LinkList.prototype.append = function (node) { if (this.head == null) { this.head = node; this.last = this.head; } else { this.head.prev = node; this.last.next = node; node.prev = this.last; node.next = this.head; this.last = node; } node.index = _nodes.length; //务必在push前设置node.index _nodes.push(node); } } }
有了链表之后,创建一个链表实例,将子元素添加进链表内,并设置一些初始状态
var _container = document.querySelector("." + containerClass); var _items = document.querySelectorAll("." + itemClass); var list = loop ? new LinkList() : new SingleList(); for(var i = 0; i < _items.length; i++) { list.append(new Node(_items[i])); } var _prev = null; //保存之前显示的元素 var _current = list.head; //保存当前显示的元素,默认为第一个元素 var _normalZIndex = _current.data.style.zIndex; //未显示元素的z-index值 var _activeZIndex = _normalZIndex + 1; //当前显示元素的z-index值 var _itemWidth = _current.data.offsetWidth; //子元素宽度 positionItems(); //初始化元素位置 zindexItems(_current, _activeZIndex); //将当前元素及其左右元素的z-index加1
绑定触摸事件
touchstart事件
手指按下时,保存初始位置
_container.addEventListener("touchstart", function(e) { // e.preventDefault();//取消此行代码的注释会在该元素内阻止页面纵向滚动 var touch = e.touches[0]; startX = touch.clientX; //保存手指按下时的位置 startY = touch.clientY; _container.style.webkitTransition = ""; //取消动画效果 startT = new Date().getTime(); //记录手指按下的开始时间 isMove = false; transitionItems(_prev, false); //取消之前元素的过渡 transitionItems(_current, false); //取消当前元素的过渡 }, false);
touchmove事件
手指在屏幕上滑动,页面跟随手指移动
_container.addEventListener("touchmove", function(e) { // e.preventDefault();//取消此行代码的注释会在该元素内阻止页面纵向滚动 var touch = e.touches[0]; var deltaX = touch.clientX - startX; //计算手指在X方向滑动的距离 var deltaY = touch.clientY - startY; //计算手指在Y方向滑动的距离 //如果X方向上的位移大于Y方向,则认为是左右滑动 if (Math.abs(deltaX) > Math.abs(deltaY)){ translate = deltaX > _itemWidth ? _itemWidth : deltaX; translate = deltaX < -_itemWidth ? -_itemWidth : deltaX; //同时移动当前元素及其左右元素 moveItems(translate); isMove = true; } }, false);
touchend事件
手指离开屏幕时,计算最终需要停留在哪一页
_container.addEventListener("touchend",function(e) { // e.preventDefault();//取消此行代码的注释会在该元素内阻止页面纵向滚动 //是否会滚 var isRollback = false; //计算手指在屏幕上停留的时间 var deltaT = new Date().getTime() - startT; if (isMove) { //发生了左右滑动 //如果停留时间小于300ms,则认为是快速滑动,无论滑动距离是多少,都停留到下一页 if(deltaT < 300){ translate = translate < 0 ? -_itemWidth : _itemWidth; }else { //如果滑动距离小于屏幕的50%,则退回到上一页 if (Math.abs(translate) / _itemWidth < 0.5){ isRollback = true; }else{ //如果滑动距离大于屏幕的50%,则滑动到下一页 translate = translate < 0 ? -_itemWidth : _itemWidth; } } moveTo(translate, isRollback); } }, false);
Carousel库
为了方便使用,我将整个实现过程封装成了一个库,并添加了prev()
, next()
親要素
.carousel
の width
を、子要素 .item
と同じ幅の 375px に設定します タッチイベントを追加します親要素 .carousel
へ: touchstart
、touchmove
code>、touchend
指が押したとき、初期位置を保存します (clientX
) 指がスライドするとき、スライド方向はスライド距離によって判断されます: 指を左にスワイプすると、現在の要素と現在の要素の右側の要素が同時に移動します指を右にスライドすると移動します現在の要素と現在の要素の左側の要素を同時に🎜🎜🎜🎜🎜指を離すと、スライド距離を使用して次のページに切り替えるかどうかが決定されます🎜🎜- 🎜🎜移動距離は子要素の幅の 50% を超えず、現在のページは最初のページにロールバックされます現在の要素を切り替えずに位置を変更します。 🎜🎜🎜🎜移動距離が子要素の幅の50%を超える場合、現在の要素を次の要素に切り替えます。 🎜🎜🎜🎜現在の要素の
transform
属性を translate3d(0px, 0px, 0px)
に設定し、z-index
属性を設定します + 1 🎜🎜🎜🎜次の子要素の transform
属性を translate3d(375px, 0px, 0px)
に設定し、z-index
を変更します。属性 +1🎜🎜🎜🎜前の子要素の transform
属性を translate3d(-375px, 0px, 0px)
に設定し、z-index< /code> code>attribute +1 🎜🎜🎜🎜 他のすべての子要素の <code>z-index
属性をデフォルト値に設定します 🎜🎜🎜🎜🎜 最初の子要素の前の要素が最後の要素です要素の次の要素が最初の要素であり、このステップは循環リンク リストを通じて実装されます。 🎜🎜🎜🎜移動時には、親要素.carousel
ではなく、子要素.itemのtransform属性が設定されます🎜
🎜実装手順🎜html&css h3> <script src="lib/carousel.js"></script>
CreateCarousel("carousel", "item", true)
.bindTouchEvent()
.setItemChangedHandler(onPageChanged);
//参数"carousel"为容器的类名
//参数"item"为子元素的类名
//第三个参数设置是否需要循环播放,true为循环播放
ログイン後にコピー🎜js🎜初期状態を設定します
🎜まず、カルーセル コンポーネント内の要素を維持するために双方向リンク リストを実装します。 🎜rrreee🎜リンク リストを取得したら、リンク リストのインスタンスを作成し、リンク リストに子要素を追加して、いくつかの初期状態を設定します🎜rrreeeバインド タッチ イベント
タッチスタート イベント
🎜指を押すと初期位置が保存されます🎜rrreeetouchmoveイベント
🎜画面上を指でスライドし、指に合わせてページが移動します🎜rrreeetouchendイベント
🎜時指が画面から離れた場合、計算は最終的にどのページに留まる必要があります🎜rrreee🎜カルーセル ライブラリ🎜🎜使いやすいように、実装プロセス全体をライブラリにカプセル化し、prev()
、next() メソッドの使用は非常に簡単です: 🎜rrreee🎜ライブラリはgithubからダウンロードできます🎜🎜参考🎜🎜H5シングルページジェスチャスライド画面切り替え原理🎜🎜おやすみ! 🎜🎜【関連おすすめ】🎜🎜1.🎜無料のh5オンラインビデオチュートリアル🎜🎜🎜2.🎜HTML5完全版マニュアル🎜🎜🎜3.🎜php.cnオリジナルのhtml5ビデオチュートリアル🎜🎜
<script src="lib/carousel.js"></script> CreateCarousel("carousel", "item", true) .bindTouchEvent() .setItemChangedHandler(onPageChanged); //参数"carousel"为容器的类名 //参数"item"为子元素的类名 //第三个参数设置是否需要循环播放,true为循环播放
以上がH5 を使用したカルーセル (タッチ スクリーン バージョン) の実装に関するサンプル チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Python のサポート ベクター マシン (SVM) は、分類および回帰の問題を解決するために使用できる強力な教師あり学習アルゴリズムです。 SVM は、高次元データや非線形問題を処理する場合に優れたパフォーマンスを発揮し、データ マイニング、画像分類、テキスト分類、バイオインフォマティクスなどの分野で広く使用されています。この記事では、Python で分類に SVM を使用する例を紹介します。 scikit-learn ライブラリの SVM モデルを使用します。

H5 は、HTML の最新バージョンである HTML5 を指します。H5 は、開発者により多くの選択肢と創造的なスペースを提供する強力なマークアップ言語です。その出現は、Web テクノロジーの発展を促進し、Web ページのインタラクションと効果をより優れたものにします。H5 テクノロジーとして徐々に成熟して普及していき、インターネットの世界でますます重要な役割を果たしていくと思います。

この記事は、H5、WEB フロントエンド、大規模フロントエンド、WEB フルスタックを簡単に区別するのに役立ちます。

新世代のフロントエンド フレームワークが出現し続ける中、VUE3 は高速で柔軟、そして使いやすいフロントエンド フレームワークとして愛されています。次に、VUE3 の基本を学び、簡単なビデオ プレーヤーを作成しましょう。 1. VUE3 をインストールする まず、VUE3 をローカルにインストールする必要があります。コマンド ライン ツールを開き、次のコマンドを実行します。 npminstallvue@next 次に、新しい HTML ファイルを作成し、VUE3 を導入します。 <!doctypehtml>

Golang は、さまざまなアプリケーションやサービスの開発に使用できる強力で効率的なプログラミング言語です。 Golang では、ポインタは非常に重要な概念であり、データをより柔軟かつ効率的に操作するのに役立ちます。ポインタ変換とは、異なる型間のポインタ操作のプロセスを指します。この記事では、具体的な例を使用して、Golang におけるポインタ変換のベスト プラクティスを学びます。 1. 基本概念 Golang では、各変数にはアドレスがあり、アドレスはメモリ内の変数の位置です。

インターネットの急速な発展に伴い、データは今日の情報化時代において最も重要なリソースの 1 つになりました。 Webクローラは、ネットワークデータを自動的に取得・処理する技術として、ますます注目と応用が進んでいます。この記事では、PHPを使って簡単なWebクローラーを開発し、ネットワークデータを自動取得する機能を実現する方法を紹介します。 1. Web クローラーの概要 Web クローラーとは、ネットワーク リソースを自動的に取得して処理する技術であり、主な動作プロセスはブラウザーの動作をシミュレートし、指定された URL アドレスに自動的にアクセスし、すべての情報を抽出することです。

VAE は生成モデルであり、正式名は variationalAutoencoder で、中国語に翻訳すると変分自動エンコーダとなります。これは、画像、音声、テキストなどの新しいデータを生成するために使用できる教師なし学習アルゴリズムです。通常のオートエンコーダと比較して、VAE はより柔軟で強力であり、より複雑で現実的なデータを生成できます。 Python は最も広く使用されているプログラミング言語の 1 つであり、深層学習の主要ツールの 1 つです。 Python には、優れた機械学習と奥深いものが数多くあります。

実装手順: 1. ページのスクロール イベントを監視する; 2. ページが一番下までスクロールしたかどうかを判断する; 3. データの次のページをロードする; 4. ページのスクロール位置を更新する。
