当前位置:首页 > 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事件,阻止默认的垂直滚动行为,改为横向滚动。

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实现平滑滚动效果,提升用户体验。

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);
});

响应式设计考虑

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

js实现横向滚动

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

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

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

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

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…