自学内容网 自学内容网

uniapp 左右滑动切换Tab

各种开发会遇到很多奇葩的需求,今天这个是在页面 左右滑动,然后自动去切换Tab

   <view
      @touchstart="touchStart"
      @touchcancel="touchCancel"
      @touchend="touchEnd"
    >
      <components is="xxx"/>
    </view>
//------------------- 滑动tab -------------------
const minOffset = ref(50);
const minTime = ref(60);
const startX = ref(0);
const startY = ref(0);
const startTime = ref(0);
const touchStart = (e: any) => {
  // console.log("滑动开始", e);
  startX.value = e.touches[0].pageX; // 获取触摸时的x坐标
  startY.value = e.touches[0].pageY; // 获取触摸时的x坐标
  startTime.value = new Date().getTime(); //获取毫秒数
};
const touchCancel = (e: any) => {
  startX.value = 0; //开始时的X坐标
  startY.value = 0; //开始时的Y坐标
  startTime.value = 0; //开始时的毫秒数
};
const touchEnd = (e: any) => {
  var endX = e.changedTouches[0].pageX;
  var endY = e.changedTouches[0].pageY;
  var touchTime = new Date().getTime() - startTime.value; //计算滑动时间
  //开始判断
  //1.判断时间是否符合
  if (touchTime >= minTime.value) {
    //2.判断偏移量:分X、Y
    var xOffset = endX - startX.value;
    var yOffset = endY - startY.value;
    // console.log('xOffset', xOffset)
    // console.log('yOffset', yOffset)
    //①条件1(偏移量x或者y要大于最小偏移量)
    //②条件2(可以判断出是左右滑动还是上下滑动)
    if (
      Math.abs(xOffset) >= Math.abs(yOffset) &&
      Math.abs(xOffset) >= minOffset.value
    ) {
      //左右滑动
      //③条件3(判断偏移量的正负)
      if (xOffset < 0) {
        // console.log("向左滑动 下一页");
        tabRef.value.leftSlide();
      } else {
        // console.log("向右滑动");
        tabRef.value.rightSlide();
      }
    } else if (
      Math.abs(xOffset) < Math.abs(yOffset) &&
      Math.abs(yOffset) >= minOffset.value
    ) {
      //上下滑动
      //③条件3(判断偏移量的正负)
      if (yOffset < 0) {
        // console.log('向上滑动')
      } else {
        // console.log('向下滑动')
      }
    }
  } else {
    // console.log('滑动时间过短', touchTime)
  }
};

原文地址:https://blog.csdn.net/qq_38866594/article/details/145120350

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!