原生JS实现单页全屏滚动效果
作者:小括号时间:2026-10-21 20:59:51浏览:200
本文介绍如何使用原生JavaScript实现类似fullpage的单页或全屏滚动效果。文章提供了完整的CSS布局代码、HTML结构以及核心的JS交互逻辑,包括处理滚轮事件、窗口大小改变以及页面定位等功能,无需依赖任何第三方库。
前言
前言
单页滚动效果实现
单页或全屏滚动页面在现代网页设计中越来越普遍,通常应用于产品介绍、招聘信息等内容相对简洁的页面场景。虽然市面上已有不少基于jQuery的插件可供选择,但本文旨在通过原生JavaScript实现类似fullpage的单屏滚动功能,且不依赖任何JavaScript库。
以下是相关的CSS代码实现:
CSS布局代码
html,body {height:100%;}
body {margin:0px;}
div {height:100%;}
HTML结构代码如下:
HTML结构代码
<div style="background:#FEE;"></div>
<div style="background:#EFE;"></div>
<div style="background:#EEF;"></div>
<div style="background:red;"></div>
JavaScript核心逻辑如下:
JavaScript交互逻辑
document.addEventListener("DOMContentLoaded", function() {
var body = document.body,
html = document.documentElement;
var itv, height = document.body.offsetHeight;
var page = scrollTop() / height | 0;
//窗口大小改变事件
addEventListener("resize", onresize, false);
onresize();
//滚轮事件
document.body.addEventListener(
"onwheel" in document ? "wheel" : "mousewheel",
function(e) {
clearTimeout(itv);
itv = setTimeout(function() {
var delta = e.wheelDelta / 120 || -e.deltaY / 3;
page -= delta;
var max = (document.body.scrollHeight / height | 0) - 1;
if (page < 0) return page = 0;
if (page > max) return page = max;
move();
}, 100);
e.preventDefault();
}
);
//平滑滚动
function move() {
var value = height * page;
var diff = scrollTop() - value;
(function callee() {
diff = diff / 1.2 | 0;
scrollTop(value + diff);
if (diff) itv = setTimeout(callee, 16);
})();
};
//resize事件
function onresize() {
height = body.offsetHeight;
move();
};
//获取或设置scrollTop
function scrollTop(v) {
if (v == null) return Math.max(body.scrollTop, html.scrollTop);
else body.scrollTop = html.scrollTop = v;
};
});
在线演示
如需查看在线演示,请点击:这里
总结
总结
以上就是本文的全部内容,希望这些内容能对您的学习或工作有所帮助。如有任何疑问,欢迎留言交流。
作者最新文章
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
