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

js+触摸屏滑动

在JavaScript中实现触摸屏滑动功能,通常涉及到触摸事件(touchstarttouchmovetouchend)的监听和处理。以下是基础概念及相关实现细节:

基础概念

  1. 触摸事件
    • touchstart:当手指触摸屏幕时触发。
    • touchmove:当手指在屏幕上滑动时触发。
    • touchend:当手指离开屏幕时触发。
  • 触摸事件对象
    • touches:当前屏幕上所有触摸点的集合。
    • targetTouches:当前目标元素上所有触摸点的集合。
    • changedTouches:自上次触摸事件以来发生变化的触摸点的集合。

实现滑动功能

以下是一个简单的示例代码,展示如何实现一个基本的左右滑动切换图片的功能:

代码语言: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;
            position: relative;
        }
        #slider img {
            width: 100%;
            display: none;
            position: absolute;
            top: 0;
            left: 0;
        }
        #slider img.active {
            display: block;
        }
    </style>
</head>
<body>
    <div id="slider">
        <img src="image1.jpg" alt="Image 1" class="active">
        <img src="image2.jpg" alt="Image 2">
        <img src="image3.jpg" alt="Image 3">
    </div>

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

        slider.addEventListener('touchstart', (e) => {
            startX = e.touches[0].clientX;
            isDragging = true;
        });

        slider.addEventListener('touchmove', (e) => {
            if (!isDragging) return;
            const currentX = e.touches[0].clientX;
            const diff = currentX - startX;
            currentTranslate = prevTranslate + diff;
            setSliderPosition();
        });

        slider.addEventListener('touchend', (e) => {
            if (!isDragging) return;
            const movedBy = currentTranslate - prevTranslate;
            if (movedBy < -100 && !slider.lastImageActive) {
                slideToNextImage();
            } else if (movedBy > 100 && !slider.firstImageActive) {
                slideToPrevImage();
            }
            resetPosition();
        });

        function setSliderPosition() {
            slider.style.transform = `translateX(${currentTranslate}px)`;
        }

        function slideToNextImage() {
            const activeImg = document.querySelector('#slider img.active');
            const nextImg = activeImg.nextElementSibling || document.querySelector('#slider img:first-child');
            activeImg.classList.remove('active');
            nextImg.classList.add('active');
            prevTranslate -= slider.offsetWidth;
            setSliderPosition();
        }

        function slideToPrevImage() {
            const activeImg = document.querySelector('#slider img.active');
            const prevImg = activeImg.previousElementSibling || document.querySelector('#slider img:last-child');
            activeImg.classList.remove('active');
            prevImg.classList.add('active');
            prevTranslate += slider.offsetWidth;
            setSliderPosition();
        }

        function resetPosition() {
            isDragging = false;
            currentTranslate = prevTranslate;
            setSliderPosition();
        }
    </script>
</body>
</html>

优势

  • 响应迅速:触摸事件直接在移动设备上处理,响应速度快。
  • 用户体验好:滑动操作符合用户的直觉,提升用户体验。

应用场景

  • 图片轮播:如示例代码所示。
  • 页面切换:在移动应用或网页中实现页面之间的滑动切换。
  • 列表滚动:优化长列表的滚动体验。

常见问题及解决方法

  1. 滑动不流畅
    • 原因:可能是由于频繁的重绘和回流导致的性能问题。
    • 解决方法:使用transform属性来移动元素,因为transform不会触发重绘和回流,性能更好。
  • 滑动距离计算不准确
    • 原因:可能是由于触摸事件的坐标计算不准确。
    • 解决方法:确保在touchstarttouchmove事件中使用相同的坐标系,并考虑设备的像素比。

通过以上方法,可以实现一个基本的触摸屏滑动功能,并根据具体需求进行优化和扩展。

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

相关·内容

  • 触摸屏工作原理

    这个电流分从触摸屏的四个电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。...当手触摸屏体的时候,由于手指与大地之间就相当于接了一个Cf的并联电容,如下图(3)所示。 ? 等效为如图(4)所示: ?...分区法: 将整个触摸屏物理分割成多个区域,由于每个区域确定一个操作,这样就可以避免鬼点的操作。 总结自电容的优点是简单、计算量小,满足X+Y的计算。...检测互电容大小时,横向的电极依次发出激励信号,纵向的所有电极同时接收信号,这样可以得到所有横向和纵向电极交汇点的电容值大小,即整个触摸屏的二维平面的电容大小。...根据触摸屏二维电容变化量数据(触摸后电容值减小),可以计算出每一个触摸点的坐标。因此,屏上即使有多个触摸点,也能计算出每个触摸点的真实坐标。 ?

    3.9K30

    触摸屏的发展预判

    一、触摸屏的性能比较 工业触摸屏工作在与外界完全隔离的环境中,它不怕灰尘、水气和油污,可以用任何物体来触摸,比较适合工业控制领域使用。...缺点是由于复合薄膜的外层采用塑料,太用力或使用锐器触摸可能划伤触摸屏。 电容式触摸屏的分辨率很高,透光率也不错,可以很好地满足各方面的要求,在公共场所常见的就是这种触摸屏。...表面声波触摸屏还具有第三轴(z轴),也就是压力轴—通过计算接收信号衰减处的衰减量可得到用户触摸屏幕的力量大小,最多可分为256级力度。...力量越大,接收信号波形上的衰减缺口也就越宽越深,在所有的触摸屏中,只有表面声波触摸屏具有感知触摸压力的性能。应用场合根据对触摸屏的结构、原理和性能特点的分析,不同触摸屏的适用场合。...可以预见,随着触摸屏技术的迅速发展,触摸屏的应用领域会越来越广,性能会越来越好。

    77250

    你无法检测到触摸屏

    设备宽度媒体查询 ¶ 手机拥有小屏幕,并且手机拥有触摸屏,所以小屏幕等于触摸屏,这正确吗?...这是动态的, Jim ¶ 一个触摸屏可以作为一个外围设备连接到另一个非触摸式笔记本电脑,或者一个 KVM 开关可以从非触摸屏切换到触摸屏。这可以在浏览器会话过程中的任何时间发生。...事件和交互 ¶ 所以你想要为你的幻灯效果和地图窗口部件设置滑动手势吗?这很酷。但是不要认为这意味着你不需要支持鼠标和键盘交互。...悬停状态的处理 ¶ 当前的触摸屏并不能传输鼠标/光标悬浮状态, 所以,最好调整我们对于触摸屏的UI设计,以便在触摸屏上能够继续使用。 当然,键盘也是不能悬停的。...关于布局,假设每个人都有触摸屏。鼠标用户们使用大的控件比触摸屏用户们使用小控件更加容易。悬停状态也是一样的。 关于事件和交互,假设任何人可能有触摸屏。

    1.9K20

    滑动窗口

    滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。...由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。参见滑动窗口如何根据网络拥塞发送数据仿真视频。...TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。...另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。...不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

    11210

    android m 滑动解锁,滑动解锁Slideunlock

    滑动解锁(Slideunlock)在之前的塞班机上可谓光茫四射,惹得一身荣耀,如今登入android市场,依然备受关注,多种解锁截屏法方式,满足不同人的需求。...软件介绍 滑动解锁(Slideunlock),一款仿Iphone又超越Iphone解锁和加锁的实用软件,华丽百变的UI,多种感应器加锁解锁功能,是您可以做到无需触碰手机即可轻松完成加锁或解锁操作。...更新说明 1.修改了图标,细化了滑动界面。 2.增加了解锁震动反馈。 3.增加了解锁提示字体颜色设置。 4.10秒钟不解锁自动锁屏。 功能介绍 1.一键加锁浮动按钮。...3.重力加速感应器翻转手机加锁,在约两秒钟内将手机翻转屏幕朝下再朝上翻转完成加解锁操作 4.仿iPhone滑动解锁,也可以启用系统屏幕锁,只是用本软件感应器和浮动按钮加锁,皮肤包是下一步开发的重点,目前暂时只集成一款常规皮肤...关闭方法:“系统设定->位置和安全->选择设备管理器”从中取消滑动解锁对应勾选(这个应该算是个玩android的小常识吧!)

    2.1K30

    微管滑动模型动画_滑动平均序列

    因为本人是自学深度学习的,有什么说的不对的地方望大神指出 指数加权平均算法的原理 TensorFlow中的滑动平均模型使用的是滑动平均(Moving Average)算法,又称为指数加权移动平均算法(exponenentially...然后说一下这个滑动平均模型和深度学习有什么关系:通常来说,我们的数据也会像上面的温度一样,具有不同的值,如果使用滑动平均模型,就可以使得整体数据变得更加平滑——这意味着数据的噪音会更少,而且不会出现异常值...滑动平均模型的代码实现 看到这里你应该大概了解了滑动平均模型和偏差修正到底是怎么回事了,接下来把这个想法对应到TensorFlow的代码中。...,步骤如下: 1、定义训练轮数step 2、然后定义滑动平均的类 3、给这个类指定需要用到滑动平均模型的变量(w和b) 4、执行操作,把变量变为指数加权平均值 # 1、定义训练的轮数...) # 2、给定滑动衰减率和训练轮数,初始化滑动平均类 # 定训练轮数的变量可以加快训练前期的迭代速度 variable_averages = tf.train.ExponentialMovingAverage

    84410
    领券