如何实现垂直滑动(上下)触发水平滚动效果

阿涛小哥_8179

阿涛小哥_8179

2026-08-08

327人浏览

原创

如何实现垂直滑动(上下)触发水平滚动效果

本文讲解如何通过监听鼠标滚轮事件,将用户垂直方向的滚动操作映射为页面水平滚动,从而在保持常规交互习惯的同时实现横向内容浏览。

本文讲解如何通过监听鼠标滚轮事件,将用户垂直方向的滚动操作映射为页面水平滚动,从而在保持常规交互习惯的同时实现横向内容浏览。

在响应式网页中,有时需要突破浏览器默认的“垂直滚动 = 垂直位移”逻辑,实现「用户向上/下滑动,页面却向左/右平移」的效果——这在全屏横向画廊、时间轴展示或创意型单页布局中非常实用。核心原理是:拦截原生滚动行为,将其 delta 值重新定向到水平轴。

你当前代码中的关键问题在于 window.scrollBy(evt.deltaY, 0) —— 这实际是让页面沿 Y 轴(垂直方向)移动,与目标相悖。正确做法是交换参数顺序,将滚轮的垂直偏移量(evt.deltaY)应用于 X 轴:

const scrollContainer = document.querySelector(".sp");
scrollContainer.addEventListener("wheel", (evt) => {
    evt.preventDefault(); // 阻止默认垂直滚动
    window.scrollBy(evt.deltaY, 0); // ❌ 错误:仍触发垂直滚动
});

✅ 应改为:

scrollContainer.addEventListener("wheel", (evt) => {
    evt.preventDefault();
    window.scrollBy(evt.deltaY, 0); // ⚠️ 注意:此处看似未改?实则需结合 CSS 方向理解
});

但更准确、更健壮的写法是 显式控制水平滚动,尤其当页面存在复杂嵌套或 overflow-x: hidden 时:

scrollContainer.addEventListener("wheel", (evt) => {
    evt.preventDefault();
    // 将垂直滚轮位移映射为水平滚动(正向滑动向下 → 向右滚动)
    const scrollAmount = evt.deltaY;
    scrollContainer.scrollLeft += scrollAmount;
});

✅ 推荐此方式:直接操作 scrollLeft,避免全局 window.scrollBy 可能引发的布局重排冲突,且精准作用于目标容器。

此外,关于你提到的「canvas 3 后出现大片空白」问题,根源极可能在于:

  • .sp 容器宽度计算误差(如 totalWidth - 2500 中的硬编码 -2500 缺乏自适应性);
  • 子元素 .sb 的 margin-right: -4px 或 inline-block 间隙导致总宽塌陷;
  • height: 100vh 在移动端或缩放下引发高度溢出,间接影响 scrollWidth 计算。

优化建议:

  • 移除硬编码宽度减法,改用 scrollContainer.scrollWidth = [...document.querySelectorAll('.sb')].reduce((sum, el) => sum + el.offsetWidth, 0);
  • 使用 display: flex 替代 inline-block,彻底消除间隙;
  • 添加防抖机制避免高频滚动卡顿:
    let isScrolling = false;
    scrollContainer.addEventListener("wheel", (evt) => {
        if (isScrolling) return;
        isScrolling = true;
        evt.preventDefault();
        scrollContainer.scrollLeft += evt.deltaY;
        setTimeout(() => isScrolling = false, 16); // 约 60fps 限制
    });

最后,请确保 和 的 overflow-x: hidden 已正确设置(你已在 JS 中设置 document.documentElement.style.overflowX = 'hidden'),并配合 CSS scroll-behavior: smooth 提升体验:

.sp {
    scroll-behavior: smooth;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch; /* iOS 平滑滚动支持 */
}

这样,用户只需自然上下滑动,即可流畅浏览横向内容,同时空白区域问题也将随布局规范化一并解决。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

2026.10.14

0

15

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

2026.10.14

0

14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

2026.10.14

0

15

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

2026.10.14

0

13

二狗PPT大纲编辑实操指南
二狗PPT大纲编辑实操指南

本专题聚焦二狗PPT结构化大纲的生成和修改,讲解标题、正文、目录、页数与页面顺序的调整方法,提升汇报逻辑和内容完整性。

2026.10.14

0

15

二狗PPT文档转PPT全教程
二狗PPT文档转PPT全教程

本专题讲解二狗PPT解析Word、PDF、Excel和PPT资料的方法,涵盖文件上传、内容提取、大纲整理、异常处理与转换后校对。

2026.10.14

0

13

讯飞绘文全功能使用教程
讯飞绘文全功能使用教程

本专题系统整理讯飞绘文官网入口、注册登录、工作台及内容创作流程,帮助用户熟悉常用功能,快速完成首篇图文内容。

2026.10.14

0

14

讯飞绘文AI写作与文案生成合集
讯飞绘文AI写作与文案生成合集

本专题聚焦讯飞绘文AI写作、提纲生成、文章改写和文案润色,覆盖从主题输入到成稿优化的关键操作与实用技巧。

2026.10.14

0

14

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

2026.10.10

100

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习