0

0

解决Swiper在移动端水平滚动时垂直页面滚动的问题

碧海醫心

碧海醫心

发布时间:2025-10-12 10:39:26

|

684人浏览过

|

来源于php中文网

原创

 解决Swiper在移动端水平滚动时垂直页面滚动的问题

本文针对移动端(尤其是ios)上使用swiper组件时,水平滑动可能触发垂直页面滚动的问题,提供了一种解决方案。通过分析问题原因,并结合swiper的配置和事件处理,最终确认该问题在ios 16.x版本中已得到修复。同时,也为遇到类似问题的开发者提供排查思路和潜在的解决方向。

在使用Swiper组件构建移动端页面时,一个常见的问题是当用户在水平滑动Swiper时,页面可能会出现不期望的垂直滚动。尤其是在iOS设备上,这个问题更为明显。这会严重影响用户体验,使得页面操作不流畅。 **问题分析** 问题的根源在于触摸事件的传播和处理。当用户在Swiper区域进行滑动操作时,浏览器会同时检测水平和垂直方向的滑动。如果滑动角度略微偏离水平方向,或者滑动距离较短,浏览器可能会错误地触发垂直滚动。 **解决方案** 虽然问题的提问者最终发现该问题在iOS 16.x版本中已得到修复,但在之前的版本中,或在其他特定场景下,仍然可能遇到类似问题。以下是一些可以尝试的解决方案: 1. **Swiper配置调整:** * `shortSwipes` 和 `longSwipes`: 尝试调整这两个参数,控制短距离和长距离滑动的灵敏度。虽然提问者已经尝试过,但不同的数值组合可能会产生不同的效果。 * `touchRatio`: 调整触摸比例,控制触摸滑动的距离与Swiper滑动的距离之间的关系。 * `threshold`: 设置触发滑动操作的最小距离。 2. **CSS样式调整:** * `touch-action: pan-y;`: 将此样式应用于Swiper容器,可以明确告诉浏览器,该区域主要处理垂直方向的滑动。 * `overscroll-behavior: contain;`: 阻止滚动链,防止滚动溢出到父元素。 3. **事件监听和处理:** * **`onTouchStart` 事件:** 在`onTouchStart`事件中,可以记录触摸开始时的坐标,然后在`onTouchMove`事件中计算滑动方向。如果滑动方向偏向垂直方向,则阻止默认的滚动行为。 ```javascript let startY; const handleTouchStart = (event) => { startY = event.touches[0].clientY; }; const handleTouchMove = (event) => { const currentY = event.touches[0].clientY; const deltaY = Math.abs(currentY - startY); const deltaX = Math.abs(event.touches[0].clientX - event.touches[0].clientX); //假设有clientX //如果垂直方向滑动明显大于水平方向,则阻止默认滚动 if (deltaY > deltaX && deltaY > 10) { // 10 是一个阈值,可以根据实际情况调整 event.preventDefault(); } };
*   **`preventDefault` 的使用:**  需要谨慎使用`preventDefault`,因为它会阻止元素的默认行为,可能会影响其他功能的正常使用。
  1. Swiper事件结合状态控制:

    提问者使用onBeforeTransitionStart和onTransitionEnd结合mobileScrollLock状态来尝试锁定滚动,这是一个很好的思路。可以进一步优化,例如:

    • 在滑动开始时,记录当前的滚动位置。
    • 在滑动过程中,阻止垂直滚动。
    • 在滑动结束后,恢复到之前的滚动位置。
    import { useState, useRef } from 'react';
    import { Swiper, SwiperSlide } from 'swiper/react';
    import 'swiper/css';
    
    function MySwiper() {
      const [isSwiping, setIsSwiping] = useState(false);
      const scrollPosition = useRef(0);
    
      const handleTouchStart = () => {
        scrollPosition.current = window.pageYOffset;
        setIsSwiping(true);
      };
    
      const handleTouchMove = (e) => {
        if (isSwiping) {
          e.preventDefault(); // 阻止默认滚动
          window.scrollTo(0, scrollPosition.current); // 保持滚动位置
        }
      };
    
      const handleTouchEnd = () => {
        setIsSwiping(false);
      };
    
      return (
        <div
          onTouchStart={handleTouchStart}
          onTouchMove={handleTouchMove}
          onTouchEnd={handleTouchEnd}
        >
          <Swiper /* Swiper配置 */ >
            {/* Swiper slides */}
          </Swiper>
        </div>
      );
    }
    
    export default MySwiper;

注意事项

智川X-Agent
智川X-Agent

中科闻歌推出的一站式AI智能体开发平台

下载
  • 设备和浏览器兼容性: 不同的设备和浏览器对触摸事件的处理方式可能不同。因此,需要进行充分的测试,以确保解决方案在各种环境下都能正常工作。
  • 用户体验: 在阻止默认滚动行为时,需要注意用户体验。避免过度阻止滚动,以免影响用户的正常操作。

总结

解决Swiper在移动端水平滚动时垂直页面滚动的问题,需要综合考虑Swiper的配置、CSS样式和事件处理。 虽然该问题可能在特定版本中得到修复,但了解这些解决方案仍然有助于应对其他类似的触摸事件冲突问题。 重要的是,在解决问题的过程中,要充分考虑用户体验,并进行充分的测试。

					

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号