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

js触摸横向滑动导航

基础概念

JavaScript 触摸横向滑动导航主要利用触摸事件(如 touchstart, touchmove, touchend)来实现用户在触摸屏设备上的横向滑动操作。这种导航方式常见于移动应用和响应式网站,用于在多个页面或视图之间进行切换。

相关优势

  1. 用户体验:触摸滑动提供了一种直观且自然的交互方式,特别适合移动设备用户。
  2. 节省空间:相比于传统的按钮或链接,滑动导航可以节省屏幕空间,使得界面更加简洁。
  3. 流畅过渡:通过 CSS3 的过渡效果,可以实现平滑的页面切换动画。

类型

  1. 基于 CSS 的滑动:使用 CSS3 的 transformtransition 属性来实现滑动效果。
  2. 基于 JavaScript 的滑动:通过监听触摸事件并动态计算元素的位置来实现滑动效果。

应用场景

  • 移动应用:如图片浏览、新闻阅读器等。
  • 响应式网站:在平板或手机上提供更好的导航体验。
  • 单页应用(SPA):在不同视图之间进行无缝切换。

示例代码

以下是一个简单的基于 JavaScript 和 CSS 的横向滑动导航示例:

HTML

代码语言:txt
复制
<div class="slider-container">
  <div class="slider">
    <div class="slide">Slide 1</div>
    <div class="slide">Slide 2</div>
    <div class="slide">Slide 3</div>
  </div>
</div>

CSS

代码语言:txt
复制
.slider-container {
  width: 100%;
  overflow: hidden;
}

.slider {
  display: flex;
  transition: transform 0.3s ease-in-out;
}

.slide {
  min-width: 100%;
  text-align: center;
}

JavaScript

代码语言:txt
复制
const slider = document.querySelector('.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}%)`;
}

遇到的问题及解决方法

问题1:滑动不流畅

原因:可能是由于频繁的重绘和回流导致的性能问题。

解决方法

  • 使用 requestAnimationFrame 来优化动画性能。
  • 减少 DOM 操作,尽量使用 CSS 动画。

问题2:滑动距离计算不准确

原因:触摸事件的坐标获取可能存在误差。

解决方法

  • touchstarttouchmove 中记录初始坐标和当前坐标,计算差值来确定滑动距离。
  • 考虑添加边界检查,防止过度滑动。

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

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

相关·内容

  • html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例

    有不少小伙伴在刚学习 html 的时候都会遇到这样一个问题:html 横向导航栏怎么做?今天W3Cschool小编就为大家分享一下简单的横向导航条代码,相信会对大家有所帮助。...html 横向导航栏一般用两种方法来制作:第一种,我们使用块状结构结合行内结构来制作。第二种,我们使用​float​属性来制作。由于第一种比较常用,一下就以第一种方式来介绍。...横向导航条代码实例: ul { list-style-type:none; margin:0; padding:0; overflow:hidden; } li { float:left; }...hover,a:active { background-color:#e6e6e6; } W3Cschool 入门教程 编程课程 编程实战 以上就是本文的全部内容了,今天和大家分享了 html 横向导航栏怎么做

    6.3K30

    使 WPF 支持触摸板的横向滚动

    使 WPF 支持触摸板的横向滚动 发布于 2017-11-23 13:25 更新于 2018-08-12...然而鉴于以前没有好好做,以至于 WPF 程序甚至都没有对触摸板的横向滚动提供支持(竖向滚动是直接使用了 MouseWheel,汗……)。但有些功能真希望能够支持横向滚动!...本文将介绍让触摸板支持横向滚动的方法,本质上也是用 MouseWheel,但却支持了横向。 ---- 中文 English ?...▲ 精确式触摸板 我们需要从 Windows 的窗口消息中获取 WM_MOUSEHWHEEL 消息。对,就是鼠标滚轮消息!以前我们只取了纵向数据,现在我们要取横向数据。...} OnMouseTilt 中就可以写我们触摸板横向滚动的处理代码。 以上代码都可以封装成通用的方法,在 OnMouseTilt 中抛出一个类似于 MouseWheel 一样的事件是非常好的选择。

    1K20

    android 横向滑动分类效果实现

    大家看上面的分类栏,我们这个分类数目不固定,要求可以一个一个横向滑动。不是viewPager分页 一屏幕放4个,一滑动一下子显示下一页的4个。当然这种效果一般都是用viewPager实现。...这个横向的列表之前的博客已经写过了用的HorizontalListView,所以这个横向滑动列表的实现 我就不再写一次了 ,感兴趣的可以直接看这篇文章 Android 横向ListView实现  但是用这个实现了列表后...,发现这个效果对用户来讲不是特别友好,因为可能一部分用户不知道那个列表是滑动的,所以特意在下面加了两个小圆点 这两个小圆点的添加方式就是监听 横向列表的onTouch事件 mDocumentCategoryHlv.setOnTouchListener...private int FLING_MIN_VELOCITY = 0;// 垂直方向手指滑动距离最小值 @Override public boolean onFling(MotionEvent...onTouch(View view, MotionEvent motionEvent) { return gd.onTouchEvent(motionEvent); } 判断滑动状态

    1.1K10

    【Flutter】底部导航栏页面框架 ( BottomNavigationBar 底部导航栏 | PageView 滑动页面 | 底部导航与滑动页面关联操作 )

    文章目录 一、BottomNavigationBar 底部导航栏 二、PageView 滑动页面 三、BottomNavigationBar 与 PageView 关联 四、完整代码示例 1、核心导航组件...2、四个切换页面 3、应用启动主界面 4、运行效果 五、相关资源 一、BottomNavigationBar 底部导航栏 ---- 在 Scaffold 的 bottomNavigationBar 属性设置底部导航栏...: onPageChanged 参数设置滑动回调事件 , 传入 index 索引值 , 在该事件中 , 调用 setState 方法 , 更新底部导航栏 BottomNavigationBar 的当前索引值...: PageView( /// 控制跳转翻页的控制器 controller: _pageController, /// 页面滑动 /// 这里设置 PageView 页面滑动也能 onPageChanged...; PageView( /// 控制跳转翻页的控制器 controller: _pageController, /// 页面滑动 /// 这里设置 PageView 页面滑动也能

    4.6K20

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

    本篇将带你深入了解 Flutter 中的手势事件传递、事件分发、事件冲突竞争,滑动流畅等等的原理,帮你构建一个完整的 Flutter 闭环手势知识体系,这也许是目前最全面的手势事件和滑动源码的深入文章了...Flutter 中默认情况下,以 Android 为例,所有的事件都是起原生源于 io.flutter.view.FlutterView 这个 SurfaceView 的子类,整个触摸手势事件实质上经历了...override // from HitTestTarget void handleEvent(PointerEvent event, HitTestEntry entry) { /// 导航事件去触发...2.3 滑动事件 滑动事件也是需要在 Down 流程中 addPointer ,然后 MOVE 流程中,通过在 PointerRouter.route 之后执行 DragGestureRecognizer.handleEvent...ListView 内部 RenderViewportBase 中,这个 ViewportOffset 是通过 _offset.addListener(markNeedsLayout); 绑定的,so ,触摸滑动导致

    1.7K30

    移动端 模拟手机联系人触摸A~Z导航

    HTML5学堂:今天要与大家分享一个当前移动端很常见的效果,类似于手机联系人的快速导航功能,即当触摸a~z的字母时,能够相对应的显示文字。...有些手机的音乐导航也类似,具体可详见下图: touchmove的问题 在移动端,我们可以使用touch事件进行处理,此处首先想到的是使用touchmove事件。...实现触摸a~z导航(模拟手机联系人) 当前能够想到的实现方法有两种(也均测试无误) 第一种方法:手指滑动的时候,判断手指滑动的竖向位置,如果到达相应标签的位置(由于标签是fixed定位模式,因此可以拿到每个标签...使用elementFromPoint实现兼容 js.../zepto.js"> var con = document.getElementById('con'); var list

    1.6K50
    领券