swiper组件与ios的物理返回冲突问题解决办法

在iOS上,由于左滑手势会触发浏览器返回,与swiper组件冲突。通过监听swiper的touchstart和touchmove事件,阻止默认的左滑行为,可以解决这一问题。另外,可以使用swiper的edgeSwipeDetectionAPI来实现屏幕边缘拖动触发返回事件,而不在边缘处切换页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 iOS 上,左滑手势会触发浏览器的返回操作,而 swiper 组件的左右滑动也会触发左滑手势,从而导致冲突。为了解决这个问题,你可以在 swiper 组件上添加 touchstart 和 touchmove 事件的监听,然后在事件处理函数中禁止左滑手势的默认行为。具体做法如下:

// 获取 swiper 元素
const swiperEl = document.querySelector('.swiper-container');

// 添加 touchstart 和 touchmove 事件的监听
swiperEl.addEventListener('touchstart', touchStartHandler);
swiperEl.addEventListener('touchmove', touchMoveHandler);

// touchstart 事件处理函数
function touchStartHandler(e) {
  // 记录初始触摸位置
  this.touchStartX = e.touches[0].pageX;
  this.touchStartY = e.touches[0].pageY;
}

// touchmove 事件处理函数
function touchMoveHandler(e) {
  // 计算触摸位移
  const deltaX = e.touches[0].pageX - this.touchStartX;
  const deltaY = e.touches[0].pageY - this.touchStartY;
  // 判断是否为左滑手势
  if (deltaX < 0 && Math.abs(deltaX) > Math.abs(deltaY)) {
    // 阻止浏览器默认行为
    e.preventDefault();
  }
}

通过上述代码,你可以禁止 swiper 组件左滑手势的默认行为,以避免与 iOS 的左滑物理返回冲突。

此处为分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

收到客户反馈,想实现屏幕边缘拖动触发返回事件并非切换上下页,此时可使用swiper自带API:edgeSwipeDetection。

设置为true开启屏幕边缘探测。如果拖动是从屏幕边缘(默认20px)开始则不触发swiper,这样当你在屏幕边缘滑动Swiper时,则可以返回上一页(history.back)或切换至下一页。
如设置为'prevent'则禁止系统的返回上一页功能。(6.4.6)
*即使不开启此功能,ios设备在0px边缘拖动也有切换上下页功能。(此段落摘自swiper官网)
使用方法如下:

  var mySwiper = new Swiper('.swiper', {
    edgeSwipeDetection: true,
  })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值