어떻게 H5 로 터치 스크린 판 의 윤 파 기 를 실현 합 니까?
의 원리
.item
의 width
가 375 px 라 고 가정 하고 절대적 인 포 지 셔 닝 을 사용 하여 모든 서브 요 소 를 부모 요소 에 넣 습 니 다 .carousel
의 width
를 375 px 로 설정 하여 하위 요소 .item
와 너비 가 같 음 .carousel
에 터치 이벤트 추가: touchstart
, touchmove
, touchend
clientX
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
item-1
item-2
item-3
item-4
item-5
//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);
터치 엔 드 이벤트
손가락 이 화면 을 떠 날 때 마지막 으로 어느 페이지 에 머 물 러 야 하 는 지 계산 합 니 다.
_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()
방법 을 추 가 했 습 니 다. 사용 은 매우 간단 합 니 다.
CreateCarousel("carousel", "item", true)
.bindTouchEvent()
.setItemChangedHandler(onPageChanged);
// "carousel"
// "item"
// ,true
이 라 이브 러 리 는 github 에서 다운로드 할 수 있 습 니 다.
레 퍼 런 스
H5 단일 페이지 제스처 슬라이더 전환 원리
good night!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.