ホームページ ウェブフロントエンド H5 チュートリアル H5 を使用してタッチ スクリーン バージョンのカルーセルを実装する方法の詳細な紹介

H5 を使用してタッチ スクリーン バージョンのカルーセルを実装する方法の詳細な紹介

Mar 13, 2017 pm 05:23 PM

この記事では、H5 を使用してタッチ スクリーン カルーセルを実装する方法を主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう

フロントエンドの初心者ですが、携帯電話でのタッチ スクリーン バージョンの実装プロセスを共有します。

1. サポート。円形スライド

2. 幅は画面と同じ幅に設定できます

4. 要素の切り替えをリッスンするようにコールバックを設定できます

5.サードパーティのライブラリを使用しない

1. 子要素を想定します。 .item の

width を使用して、すべての子要素を親要素内に配置します 2。親要素 .carousel の幅を子要素 .item

の幅と同じ 375px にします。親要素 .carousel はタッチイベント

を追加します: touchstart、touchmove、touchend4. 、初期位置 (clientX) が保存されます 5. 指をスライドさせると、スライド方向はスライド距離によって決まります:

①指を左にスワイプして、現在の要素と現在の要素の右側の要素を移動します。同時に

②指を右にスワイプすると、現在の要素と現在の要素の左側の要素が同時に移動します6. 指を離したときのスライド距離を使用して、 に切り替えるかどうかを決定します。次のページ

①移動距離が子要素の幅の50%を超えない場合、現在の要素は切り替えられずに、現在のページが初期位置にロールバックされます。

②移動距離が子要素の幅の50%を超えた場合、現在の要素を次の要素に切り替えます。

③現在の要素のtrans

for

m

属性

を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 属性をデフォルト値に設定します7. 最初のサブ要素の前の要素が最後の要素であり、最後の要素の次の要素が最初の要素になります。これは循環リンク リストを通じて行われます。 移動時には、親要素.carouselではなく、子要素.itemのtransform属性が設定されます

実装手順

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

イニシャルを設定するstate

まず、カルーセルコンポーネント内の要素を維持するために二重リンクリストを実装します。


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);
ログイン後にコピー

カルーセルライブラリ

使いやすさのために、実装プロセス全体をライブラリにカプセル化し、prev()、next()メソッドを追加しました使い方はとても簡単です:


rree

以上がH5 を使用してタッチ スクリーン バージョンのカルーセルを実装する方法の詳細な紹介の詳細内容です。詳細については、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)

h5 とはどういう意味ですか? h5 とはどういう意味ですか? Aug 02, 2023 pm 01:52 PM

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

H5、WEB フロントエンド、ビッグ フロントエンド、WEB フルスタックを区別するにはどうすればよいですか? H5、WEB フロントエンド、ビッグ フロントエンド、WEB フルスタックを区別するにはどうすればよいですか? Aug 03, 2022 pm 04:00 PM

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

h5の位置の使い方 h5の位置の使い方 Dec 26, 2023 pm 01:39 PM

H5 では、position 属性を使用して、CSS を通じて要素の位置を制御できます: 1. 相対位置、構文は「style="position:relative;」です。 2. 絶対位置、構文は「style="position:」です。 Absolute;" "; 3. 固定位置、構文は「style="position:fixed;」などです。

Web側でh5を上にスライドさせて次のページを読み込むように実装する方法 Web側でh5を上にスライドさせて次のページを読み込むように実装する方法 Mar 11, 2024 am 10:26 AM

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

vue3 で H5 フォーム検証コンポーネントを実装する方法 vue3 で H5 フォーム検証コンポーネントを実装する方法 Jun 03, 2023 pm 02:09 PM

レンダリング記述は vue.js に基づいており、他のプラグインやライブラリに依存せず、基本的な機能は element-ui と一致しており、モバイル端末の違いに合わせて内部実装にいくつかの調整が加えられています。現在の構築プラットフォームは uni-app 公式スキャフォールディングを使用して構築されており、現在ほとんどのモバイル端末には h6 と WeChat ミニプログラムの 2 種類が搭載されているため、複数の端末で 1 セットのコードを実行する技術の選択に非常に適しています。実装アイデアのコア API: と に対応する、provide と inject を使用します。コンポーネントでは、すべてのインスタンスを格納するために変数 (配列) が内部的に使用され、転送されるデータは Provide を通じて公開されます。コンポーネントは内部で Inject を使用して親コンポーネントから提供されたデータを受け取り、最後に独自の属性をメソッドの送信

新しい H5 プロモーション タグの概要と紹介 (例付き) 新しい H5 プロモーション タグの概要と紹介 (例付き) Aug 03, 2022 pm 05:10 PM

この記事では、新しい H5 プロモーション タグについて説明します。困っている友人のお役に立てれば幸いです。

ページ h5 と php は何を意味しますか? (関連知識の議論) ページ h5 と php は何を意味しますか? (関連知識の議論) Mar 20, 2023 pm 02:23 PM

HTML5 と PHP は、Web 開発で一般的に使用される 2 つのテクノロジです。前者はページ レイアウト、スタイル、インタラクションの構築に使用され、後者はサーバー側のビジネス ロジックとデータ ストレージの処理に使用されます。 HTML5 と PHP の関連知識を詳しく見ていきましょう。

h5 にはどのようなキャッシュ メカニズムがありますか? h5 にはどのようなキャッシュ メカニズムがありますか? Nov 16, 2023 pm 01:27 PM

H5 には直接的なキャッシュ メカニズムはありませんが、Web Storage API、IndexedDB、Service Workers、Cache API、Application Cache などのテクノロジーを組み合わせることで、強力なキャッシュ機能を実現し、アプリケーションのパフォーマンス、可用性、スケーラビリティを向上させることができます。さまざまなニーズやアプリケーションシナリオに応じて選択して使用できます。詳細な紹介: 1. Web Storage API は、H5 によって提供されるシンプルなものです。

See all articles