liyongli 1 жил өмнө
parent
commit
918c53f0a1
1 өөрчлөгдсөн 27 нэмэгдсэн , 19 устгасан
  1. 27 19
      src/view/schedule/index.vue

+ 27 - 19
src/view/schedule/index.vue

@@ -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">