原理:
當(dāng)開始一個touchstart事件的時候葫男,獲取此刻手指的橫坐標startX和縱坐標startY;
當(dāng)觸發(fā)touchmove事件時虚循,在獲取此時手指的橫坐標moveEndX和縱坐標moveEndY;最后秆吵,通過這兩次獲取的坐標差值來判斷手指在手機屏幕上的滑動方向。
具體代碼如下:
$("body").on("touchstart",?function(e) {
????e.preventDefault();
????startX = e.originalEvent.changedTouches[0].pageX,
????startY = e.originalEvent.changedTouches[0].pageY;
});
$("body").on("touchmove",?function(e) {
????e.preventDefault();
????moveEndX = e.originalEvent.changedTouches[0].pageX,
????moveEndY = e.originalEvent.changedTouches[0].pageY,
????X = moveEndX - startX,
????Y = moveEndY - startY;
????if?( X > 0 ) { alert("右滑");? }
????else?if?( X < 0 ) {? alert("左滑");? }
????else?if?( Y > 0) {? alert("下滑");? }
????else?if?( Y < 0 ) {? ?alert("上滑");? }
????else{? alert("just touch");? }
});
總結(jié):touchmove的最后坐標減去touchstart的起始坐標角塑。
X的結(jié)果如果正數(shù)蔫磨,則說明手指是從左往右劃動;
X的結(jié)果如果負數(shù)圃伶,則說明手指是從右往左劃動质帅;
Y的結(jié)果如果正數(shù),則說明手指是從上往下劃動留攒;
Y的結(jié)果如果負數(shù),則說明手指是從下往上劃動嫉嘀。
那么問題就來了……
在實際的操作中炼邀,手指的上下滑動很難做到直上直下,只要稍微有點斜剪侮,只要稍微有點斜拭宁,就會被X軸的判斷先行接管洛退,而與我們實際的操作意愿相背離。此時就需要添加特殊的判斷技巧杰标,代碼如下:
$("body").on("touchstart",?function(e) {
????e.preventDefault();
????startX = e.originalEvent.changedTouches[0].pageX,
????startY = e.originalEvent.changedTouches[0].pageY;
});
$("body").on("touchmove",?function(e) {
????e.preventDefault();
????moveEndX = e.originalEvent.changedTouches[0].pageX,
????moveEndY = e.originalEvent.changedTouches[0].pageY,
????X = moveEndX - startX,
????Y = moveEndY - startY;
????if?( Math.abs(X) > Math.abs(Y) && X > 0 ) { alert("left 2 right"); }
????else?if?( Math.abs(X) > Math.abs(Y) && X < 0 ) { alert("right 2 left");? }
????else?if?( Math.abs(Y) > Math.abs(X) && Y > 0) { alert("top 2 bottom"); }
????else?if?( Math.abs(Y) > Math.abs(X) && Y < 0 ) { alert("bottom 2 top"); }
????else{ alert("just touch");? }
});
以上代碼兵怯,在測試時仍不能達到預(yù)期的效果,此時要注意到一個事實--$('body').height = 0(此處是個大坑腔剂,但有時也不會出現(xiàn)媒区,望大神指教)
故還應(yīng)該在此基礎(chǔ)上添加一下代碼:
var?windowHeight = $(window).height(),
??????????$body = $("body");
??????// console.log($(window).height());
??????// console.log($('body').height());
??????$body.css("height", windowHeight);
?到此,已實現(xiàn)了手機移動端手指的上滑掸犬、下滑袜漩、左滑和右滑操作