两行 JS 代码实现页面横向滚动特效

开发 前端
在前端这个无奇不有的世界里,有些网站不是正常垂直滚动的,而是横向滚动的。

 在前端这个无奇不有的世界里,有些网站不是正常垂直滚动的,而是横向滚动的。

那么在没法把鼠标滚轮横过来的前提下(苹果除外),能否实现网页横向滚动呢?我们来写代码试试。先看一下最终效果,这里我用鼠标的滚轮垂直滚动,页面是横向滚动的。

要实现这个功能,只需要一点点的 JS 代码。

编写 HTML 结构

先看一下 HTML 结构,很简单,就是三个模拟全屏页面的 div,class 都是 page,然后放在一个 class 名为 container 的 div 容器中: 

<main>    <div class="container">      <div class="page">Page1</div>      <div class="page">Page2</div>      <div class="page">Page3</div>    </div>  </main> 

编写 CSS 样式

对于样式,container 容器设置为 flex 布局,并且显示横向滚动条: 

.container {    display: flex;    overflow-x: scroll;  } 

里面每一个页面元素的宽高都设置为占满浏览器可视区域的 100%,并且在 flex 布局中,不自动收缩,再分别给他们设置不同的背景色,用于区分: 

.page {    width: 100vw;    height: 100vh;    flex-shrink: 0;  }  .page:nth-child(1) {    background: hsl(140deg, 50%, 50%);  }  .page:nth-child(2) {    background: hsl(210deg, 50%, 50%);  }  .page:nth-child(3) {    background: hsl(270deg, 50%, 50%);  } 

实现横向滚动

接下来我们使用 JS 实现横向滚动,首先获取 container 容器: 

let container = document.querySelector(".container"); 

给它添加一个 “wheel” 事件,这个是监听鼠标滚轮的滚动,在滚动时,先阻止默认的滚动事件,然后让容器水平横向移动,这里利用到了 scrollLeft 属性,让容器的内容向左移动,这里只需要加上滚轮垂直滚动的距离差值就可以了,也就是 event 对象中的 deltaY 属性: 

container.addEventListener("wheel", (event) => {    event.preventDefault();    container.scrollLeft += event.deltaY;  }); 

兼容性

wheel 事件的兼容性可以参考 caniuse 提供的数据:

总结

这样就实现横向滚动了,重点是利用了 “wheel” 事件监听鼠标滚轮滚动,然后获取滚动距离差值,把它加到可以滚动的容器的 scrollLeft 属性中,你学会了吗?

源码地址:​​https://github.com/zxuqian/html-css-examples/tree/master/38-horizontal-scrolling​

原文地址:​​https://zxuqian.cn/docs/videos/effects/js-horizontal-scroll-effect/​​ 


责任编辑:庞桂玉 来源: Linux公社
相关推荐

2013-01-05 17:45:11

Android开发特效滚动屏幕

2023-09-12 14:58:00

Redis

2024-02-20 12:49:00

CSS函数前端

2011-09-02 10:03:40

jQuery滚动图片

2022-09-25 23:10:53

Python数据集机器学习

2018-03-15 13:31:48

润乾LinuxGREP搜索

2023-10-12 10:11:19

2011-09-02 09:49:29

JQuery图片滚动

2021-07-15 10:33:38

代码开发编译

2011-09-08 15:06:33

HTML 5

2021-09-15 08:45:55

Python文本文件代码

2021-01-15 05:36:48

MySQL错位数据库

2011-07-22 13:30:52

JavaScript

2010-10-08 13:02:05

JS特效

2020-04-02 15:39:51

代码编译器前端

2022-03-09 14:57:53

Numbapython

2024-03-04 13:21:00

模型训练

2020-06-29 07:49:10

kill -9Java程序员

2022-09-14 15:17:26

ArkUI鸿蒙
点赞
收藏

51CTO技术栈公众号