移動端H5開發 (滑動事件)


  最近一直在做手機App H5的開發,在開發過程中,經常會遇到很多滑動事件,寫個demo,分享自己的一些寫法。(如寫的不好,輕噴!)

  直接貼代碼

  html css代碼 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>touch demo</title>
<style type="text/css">
#demo{
    margin-top:200px;
    height: 200px;
    display: -webkit-box;
}
#demo1{
    background: red;
    width: 100%;
    height: 200px;
}
#demo2{
    background: blue;
    width: 100%;
    height: 200px;
}
body{
    overflow: hidden;
}
</style>
</head>
<body>
    <div id="demo">
        <div id="demo1"></div>
        <div id="demo2"></div>
    </div>
</body>
</html>

js代碼

	var slideDom = document.getElementById("demo");//滑動區域
	var length = slideDom.children.length;//子類節點長度
	var index = 0;//初始下標
	window.prevX = 0;
	slideDom.addEventListener('touchstart', touchstart, false);
	slideDom.addEventListener('touchmove', touchmove, false);
	slideDom.addEventListener('touchend', touchend, false);
	
	//開始滑動
	function touchstart(e){
		var point = getPoint(e);
		window.startX = point.pageX;
		console.log(window.startX);
	};
	//滑動過程中
	function touchmove(e){
		e.preventDefault();//阻止默認行為
		var point = getPoint(e);
		window.moveX = point.pageX;
		window.deltaX = window.moveX - window.startX;
		domove(window.deltaX+window.prevX);
	};
	//結束滑動
	function touchend(e){
		var x = Math.abs(window.deltaX);
		var item_w = document.getElementById("demo1").offsetWidth;
		if(window.deltaX>0){
			if(x>item_w){
				var indexd = Math.round(x / item_w);
				index = index - indexd;
			}else{
				if(x/item_w > 0.3){
					index--
				}
			}
		}else if(window.deltaX<0){
			if(x>item_w){
				var indexd = Math.round(x / item_w);
				index = index + indexd;
			}else{
				if(x/item_w > 0.3){
					index++;
				}
			}
		}
		if(index >= (length-1)){
			index = length-1;
		}
		if(index <0 ){
			index = 0;
		}
		window.prevX = -index*item_w;
		domove(window.prevX,true);
	};
	//默認以第一個手指的位置計算
	function getPoint(e) {
		return e.touches ? e.touches[0] : e;
	};
	
	//利用transform移動
	function domove(x,t){
		if(t){
			slideDom.setAttribute('style', 'transform: translate(' + x + 'px, 0px);transition:transform 300ms ease');
		}else{
			slideDom.setAttribute('style', 'transform: translate(' + x + 'px, 0px);transition:transform 0ms ease');
		}
		
	};

  

如果用戶是多指操作,默認以第一個手指的位置進行計算。

在事件結束時,對div移動的位置進行計算。

在 index的范圍內,如果div移動范圍超過的0.3;就在切換到下一index的div;  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM