ホームページ ウェブフロントエンド H5 チュートリアル H5 はカルーセルのタッチ スクリーン バージョンを実装します

H5 はカルーセルのタッチ スクリーン バージョンを実装します

Mar 26, 2018 pm 02:20 PM
html5 成し遂げる

今回は H5 のカルーセルのタッチ スクリーン バージョンをお届けします。 H5 のカルーセルのタッチ スクリーン バージョンを実装するための 注意事項 は何ですか。実際のケースを見てみましょう。

私はフロントエンドの初心者ですが、携帯電話でのタッチスクリーンカルーセルの実装プロセスを共有したいと思います。一般的な機能は次のとおりです:

1. 円形スライドをサポートします

2.任意に設定でき、画面と同じ幅である必要はありません

3. ページは垂直にスクロールできます

4. 要素の切り替えを監視するためにコールバックを設定できます

5.サードパーティ ライブラリ

原則

1. サブ要素 .item の幅が 375px であると仮定し、

絶対配置すべての子要素を親要素内に配置します

2 の幅を設定します。親要素.carousel を子要素.item の幅と同じ 375px に設定します

3. 親要素.carousel にタッチイベントを追加します: touchstart、touchmove、touchend

4. 指が押されると、初期位置 (clientX) が保存されます。

5. 指がスライドするとき、スライドの方向はスライド距離によって判断されます:

① 指が左にスライドすると、現在の要素と現在の要素が移動します。右側の要素も同時に移動します

② 指を右にスライドすると、現在の要素とその左側の要素が同時に移動します

6. 指を離すと、スライド距離を使用して次のページに切り替えるかどうかを決定します

① 移動距離が子要素の幅の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-を設定します要素のインデックス属性はデフォルト値に設定されます

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

初期状態を設定します

まず2つ実装します-way リンク リスト。カルーセル コンポーネント内の要素を維持するために使用します。

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 イベント

指が押して初期状態を保存 Position

_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()メソッドを追加しました。使い方は非常に簡単です。
<script src="lib/carousel.js"></script>
CreateCarousel("carousel", "item", true)
  .bindTouchEvent()
  .setItemChangedHandler(onPageChanged);
//参数"carousel"为容器的类名
//参数"item"为子元素的类名
//第三个参数设置是否需要循环播放,true为循环播放
ログイン後にコピー

この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事にも注目してください。

推奨読書:

zeptoはモバイルでのシームレスな上下スクロールを実現


H5フォーム検証の方法とは何ですか

以上が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)

HTMLの表の境界線 HTMLの表の境界線 Sep 04, 2024 pm 04:49 PM

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML のネストされたテーブル HTML のネストされたテーブル Sep 04, 2024 pm 04:49 PM

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML 左マージン HTML 左マージン Sep 04, 2024 pm 04:48 PM

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML テーブルのレイアウト HTML テーブルのレイアウト Sep 04, 2024 pm 04:54 PM

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML 内のテキストの移動 HTML 内のテキストの移動 Sep 04, 2024 pm 04:45 PM

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML 順序付きリスト HTML 順序付きリスト Sep 04, 2024 pm 04:43 PM

HTML 順序付きリストのガイド。ここでは、HTML 順序付きリストと型の導入とその例についても説明します。

HTML の onclick ボタン HTML の onclick ボタン Sep 04, 2024 pm 04:49 PM

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。

HTML入力プレースホルダー HTML入力プレースホルダー Sep 04, 2024 pm 04:54 PM

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

See all articles