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

js手指滑动进度条

在JavaScript中实现手指滑动进度条的功能,通常涉及到HTML、CSS和JavaScript三个方面的知识。

基础概念

  1. HTML: 创建进度条的结构。
  2. CSS: 设计进度条的样式。
  3. JavaScript: 实现滑动交互逻辑。

优势

  • 用户友好:提供直观的控制方式。
  • 实时反馈:用户可以立即看到滑动的效果。
  • 可定制性:可以根据需求调整进度条的外观和行为。

类型

  • 线性进度条:最常见的形式,通常显示为水平或垂直的条形。
  • 循环进度条:表示任务的循环或重复状态。
  • 指示器进度条:用于显示当前状态或进度。

应用场景

  • 音乐播放器:控制音乐的播放进度。
  • 视频播放器:调整视频的播放位置。
  • 文件上传:显示上传进度。
  • 任何需要展示进度的场景。

实现手指滑动进度条

  1. HTML:
代码语言:txt
复制
<div class="progress-container">
    <div class="progress-bar" id="progressBar"></div>
</div>
  1. CSS:
代码语言:txt
复制
.progress-container {
    width: 100%;
    height: 20px;
    background-color: #eee;
    position: relative;
}

.progress-bar {
    height: 100%;
    width: 0%;
    background-color: #007bff;
    position: absolute;
    top: 0;
    left: 0;
}
  1. JavaScript: 我们需要监听触摸事件(touchstart, touchmove, touchend)来实现滑动功能。
代码语言:txt
复制
const progressBar = document.getElementById('progressBar');
let startX = 0;
let currentX = 0;

// 获取进度条容器的宽度
const containerWidth = document.querySelector('.progress-container').offsetWidth;

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

progressBar.addEventListener('touchmove', (e) => {
    currentX = e.touches[0].clientX;
    const deltaX = currentX - startX;
    let newWidth = Math.max(0, Math.min(containerWidth, progressBar.offsetWidth + deltaX));
    progressBar.style.width = newWidth + 'px';
    // 可以根据newWidth/containerWidth计算进度百分比
});

progressBar.addEventListener('touchend', () => {
    // 可以在这里处理滑动结束后的逻辑,比如更新播放位置等
});

常见问题及解决方法

  1. 滑动不流畅:可能是由于浏览器的重绘和回流导致的。可以通过减少DOM操作、使用transform属性等方式优化。
  2. 滑动超出范围:在touchmove事件中,需要限制进度条的宽度在0到容器宽度之间。
  3. 不同设备的兼容性:可以使用pointer事件代替touch事件,以提高在不同设备上的兼容性。

注意:在实际应用中,可能还需要考虑更多的细节和边界情况,比如多点触控、滑动速度过快等。

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

相关·内容

  • 进度条滑动预览的四种方式

    本视频来自于Demuxed 2020,主讲人是来自Optus Sports 的Jeremy Brown,演讲内容是用于进度条滑动预览(trick view scrubbing)的四种方式。...首先,对于不了解进度条滑动预览(英文中称为Scrub thumbnail, thumb seeking, trick play…)的读者,这是我们在流媒体网站上使用进度条拖动视频内容进度时常见的一种预览辅助手段...首先,这些图像是在拖动进度条途中加载的,这往往是很短的一段时间,图像来不及传输则会造成严重的卡顿。而如果把所有这些关键帧都下载下来,对于一段稍长一些的视频都是不现实的。...而且,进度条在屏幕上的长度并不随视频内容变化——如果始终选取5秒为间隔,播放一个较长的视频时,屏幕上几个像素的移动可能导致预览窗口内容的急剧变化,为观众操作带来麻烦。

    1.9K20

    js文件异步上传进度条

    进度条的应用是为了显示的告诉用户文件上传了多少,对于小文件的上传基本上应用不到进度条。...进度条主要应用于大文件的上传,在于告诉用户上传情况,不至于让用户无状态等待,增加了用户的体验,如果没有进度条,在上传过程中,用户不知道是不是卡死了,这种体验就很差了,下面我们来说一下如何在异步上传时显示进度条...其实无论是原生js写xhr,还是jq的ajax,还是axios的异步都提供了一个获取上传进度的API,首先我们来看一下原生js如何获取上传进度。...原生js获取上传进度 var fd = new FormData(); fd.append("file", document.getElementById('testFile').files[0]);...; } }); axios获取上传进度 在axios中提供了一个参数onUploadProgress,有了这个参数就可以很方便的获取上传进度了,其方法实现还是和原生js的一样,这个参数其实就是注册一个监听事件

    10K20

    vue.js项目中用原生js实现移动端的轮播图

    Vue.js项目中封装轮播图组件 前言 一、了解原生js移动端的事件 二、轮播图实战 三、效果图 结束语 前言 今天我在vue.js项目实战开发过程中遇到了实现轮播图效果的问题,因为不想因为一个轮播图而引用整个...: 事件 作用 touchstart 手指放到屏幕上触发 touchmove 手指在屏幕上移动触发(高频触发) touchend 手指离开屏幕触发 touchcancel 系统取消touch事件时触发...class="points"的div标签作为内部class="each_point"的div标签的父标签,用来开启flex布局,让轮播图的中下方的小圆点有序排列,该标签内部主要内容就是轮播图中间下方的进度条小圆点...,轮播图跟着手指滑动的距离移动 slidings(){ //判断是点击还是滑动 if(this.StartPoint === this.EndPoint){return...CurrentImg(当前轮播图索引) 在页面挂在完成后, 触发methods中的startPlay方法,开启轮播功能 在触摸事件中主要运用 StartPoint - EndPoint 的值使得图片跟着手指的滑动方向同步移动

    9.1K20

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

    什么是 Touch滑动?就是类似于 PC端的滚动事件,但是在移动端是没有滚动事件的,所以就要用到 Touch事件结合 js去实现,效果如下: ? 1. 准备工作 什么是移动端的 Touch事件?...brown">列表十       css部分 在列表的父盒子上设定一个 overflow:hidden属性,使超出盒子部分的列表暂时隐藏掉,后面会通过 js...首次滑动 手指触摸到列表向下滑动的时候,列表应该跟着向下滑动,当手指离开屏幕的时候,列表应该停在滑动的位置。这里就会用到上面准备阶段的知识点了,不明白的可以参考上面的概念。...先来张示意图,怎么通过 js 让列表滑动起来 ?...我们限定只要手指离开时,上一次的滑动距离加上本次的距离 >0的时候,就让它触发反弹,并且反弹回 0点的位置,也就是两次滑动的距离和 =0。 ?

    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

    自定义View实战

    第二种是圆形进度条,      使用场景:下载文件进度,加载视频进度,耗电量进度..... 第三种是条形进度条,      使用场景:滑动调值,手机音效大小......上面的三种,均是demo,考虑使用场景并不完善,比如说第三种条形进度条还可以加上刻度,滑动到两边需要判断越界等。...那就先拿第三个来吧 条形进度条-可拖动 分析:我们想要做一个类似的控件,需要考虑的问题不只是眼睛看的到的,看不到的就好比我只能点击小红球才可以滑动,我点击其他区域是不能有任何操作的,这个时候就要判断手指.../** * 判断所按压的坐标和红点坐标的关系 * 如果手指按在了红点的下方,那么down-红点y坐标的绝对值如果等于或者小于半径,也就是说目前按压的就是红点, *...,状态恢复 break; } return true;//自己消费 } 下一篇是圆形进度条

    56420
    领券