首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js触摸滑动

JavaScript 触摸滑动是一种常见的前端交互技术,它允许用户通过触摸屏幕来滑动页面或元素。以下是关于 JavaScript 触摸滑动的基础概念、优势、类型、应用场景以及常见问题及解决方法。

基础概念

触摸滑动主要依赖于以下几个事件:

  • touchstart:当手指触摸屏幕时触发。
  • touchmove:当手指在屏幕上移动时触发。
  • touchend:当手指从屏幕上抬起时触发。

优势

  1. 用户体验:触摸滑动提供了直观且自然的交互方式,特别适用于移动设备。
  2. 性能:相比于传统的鼠标事件,触摸事件响应更快,用户体验更好。
  3. 灵活性:可以自定义滑动的行为和效果,满足不同的设计需求。

类型

  1. 水平滑动:用户可以在水平方向上滑动页面或元素。
  2. 垂直滑动:用户可以在垂直方向上滑动页面或元素。
  3. 多指滑动:支持多指操作,如缩放、旋转等。

应用场景

  • 图片轮播:在移动端网站或应用中,常用于展示多张图片。
  • 滚动页面:优化长页面的滚动体验。
  • 滑动菜单:实现侧边栏菜单的滑动显示和隐藏。
  • 游戏交互:在移动游戏中提供流畅的操作体验。

示例代码

以下是一个简单的水平滑动示例:

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Touch Slider</title>
    <style>
        #slider {
            width: 100%;
            overflow: hidden;
            white-space: nowrap;
            position: relative;
        }
        .slide {
            display: inline-block;
            width: 100%;
            height: 200px;
            background-color: #ccc;
            margin-right: -100%;
        }
    </style>
</head>
<body>
    <div id="slider">
        <div class="slide" style="background-color: red;"></div>
        <div class="slide" style="background-color: green;"></div>
        <div class="slide" style="background-color: blue;"></div>
    </div>

    <script>
        const slider = document.getElementById('slider');
        let startX = 0;
        let currentTranslate = 0;
        let prevTranslate = 0;
        let animationID = 0;
        let currentIndex = 0;

        slider.addEventListener('touchstart', touchStart);
        slider.addEventListener('touchmove', touchMove);
        slider.addEventListener('touchend', touchEnd);

        function touchStart(event) {
            startX = event.touches[0].clientX;
            cancelAnimationFrame(animationID);
        }

        function touchMove(event) {
            const currentX = event.touches[0].clientX;
            currentTranslate = prevTranslate + currentX - startX;
        }

        function touchEnd() {
            const movedBy = currentTranslate - prevTranslate;
            if (movedBy < -100 && currentIndex < 2) currentIndex += 1;
            if (movedBy > 100 && currentIndex > 0) currentIndex -= 1;
            prevTranslate = currentTranslate;
            setSliderPosition();
        }

        function setSliderPosition() {
            slider.style.transform = `translateX(${currentIndex * -100}%)`;
        }
    </script>
</body>
</html>

常见问题及解决方法

  1. 滑动不流畅
    • 原因:可能是由于页面重绘或回流导致的性能问题。
    • 解决方法:使用 requestAnimationFrame 来优化动画性能,减少 DOM 操作。
  • 触摸事件与鼠标事件冲突
    • 原因:在某些情况下,触摸事件和鼠标事件可能会同时触发,导致行为不一致。
    • 解决方法:可以通过检测设备类型来决定使用哪种事件监听器,或者在触摸事件处理函数中调用 event.preventDefault() 来阻止默认行为。
  • 多指操作问题
    • 原因:多指操作可能会导致复杂的交互逻辑难以处理。
    • 解决方法:使用 event.touches 数组来获取所有触摸点的信息,并根据具体需求编写相应的逻辑。

通过以上内容,你应该对 JavaScript 触摸滑动有了全面的了解,并能够在实际项目中应用这些知识。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Flutter完整开发实战详解(十三、全面深入触摸和滑动原理)

    本篇将带你深入了解 Flutter 中的手势事件传递、事件分发、事件冲突竞争,滑动流畅等等的原理,帮你构建一个完整的 Flutter 闭环手势知识体系,这也许是目前最全面的手势事件和滑动源码的深入文章了...Flutter 中默认情况下,以 Android 为例,所有的事件都是起原生源于 io.flutter.view.FlutterView 这个 SurfaceView 的子类,整个触摸手势事件实质上经历了...更具体为一个场景问题就是:比如一个列表页面内,存在上下滑动和 Item 点击时,Flutter 要怎么分配手势事件? 这就涉及到事件的竞争了。 核心要来了,高能预警!!!...2.3 滑动事件 滑动事件也是需要在 Down 流程中 addPointer ,然后 MOVE 流程中,通过在 PointerRouter.route 之后执行 DragGestureRecognizer.handleEvent...ListView 内部 RenderViewportBase 中,这个 ViewportOffset 是通过 _offset.addListener(markNeedsLayout); 绑定的,so ,触摸滑动导致

    1.7K30

    原生JS实现移动端滑动反弹

    什么是 Touch滑动?就是类似于 PC端的滚动事件,但是在移动端是没有滚动事件的,所以就要用到 Touch事件结合 js去实现,效果如下: ? 1. 准备工作 什么是移动端的 Touch事件?...三种返回对象的区别 其实这三种返回的对象,都是表示用户触摸事件时的手指信息,之所以是一个伪数组,是因为有可能出现多指同时触摸,但是在实际工作中一般不去考虑多指的情况。...brown">列表十       css部分 在列表的父盒子上设定一个 overflow:hidden属性,使超出盒子部分的列表暂时隐藏掉,后面会通过 js...首次滑动 手指触摸到列表向下滑动的时候,列表应该跟着向下滑动,当手指离开屏幕的时候,列表应该停在滑动的位置。这里就会用到上面准备阶段的知识点了,不明白的可以参考上面的概念。...先来张示意图,怎么通过 js 让列表滑动起来 ?

    10.4K20

    JS滑动滚动的n种方式

    JS滑动滚动的n种方式 # 阅读本文,你将: 了解原生JS实现页面滚动的多种方式 了解这多种方式可以对应上的效果以及推荐的应用场景 多个滑动方面的坑以及相应(如果有)的解决方案 获得一些有用的函数...1.3 浏览器的支持度 1.4 示例与推荐使用场景 原始位置图 我们定位如图红框的元素,从顶部开始示例 1.4.1 scrollIntoVIew() 页面滑动至父级容器,但是子项并没有被滑动到可视区域...1.4.2 scrollIntoView(false) 页面滑动到底部,该元素从下方进入可视区域 1.4.3 scrollIntoView({block:"center",inline:"center..."}) 仍然是没有看到我们要呈现的元素,疑似原因为我们的选定元素的爷爷级元素才是可滑动的 1.5 补充 scrollIntoView和scrollIntoViewIfNeeded的区别在于,第一前者的支持性较高...有出现父容器滑动不到指定地方的问题,可以两次调用api(注意异步) 2 设置scrollTop/scrollLeft 2.1 基本用法 element.scrollTop=100; 当我们获取到一个元素

    6.6K10

    css+js实现左右滑动卡片组件

    最近的一个活动页面需要做一个可以左右滑动的抽签效果,故通过用css的transform属性和js结合来模拟可以无限滚动的效果。...而对于用户这一操作是无感知的,认为已经滑动到了新的位置。 3.滑动过程实现 a....目标位移与帧位移 为了做出滑动后到停留位置的缓动效果,所以当用户左右滑动屏幕时,会记录滑动距离,计算出卡片该到的目标位移位置,目标位移位置是有规则的,因为这里有10张卡片均分宽度,位置必须是(100%/...连续滑动判断 当在上次滑动动画还未播放结束时用户又进行了第二次滑动时,需要执行一下操作:     1)....判断滑动时机处于上次滑动手指已离开屏幕但动画还未结束,此时需要记录两个flag,一个是ani_move,记录动画是否仍在进行,fingerTouch记录手指是否停留屏幕。     2).

    30.7K102

    爬虫 | JS逆向某验滑动加密分析

    今天给大家来分析并还原某验的 JS 加密,做过爬虫的应该都知道遇到过这个验证码,如果你还没遇到以后你会碰到的相信我 话不多说,时间宝贵,进入正题!...抓包 进入官网,点击选择今天的主题滑动验证,其他验证类型的加密大同小异,只要你掌握了下面的方法! ? 点击按钮抓包,随意拖动一下,请求数据包如下 ?...', code, (err)=>{}); 注意 jscode 就是之前扣下来的 JS 代码, 最后将还原后的代码写入到 decode_slide.js 文件中 接下来是混淆数组的还原。...观察调试代码,所有的数组都是基于 JS 文件中开头的大数组 KBBji.$_Co,同时将该数组赋值给很多变量,这些变量名都是随机生成的。...接下来上另一个神器 Reres, 它的作用是将请求映射到本地,即你可以用本地 JS 来代替远程 JS 文件。

    3.2K10

    WPF 触摸失效 试试重启触摸

    在使用一些诡异的系统以及诡异的触摸框的时候,也许会出现 WPF 程序触摸失效,失效的本质原因是 Win32 层应用触摸失效。...也许出现的问题是某个窗口设置 TopMost 然后插拔一些触摸设备等,这些行为,如果触摸设备太过诡异,也许就会让 Win32 窗口触摸失效。...而我自己基于开源的 WPF 框架也定制了可以从触摸线程都重启的强力版本,当然了,这个版本非开源的版本 在使用本文的方法之前,请确定你对触摸有足够的了解 如果你对触摸的了解很少,那么我推荐你先看以下博客...WPF 触摸屏应用需要了解的知识 浅谈 Windows 桌面端触摸架构演进 WPF 客户端开发需要知道的触摸失效问题 对于 Win32 应用来说,如果应用的触摸失效了,可以的解决方法是重新注册一次触摸,...关于在 WPF 中的触摸调用细节请看 WPF 触摸到事件 和 WPF 通过 InputManager 模拟调度触摸事件 重启注册触摸的步骤就是先反注册,然后再次注册。

    1.3K40

    爬虫 | JS逆向某验滑动加密(二)

    上篇文章给大家分析还原了某验滑动的混淆代码,然后后台很多人在问后面的加密以及整个流程是啥,所以今天索性就把整个加密都弄出来吧! 话不多说,时间宝贵,开干! 回到之前 w 的加密处 ?...n["lastPoint"]["y"] : n["$_DDIm"] - t["$_CCBw"]() / a; 不难猜出,这个 _, u 分别对应我们滑动时候的 x, y 轴的坐标。...第三个参数,是滑动的时间。所以关键在第二个参数 l.. 控制台分别输出看下是什么东东 ? 后面两个有木有很眼熟啊。就是前面请求返回的 data ? 那么关键点就剩下一个了,进去瞅瞅 ?...这个 t 就是我们滑动的一个轨迹...,通过这个函数将轨迹数组变成了一个字符串。 将函数扣下来,前面那一坨数组赋值的可以删掉,因为我们已经还原了,看着碍事 ? 函数扣下来后试着运行一下,缺啥补啥。...Js 加密部分基本上就都完成了,剩下的就是根据 Network 中的请求流发请求就好了。 以上就是某验滑动的整个流程了,是不是 so easy !

    2.4K20

    WPF 插拔触摸设备触摸失效

    最近使用 WPF 程序,在不停插拔触摸设备会让 WPF 程序触摸失效。通过分析 WPF 源代码可以找到 WPF 触摸失效的原因。...获取触摸流程循环用于拿到用户触摸相关。很多的时候,在用户正常使用的流程只是运行初始化流程循环一次,之后在用户触摸的时候就通过获取触摸流程循环拿到值。...因为 GetPenEvent 和 GetPenEventMultiple 都只有在触摸屏收到触摸信息或者 _pimcResetHandle 被释放会返回,而在用户拔出触摸屏时,触摸屏是没有收到触摸信息,...因为在用户插入触摸屏时触发了 TabletAdded 消息,在之后用户触摸时不会有其他的插拔触摸相关消息。...实际上这里在 _handles 没有值就是用户没有触摸屏,用户插入触摸屏的时间是很少的,没有几个用户一天没事都在插入拔出触摸屏,所以在用户插入触摸屏时再创建一个新的线程,在用户拔出触摸屏去掉这个线程是可以的

    1.7K10

    js刷LeetCode拿offer之滑动窗口

    本篇主要介绍滑动窗口算法以及相关题型的解题思路,第二类题型会放在下一篇中讲解。...滑动窗口算法具体的表现形式为:左右指针始终维护一个满足条件的窗口值,右指针负责向前遍历,当窗口值不满足条件时,将左指针指向的元素移出窗口,同时向前移动左指针。  ...下面,结合实际的题目来理解如何使用滑动窗口算法。二、567. 字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。...这道题很明显符合滑动窗口算法的特征:维护一个至多有两种水果的窗口。  ...,重新构成“山脉”;窗口移动过程中遇到递减序列时,如果此时窗口中不包含递增序列,同样需要向前移动左指针,重新构成“山脉”;图片利用滑动窗口算法成功地将时间复杂度降低为 O(n)。

    3.2K30

    WPF 从触摸消息转触摸事件

    在 WPF 程序可能因为一些坑让程序触摸失效,如果此时还可以收到系统的触摸消息,那么可以通过从触摸消息转触摸事件解决程序触摸失效但不适合所有触摸失效程序 在 WPF 的触摸代码写的不是很清真,特别是触摸到事件可能出现一些坑...,如WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 和 WPF 插拔触摸设备触摸失效 等,有时候在开机的过程,如果启动快了,触摸设备还没准备好,刚好在 WPF 初始化的过程 USB 触摸设备才准备好...因为在希沃的设备上主要是触摸屏幕,用户不会有鼠标,如果出现了初始化的过程刚好就是 USB 准备好,那么这个程序将收不到任何触摸事件 在程序启动的时候,可以通过获得触摸精度和触摸点判断当前是否存在触摸设备...但是还可以收到系统的触摸消息,可以通过本文的黑科技收到触摸 在 WPF 的框架,触摸是从 PENIMC 里面获取的,如果通过自己创建一个模拟的触摸设备,请看 WPF 模拟触摸设备 也可以做到模拟一个触摸...在默认的 WPF 程序是收不到系统的触摸消息,需要禁用实时触摸才可以收到触摸消息,在 Win7 和之后都可以从系统收到 WM_TOUCH 消息,通过这个消息可以解析当前的触摸点和触摸面积,通过这两个值可以用来模拟触摸走原有的

    1.2K20
    领券