let myTouch =
`
<div class="slide" ref='slide' @touchstart='touchStart' @touchmove='touchMove' @touchend='touchEnd' :style="{transform: translateX}">
<slot></slot>
</div>
`;
Vue.component('my-touch', {
template: myTouch,
name: 'myTouch',
data: function() {
return {
startX: 0,
endX: 0,
disX: 0,
lastX: 0,
lastY: 0,
triggerDistance: 55,
translateX: 'translateX(0px)'
}
},
methods: {
touchStart: function(ev) {
ev = ev || event;
if (ev.touches.length == 1) {
this.startX = this.lastX = ev.touches[0].clientX;
this.startY = this.lastY = ev.touches[0].clientY;
}
},
touchMove: function(ev) {
ev = ev || event;
if (ev.touches.length == 1) {
this.lastX = ev.touches[0].clientX;
this.lastY = ev.touches[0].clientY;
}
},
touchEnd: function(ev) {
ev = ev || event;
if (ev.changedTouches.length == 1) {
let endX = ev.changedTouches[0].clientX;
let endY = ev.changedTouches[0].clientY;
this.disX = endX - this.startX;
this.disY = endY - this.startY;
if (Math.abs(this.disX) >= this.triggerDistance || Math.abs(this.disY) >= this.triggerDistance ) {
if (Math.abs(this.disX) > Math.abs(this.disY)) {
if (this.disX < 0) {
console.log('左滑');
this.$emit('slide', 'left')
} else {
console.log('右滑');
this.$emit('slide', 'right')
}
} else {
if (this.disY < 0) {
console.log('上滑');
this.$emit('slide', 'up')
} else {
console.log('下滑');
this.$emit('slide', 'down')
}
}
}
}
}
}
})
slide(param){
let me = this;
if(param === "up"){
me.isShowSearch = false;
me.pageListStyle = {
"margin-top": "44px"
}
}
if(param === "down"){
me.isShowSearch = true;
me.pageListStyle = {
"margin-top": "80px"
}
}
}
getDocumentHeight () {
const body = document.body
const html = document.documentElement
const height = Math.max(
body.offsetHeight,
body.scrollHeight,
html.clientHeight,
html.offsetHeight,
html.scrollHeight
)
return height
},
getScrollTop () {
const scrollTop =(document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop
return scrollTop
},
getClient() {
const client = {}
client.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth
client.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
return client
},
slide(param) {
let me = this;
if (param === "up") {
me.isShowSearch = false;
me.pageListStyle = {
"margin-top": "44px"
}
if (me.getDocumentHeight() - me.getScrollTop() <= me.getClient().height){
me.pageIndex++;
me.jumpPage();
}
}
if (param === "down") {
me.isShowSearch = true;
me.pageListStyle = {
"margin-top": "80px"
}
debugger;
if (me.getScrollTop() == 0) {
me.pageIndex = 0;
me.jumpPage();
}
}
},