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

在线演示

如需查看在线演示,请点击:这里

总结

总结

以上就是本文的全部内容,希望这些内容能对您的学习或工作有所帮助。如有任何疑问,欢迎留言交流。

作者最新文章