|
@@ -135,45 +135,60 @@ import page13 from './page13.vue';
|
|
|
const main = ref(null);
|
|
|
const page = ref(0);
|
|
|
const isUp = ref(true);
|
|
|
+let startStats = 0;
|
|
|
+let time = Date.now();
|
|
|
let startY = 0;
|
|
|
const isChangePage = cha => {
|
|
|
+ let out = false; // false 不能翻页 true 能翻页
|
|
|
let sondiv = getinnerele();
|
|
|
// 视口高度 main.value.offsetHeight
|
|
|
// 内容高度 sondiv.offsetHeight
|
|
|
|
|
|
// 视口基本大于内容 则可以翻页
|
|
|
+ /**
|
|
|
+ * 初始化y值或结束y值不在翻页区间,则不能翻页
|
|
|
+ * 翻页区间是scrolltop 10 以内 和 底部剩余空间10 以内
|
|
|
+ */
|
|
|
let h = main.value.offsetHeight + main.value.scrollTop;
|
|
|
-
|
|
|
- if (cha < 10 && main.value.scrollTop < 10) return true;
|
|
|
- if (h - sondiv.offsetHeight >= -10) return true;
|
|
|
- return false;
|
|
|
+ // if (Math.pow(cha, 2) < 6400) out = true;
|
|
|
+ let timeRange = Date.now() - time > 50;
|
|
|
+ if (cha < -80 && startStats < 10 && timeRange) {
|
|
|
+ // 下滑
|
|
|
+ /**
|
|
|
+ * 下滑初始滚动小于10 -翻页
|
|
|
+ */
|
|
|
+ out = true;
|
|
|
+ } else {
|
|
|
+ // 上滑
|
|
|
+ /**
|
|
|
+ * 下滑剩余小于10 -翻页
|
|
|
+ */
|
|
|
+ if (sondiv.offsetHeight - h < 10 && cha > 80 && timeRange) out = true;
|
|
|
+ }
|
|
|
+ return out;
|
|
|
};
|
|
|
-let time = Date.now();
|
|
|
-let c = 0;
|
|
|
const touchstart = e => {
|
|
|
time = Date.now();
|
|
|
- c = main.value.scrollTop < 5;
|
|
|
+ startStats = main.value.scrollTop;
|
|
|
startY = e.changedTouches[0].clientY;
|
|
|
};
|
|
|
|
|
|
const touchend = e => {
|
|
|
const cha = startY - e.changedTouches[0].clientY;
|
|
|
- if (Date.now() - time < 50) return;
|
|
|
if (!isChangePage(cha)) return;
|
|
|
// cha > 0 向上滑动手指
|
|
|
// cha < 0 向下滑动手指
|
|
|
// 初始位置滚动为0的,则判断距离25即可
|
|
|
- if (Math.pow(cha, 2) < 6400 && !c) return;
|
|
|
+ console.log(cha);
|
|
|
// 距离足够则滑动到下一页;
|
|
|
let n = cha > 0 ? 1 : -1;
|
|
|
let dn = n + page.value;
|
|
|
let len = 11;
|
|
|
- isUp.value = n === 1;
|
|
|
// if (dn < 0) dn = len;
|
|
|
// if (dn > len) dn = 0;
|
|
|
if (dn < 0) return;
|
|
|
if (dn > len) return;
|
|
|
-
|
|
|
+ isUp.value = n === 1;
|
|
|
page.value = dn;
|
|
|
nextTick(() => {
|
|
|
main.value.scrollTop = 0;
|
|
@@ -190,14 +205,7 @@ const touchmove = e => {
|
|
|
|
|
|
const getinnerele = () => {
|
|
|
let nodes = main.value.childNodes || [];
|
|
|
- let sondiv = null;
|
|
|
- for (let i = 0; i < nodes.length; i++) {
|
|
|
- const ele = nodes[i];
|
|
|
- if (ele.localName !== 'div') continue;
|
|
|
- if (sondiv) break;
|
|
|
- sondiv = ele;
|
|
|
- }
|
|
|
- return sondiv;
|
|
|
+ return nodes[page.value];
|
|
|
};
|
|
|
</script>
|
|
|
<style lang="scss">
|