前言
自定义手机端的触摸效果,可以左右触摸滑动,就像swiper自带的轮播效果,在这种条件下可以随意实现你要的动画效果。
一、代码如下
把代码封装成一个方法,在需要的地方调用。
eventUtil.js
export const EventUtil = {
addHandler: function (element, type, handler) {
if (element.addEventListener)
element.addEventListener(type, handler, false);
else if (element.attachEvent)
element.attachEvent("on" + type, handler);
else
element["on" + type] = handler;
},
removeHandler: function (element, type, handler) {
if(element.removeEventListener)
element.removeEventListener(type, handler, false);
else if(element.detachEvent)
element.detachEvent("on" + type, handler);
else
element["on" + type] = handler;
},
/**
* 监听触摸的方向
* @param target 要绑定监听的目标元素
* @param isPreventDefault 是否屏蔽掉触摸滑动的默认行为(例如页面的上下滚动,缩放等)
* @param upCallback 向上滑动的监听回调(若不关心,可以不传,或传false)
* @param rightCallback 向右滑动的监听回调(若不关心,可以不传,或传false)
* @param downCallback 向下滑动的监听回调(若不关心,可以不传,或传false)
* @param leftCallback 向左滑动的监听回调(若不关心,可以不传,或传false)
*/
listenTouchDirection: function (target, isPreventDefault, upCallback, rightCallback, downCallback, leftCallback) {
this.addHandler(target, "touchstart", handleTouchEvent);
this.addHandler(target, "touchend", handleTouchEvent);
this.addHandler(target, "touchmove", handleTouchEvent);
var startX;
var startY;
function handleTouchEvent(event) {
switch (event.type){
case "touchstart":
startX = event.touches[0].pageX;
startY = event.touches[0].pageY;
break;
case "touchend":
var spanX = event.changedTouches[0].pageX - startX;
var spanY = event.changedTouches[0].pageY - startY;
//认定为垂直方向滑动
if(spanY > 0){ //向下
if(downCallback) downCallback();
} else if (spanY < 0) {//向上
if(upCallback) upCallback();
}
//认定为水平方向滑动
if(Math.abs(spanX) > Math.abs(spanY)) {
if(spanX > 30){ //向右
if(rightCallback) rightCallback();
} else if(spanX < -30){ //向左
if(leftCallback) leftCallback();
}
}
break;
case "touchmove":
//阻止默认行为
if(isPreventDefault)
event.preventDefault();
break;
}
}
}
};
二、使用步骤
1.全局定义次方法
main.js
import Vue from 'vue'
import { EventUtil } from "./common/eventUtil.js";
Vue.prototype.$EventUtil = EventUtil;
2.在组件中使用
const Ele = Array.from(document.getElementsByClassName("swiper-slide"));
Ele.forEach(e => {
this.$EventUtil.listenTouchDirection(e, false, false, () => {this.moreSetPrevClick();}, false, () => {this.moreSetNextClick();});
});
总结
有问题请留言