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

js触屏左右滑动导航

基础概念

JavaScript 触屏左右滑动导航主要涉及到触摸事件(touch events)的处理。触摸事件包括 touchstarttouchmovetouchend 等,这些事件允许开发者响应用户在触摸屏设备上的操作。

相关优势

  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>Swipe Navigation</title>
<style>
  .nav-container {
    display: flex;
    overflow-x: hidden;
    width: 100%;
    height: 100px;
    border: 1px solid #ccc;
  }
  .nav-item {
    min-width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #f0f0f0;
    border-right: 1px solid #ccc;
  }
</style>
</head>
<body>

<div class="nav-container" id="navContainer">
  <div class="nav-item">Item 1</div>
  <div class="nav-item">Item 2</div>
  <div class="nav-item">Item 3</div>
  <div class="nav-item">Item 4</div>
</div>

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

  navContainer.addEventListener('touchstart', touchStart);
  navContainer.addEventListener('touchmove', touchMove);
  navContainer.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;
    setTransform(currentTranslate);
  }

  function touchEnd() {
    const movedBy = currentTranslate - prevTranslate;
    if (movedBy < -100 && currentIndex < 3) currentIndex += 1;
    if (movedBy > 100 && currentIndex > 0) currentIndex -= 1;
    prevTranslate = -currentIndex * window.innerWidth;
    setTransform(prevTranslate);
    animationID = requestAnimationFrame(smoothTransition);
  }

  function setTransform(translate) {
    navContainer.style.transform = `translateX(${translate}px)`;
  }

  function smoothTransition() {
    setTransform(prevTranslate);
    if ((prevTranslate > currentTranslate && prevTranslate - currentTranslate > 1) || (prevTranslate < currentTranslate && currentTranslate - prevTranslate > 1)) {
      cancelAnimationFrame(animationID);
    } else {
      requestAnimationFrame(smoothTransition);
    }
  }
</script>

</body>
</html>

可能遇到的问题及解决方法

问题:滑动不够流畅或有卡顿现象。

原因:可能是由于页面渲染性能不佳或 JavaScript 执行效率低。

解决方法

  • 使用 requestAnimationFrame 来优化动画效果。
  • 减少 DOM 操作,尽量使用 CSS3 动画。
  • 对复杂的页面结构进行优化,比如使用虚拟列表技术。

通过上述方法,可以有效提升触屏滑动导航的用户体验和应用性能。

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

相关·内容

Bootstrap幻灯轮播如何支持触屏左右滑动手势?

bootstrap是封装好的框架,需要某些功能只需调用相应的组件就可以,但有些还是没加入,比如幻灯轮播触屏左右滑动手势就不支持,大家用的设备基本是触屏的了,能用滑动交互在小屏幕上体验会更好,那么如何实现呢...一个比较简单的方法是增加一个滑动手势js插件:hammer.js,网上有很多cdn调用地址,像//cdn.bootcss.com/hammer.js/2.0.8/hammer.min.js,我们在head...Next   关键的步骤来了,我们需要写一个javascript命令调用hammer.js...需要注意的是,jquery版本最好是1.9版本的jquery-1.9.1.min.js,否则可能在电脑上可以实现手势滑动,而在手机上无法触摸滑动   javascript命令这个是关键,不会写不会改就不好玩了

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

    最近的一个活动页面需要做一个可以左右滑动的抽签效果,故通过用css的transform属性和js结合来模拟可以无限滚动的效果。...结构与样式 结构:卡片分前后两排,每列插入10个div结点,以便做左右位移效果。 样式:设置每一列都恰好好在中间位置(或中间位置附近),如下所示。 a....目标位移与帧位移 为了做出滑动后到停留位置的缓动效果,所以当用户左右滑动屏幕时,会记录滑动距离,计算出卡片该到的目标位移位置,目标位移位置是有规则的,因为这里有10张卡片均分宽度,位置必须是(100%/...连续滑动判断 当在上次滑动动画还未播放结束时用户又进行了第二次滑动时,需要执行一下操作:     1)....下图是chrome cpu6倍减速调试效果,没有触发layout,FPS基本维持在60左右。

    30.7K102

    两周“学会”bootstrap搭建一个移动站点

    一直想着用bootstrap搭建网站,它的自适应、元素封装完善、现成的Glyphicons字体图标,省去很多的css、js、ui的工作,可以快速搭建一个客户需要的站点。...国内的企业站一般都喜欢这样的版式:头部导航、幻灯片banner、次导航、文章列表、tag标签、转化引导、主业分类、团队介绍、联系方式,那我们就按这样设计   1.按照bootstrap中文网bootcss.com...官方文档,首先我们先引用css和js,用大的body把页面包围起来   2.用导航条设计一个头部导航,用栅格系统column分为散列,左侧是主页小房子标志,中间是logo,右侧是下拉导航菜单...  3.用carousel.js做一个幻灯片轮播,如果想加入手势滑动效果参考ytkah之前写的这篇文章:Bootstrap幻灯轮播如何支持触屏左右滑动手势?   ...4.用栅格系统column做次导航作为品牌专区、主业分类、底部转化引导   5.用ul - li 做一个文章列表   6.用标签页nav-tabs和按钮btn做一个tags标签栏、团队介绍   ytkah

    2.9K60

    vue-awesome-swiper实现轮播图片

    前言 最近在学习Node.js (Express.js) + Vue.js (Element UI) 全栈开发王者荣耀手机端官网和管理后台时,学习到第三章 3.7-首页顶部轮播图片(vue-swipper...Swiper目前已经更新到版本5了,Swiper常用于移动端网站的内容触摸滑动,Swiper是纯javascript打造的滑动特效插件,面向手机、平板电脑等移动终端。...Swiper能实现触屏焦点图、触屏Tab切换、触屏多图切换等常用效果。Swiper开源、免费、稳定、使用简单、功能强大,是架构移动终端网站的重要选择!...简单配置即可实现手机、电脑网页大部分滑动功能,焦点图、tab、触摸导航等。其官网对于Swipper5的介绍如下: ? ? ?...} } } } } 我在项目中暂时只放了3张用于轮播的图片,每隔3秒钟轮播另外一张图片,当在浏览器中左右滑动鼠标或者在手机端左右滑动时会看到不同的图片

    5.3K40

    大屏时代的生态变迁,看平板手机的拇指热键与界面布局

    大屏手机填补了传统触屏手机与平板电脑之间的空白地带,有些大屏手机的屏幕甚至达到7英寸之巨,因此也获得了一个略显蹩脚的绰号——平板手机。 ? 这类设备虽然有着巨大的身形,但人们仍然会将其作为手机使用。...例如,可以将Tab导航放在内容上方,但使其切换能够被内容区域的左右滑动手势控制,这也是一种变相的拇指友好模式。 ? Android的“通讯录”是一个典型的例子。...用户可以直接点击Tab本身,也可以通过左右滑动操作来切换Tab。 这种模式通常适用于Tab导航。...在小屏手机上,用户可以相对轻松地点击顶部Action Bar中的Tab;而在平板手机上,直接在内容区域左右滑动实现切换显然是最为便捷的。...总体上讲,功能控件位于屏幕左右边缘的模式更适用于双手拇指同时操作的情况,因此在平板电脑的界面中更为常见。 本文选自《触类旁通:多终端时代的触屏界面设计》

    2.4K10

    超大触摸屏设计的7大注意事项

    1.使用自然的手势交互 1.jpg 为什么“左右滑动”在所有触屏操作中都深受欢迎,因为这是用户最自然的手部动作和手势。 在设计超大触摸屏时,设计师不仅要考虑用户手指的动作,还要考虑到整只手的操作。...与小屏幕相比,大屏幕的滑动触发可能需要更夸张一些,因此点击可能会需要更大的手指压力。 在超大屏幕的设备中,过多的滑动设计对用户来说似乎不大友好,因为反复上的下滑动操作可能会导致手臂疲劳。...3.确保导航始终可用 2.jpg 大多数用户使用超大触摸屏的心态,与第一次访问网站类似,导航显得尤为重要。模仿这种场景进行设计,很容易就能吸引用户进入你的设计并与之交互。...即使没有连接网络,这些触屏设备也需要保持正常工作。 提示:请确保所有运行设计的工具相关数据(从JavaScript到字体库到数据收集)都存储在本地。...大多数的超大触屏提供用户的是一次性交互或触发点,且每个界面都有所不同。这种提示设置地越明显,用户就越容易理解操作,从而就越有可能与你的产品进行交互。

    1.4K70

    实战文章!超实用!教你如何利用数据「分析用户行为,完善产品设计」

    跟PC情况相似,用户触达率随着页面层级加深而减小。下例的H5小游戏里,用户先进入一个地图首页,点击“开始游戏”会跳转到游戏页面,再进行性别选择和操作提示,最后才到达游戏。...下面的例子从数据上看第三、四、五屏的数据比较平稳,但从第二屏到第三屏的丢失高达39%。反观专题,第三屏到第四屏、第四屏到第五屏的操作是选择,而第二屏到第三屏的操作中还带有输入行为。...下例的H5小游戏开始前有操作方法提示,玩法是晃动手机(像控制真车方向盘一样)控制小车左右移动躲避障碍物。但是有19%的用户选择点击消除障碍物,12.7%的用户选择点击拖动小车,直接忽略教程。...用户习惯滑动切换,不喜欢向左的点击 下例H5专题页面,用户可以手势滑动切换游戏,也可以点击下面的导航切换游戏。93%的用户选择手势滑动,只有7%的用户选择点击导航。...下例H5专题页面,用户可以点击左右按钮或者手势滑动来360°查看新车。所有手势中,左点击只有10.1%,右点击有41.3%,手势滑动占48.6%。 有行为触发的icon要设计的足够醒目易懂。

    87080

    干货 | 10个案例告诉你,数据如何驱动产品设计

    跟PC情况相似,用户触达率随着页面层级加深而减小。下例的H5小游戏里,用户先进入一个地图首页,点击“开始游戏”会跳转到游戏页面,再进行性别选择和操作提示,最后才到达游戏。...下面的例子从数据上看第三、四、五屏的数据比较平稳,但从第二屏到第三屏的丢失高达39%。反观专题,第三屏到第四屏、第四屏到第五屏的操作是选择,而第二屏到第三屏的操作中还带有输入行为。...下例的H5小游戏开始前有操作方法提示,玩法是晃动手机(像控制真车方向盘一样)控制小车左右移动躲避障碍物。但是有19%的用户选择点击消除障碍物,12.7%的用户选择点击拖动小车,直接忽略教程。...6、用户习惯滑动切换,不喜欢向左的点击。 下例H5专题页面,用户可以手势滑动切换游戏,也可以点击下面的导航切换游戏。93%的用户选择手势滑动,只有7%的用户选择点击导航。...下例H5专题页面,用户可以点击左右按钮或者手势滑动来360°查看新车。所有手势中,左点击只有10.1%,右点击有41.3%,手势滑动占48.6%。 7、有行为触发的icon要设计的足够醒目易懂。

    62330

    如何用数据看用户行为,驱动产品设计

    跟PC情况相似,用户触达率随着页面层级加深而减小。下例的H5小游戏里,用户先进入一个地图首页,点击“开始游戏”会跳转到游戏页面,再进行性别选择和操作提示,最后才到达游戏。...下面的例子从数据上看第三、四、五屏的数据比较平稳,但从第二屏到第三屏的丢失高达39%。反观专题,第三屏到第四屏、第四屏到第五屏的操作是选择,而第二屏到第三屏的操作中还带有输入行为。...下例的H5小游戏开始前有操作方法提示,玩法是晃动手机(像控制真车方向盘一样)控制小车左右移动躲避障碍物。但是有19%的用户选择点击消除障碍物,12.7%的用户选择点击拖动小车,直接忽略教程。...6、用户习惯滑动切换,不喜欢向左的点击。 下例H5专题页面,用户可以手势滑动切换游戏,也可以点击下面的导航切换游戏。93%的用户选择手势滑动,只有7%的用户选择点击导航。...下例H5专题页面,用户可以点击左右按钮或者手势滑动来360°查看新车。所有手势中,左点击只有10.1%,右点击有41.3%,手势滑动占48.6%。 7、有行为触发的icon要设计的足够醒目易懂。

    87630

    06-移动端开发教程-fullpage框架

    我们经常见到一些全屏的特绚丽页面,手指或者鼠标滑动一下就是一整屏切换,而且还有各种效果。比如:全屏滑动案例 下面我们就介绍一下jQuery的fullPage.js的如何使用及常用的配置。...navigationPosition 字符串 right 项目导航的位置,可选 left 或 right navigationColor 字符串 #000 项目导航的颜色 navigationTooltips...数组 空 项目导航的 tip slidesNavigation 布尔值 false 是否显示左右滑块的项目导航 slidesNavPosition 字符串 bottom 左右滑块的项目导航的位置,可选...false 滚动到最顶部后是否滚底部 loopHorizontal 布尔值 true 左右滑块是否循环滑动 autoScrolling 布尔值 true 是否使用插件的滚动方式,如果选择 false,则会出现浏览器自带的滚动条...如果一开始全设置好了那么只有第一屏有动画效果,不是我们想要的结果。 配合fullpage的onLeave事件,可以实现在上一屏离开的时候,给下一屏添加动画样式类,并把上一屏的动画样式类去掉。

    5.1K50

    06-移动端开发教程-fullpage框架

    我们经常见到一些全屏的特绚丽页面,手指或者鼠标滑动一下就是一整屏切换,而且还有各种效果。比如:全屏滑动案例 下面我们就介绍一下jQuery的fullPage.js的如何使用及常用的配置。...navigationPosition 字符串 right 项目导航的位置,可选 left 或 right navigationColor 字符串 #000 项目导航的颜色 navigationTooltips...数组 空 项目导航的 tip slidesNavigation 布尔值 false 是否显示左右滑块的项目导航 slidesNavPosition 字符串 bottom 左右滑块的项目导航的位置,可选...false 滚动到最顶部后是否滚底部 loopHorizontal 布尔值 true 左右滑块是否循环滑动 autoScrolling 布尔值 true 是否使用插件的滚动方式,如果选择 false,则会出现浏览器自带的滚动条...如果一开始全设置好了那么只有第一屏有动画效果,不是我们想要的结果。 配合fullpage的onLeave事件,可以实现在上一屏离开的时候,给下一屏添加动画样式类,并把上一屏的动画样式类去掉。

    5.1K90

    触屏事件

    1触屏事件 1.1. 触屏事件概述 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。...比如触屏事件 touch(也称触摸事件),Android和 IOS 都有。 touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。...触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。 常见的触屏事件如下: 1.3.2....(2) 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子 (3) 离开手指 touchend: 注意: 手指移动也会触发滚动屏幕所以这里要阻止默认的屏幕滚动 e.preventDefault... // (1) 触摸元素touchstart : 获取手指初始坐标,同时获得盒子原来的位置 // (2) 移动手指 touchmove :计算手指的滑动距离

    73820

    触屏事件

    触屏事件概述 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。...比如触屏事件 touch(也称触摸事件),Android和 IOS 都有。 touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。...触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。 常见的触屏事件如下: ? 2....然后用盒子原来的位置 + 手指移动的距离 手指移动的距离: 手指滑动中的位置 减去 手指刚开始触摸的位置 拖动元素三步曲: (1) 触摸元素 touchstart: 获取手指初始坐标,同时获得盒子原来的位置...(2) 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子 (3) 离开手指 touchend: 注意: 手指移动也会触发滚动屏幕所以这里要阻止默认的屏幕滚动 e.preventDefault

    79341
    领券