웹 프론트엔드 H5 튜토리얼 H5는 캐러셀의 터치스크린 버전을 구현합니다.

H5는 캐러셀의 터치스크린 버전을 구현합니다.

Mar 26, 2018 pm 02:20 PM
html5 성취하다

이번에는 H5의 터치스크린 버전의 캐러셀을 가져오겠습니다. H5의 터치스크린 버전 캐러셀 구현 시 주의사항은 무엇인가요?

프론트엔드가 처음인데, 휴대폰에서 터치스크린 캐러셀을 구현하는 과정을 공유하고 싶습니다.

1. 원형 슬라이딩을 지원합니다

2. 임의로 설정할 수 있으며 화면과 너비가 같을 필요는 없습니다

3. 페이지를 세로로 스크롤할 수 있습니다.

4. 요소 전환을 모니터링하도록 콜백을 설정할 수 있습니다.

5. 타사 라이브러리

원칙

1. 하위 요소 .item의 너비가 375px라고 가정하고 절대 위치 지정모든 하위 요소를 상위 요소 내에 배치

2. 상위 element.carousel을 하위 element.item

의 너비와 동일한 375px로 설정합니다. 3. 상위 element.carousel에 터치 이벤트를 추가합니다: touchstart, touchmove, touchend

4.

5. 손가락이 슬라이드되면 슬라이딩 방향은 슬라이딩 거리로 판단됩니다.

① 손가락이 왼쪽으로 슬라이드되면 현재 요소와 현재 요소가 이동됩니다. 동시에 오른쪽에 있는 요소

② 손가락을 오른쪽으로 밀면 현재 요소와 왼쪽에 있는 요소가 동시에 이동됩니다.

6. 손가락을 떼면, 슬라이딩 거리를 사용하여 다음 페이지로 전환할지 여부를 결정합니다.

① 이동 거리는 하위 요소 너비의 50%를 초과하지 않으며, 현재 요소를 전환하지 않고 현재 페이지를 원래 위치로 다시 스크롤합니다.

②이동 거리가 자식 요소 너비의 50%를 초과하는 경우 현재 요소를 다음 요소로 전환합니다.

③현재 요소의 변환 속성을 변환3d(0px, 0px, 0px)로 설정하고, z-index 속성을 +1로 설정합니다.

④다음 하위 요소의 변환 속성을 변환3d(375px, 0px, 0px)로 설정하고, 그리고 z-index 속성을 +1

으로 설정합니다. ⑤이전 하위 요소의 변환 속성을 3d(-375px, 0px, 0px)로 설정하고, z-index 속성을 +1

⑥다른 모든 하위 요소의 z-를 설정합니다. elements index 속성은 기본값

7로 설정됩니다. 첫 번째 하위 요소의 이전 요소가 마지막 요소이고, 마지막 요소의 다음 요소가 첫 번째 요소입니다. 이 단계는 순환 연결 목록을 통해 구현됩니다.

이동할 때 상위 요소 .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

초기 상태 설정

먼저 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 이벤트

손가락이 눌렀을 때 초기 상태 저장 위치

_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 event

손가락이 화면을 떠날 때 어떤 페이지인지 계산

_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 library

사용 편의성을 위해 전체 구현 프로세스를 라이브러리에 캡슐화하고 prev(), next() 메서드를 추가했습니다. 사용이 매우 간단합니다.

<script src="lib/carousel.js"></script>
CreateCarousel("carousel", "item", true)
  .bindTouchEvent()
  .setItemChangedHandler(onPageChanged);
//参数"carousel"为容器的类名
//参数"item"为子元素的类名
//第三个参数设置是否需要循环播放,true为循环播放
로그인 후 복사

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보는 PHP 중국어 웹사이트에서 확인하세요!

추천 도서:

zepto는 모바일에서 원활한 위아래 스크롤을 구현합니다.

H5 양식 확인 방법은 무엇인가요

위 내용은 H5는 캐러셀의 터치스크린 버전을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

See all articles