当前位置:首页 > JavaScript

js实现横向滚动

2026-03-01 02:32:05JavaScript

实现横向滚动的方法

使用CSS和JavaScript结合实现横向滚动效果,可以通过监听鼠标滚轮事件或触摸事件来控制元素的水平滚动。

CSS样式设置

确保容器具有横向滚动的能力,并隐藏默认的垂直滚动条。

.scroll-container {
  width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  white-space: nowrap;
  scroll-behavior: smooth;
}
.scroll-item {
  display: inline-block;
  width: 200px;
  height: 200px;
  margin-right: 10px;
}

JavaScript监听滚轮事件

通过监听wheel事件,阻止默认的垂直滚动行为,改为横向滚动。

js实现横向滚动

const container = document.querySelector('.scroll-container');
container.addEventListener('wheel', (e) => {
  e.preventDefault();
  container.scrollLeft += e.deltaY;
});

触摸设备支持

对于触摸设备,可以监听touchstarttouchmovetouchend事件来实现横向滑动。

let startX;
let scrollLeft;

container.addEventListener('touchstart', (e) => {
  startX = e.touches[0].pageX;
  scrollLeft = container.scrollLeft;
});

container.addEventListener('touchmove', (e) => {
  e.preventDefault();
  const x = e.touches[0].pageX;
  const walk = (x - startX) * 2;
  container.scrollLeft = scrollLeft - walk;
});

平滑滚动动画

使用requestAnimationFrame实现平滑滚动效果,提升用户体验。

js实现横向滚动

function smoothScroll(element, target, duration) {
  const start = element.scrollLeft;
  const change = target - start;
  let startTime = null;

  function animateScroll(currentTime) {
    if (!startTime) startTime = currentTime;
    const timeElapsed = currentTime - startTime;
    const progress = Math.min(timeElapsed / duration, 1);
    element.scrollLeft = start + change * progress;
    if (timeElapsed < duration) {
      requestAnimationFrame(animateScroll);
    }
  }
  requestAnimationFrame(animateScroll);
}

横向滚动按钮控制

添加左右按钮来控制横向滚动,适用于需要明确导航的场景。

const leftBtn = document.getElementById('left-btn');
const rightBtn = document.getElementById('right-btn');

leftBtn.addEventListener('click', () => {
  smoothScroll(container, container.scrollLeft - 200, 500);
});

rightBtn.addEventListener('click', () => {
  smoothScroll(container, container.scrollLeft + 200, 500);
});

响应式设计考虑

根据屏幕宽度动态调整滚动距离,确保在不同设备上都有良好的体验。

function getScrollDistance() {
  return window.innerWidth > 768 ? 300 : 150;
}

rightBtn.addEventListener('click', () => {
  smoothScroll(container, container.scrollLeft + getScrollDistance(), 500);
});

以上方法提供了完整的横向滚动实现方案,涵盖了鼠标、触摸和按钮控制等多种交互方式。

标签: 横向js
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…