原生js实现类似fullpage的单页/全屏滚动


Posted in Javascript onJanuary 22, 2017

前言

单页/全屏滚动页面越来越常见了,它多用于产品介绍、招聘等内容较少的简单页面。针对这种效果也出现了不少 jQuery 插件,本文实现的效果类似于fullpage的单屏滚动,使用原生JS实现,不依赖任何js库;

css代码:

html,body {height:100%;}
body {margin:0px;}
div {height:100%;}

html代码:

<div style="background:#FEE;"></div>
<div style="background:#EFE;"></div>
<div style="background:#EEF;"></div>
<div style="background:red;"></div>

js代码:

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

在线演示请点击:这里

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
用window.location.href实现刷新另个框架页面
Mar 07 Javascript
jquery 模式对话框终极版实现代码
Sep 28 Javascript
javascript 模式设计之工厂模式详细说明
May 10 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
向左滚动文字 js代码效果
Aug 17 Javascript
EasyUI实现下拉框多选功能
Nov 07 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
使用Angular CLI生成路由的方法
Mar 24 Javascript
koa上传excel文件并解析的实现方法
Aug 09 Javascript
tracking.js页面人脸识别插件使用方法
Apr 16 Javascript
vue.js实现照片放大功能
Jun 23 Javascript
前端开发必知的15个jQuery小技巧
Jan 22 #Javascript
Vue.js学习之过滤器详解
Jan 22 #Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 #Javascript
Ionic 2 实现列表滑动删除按钮的方法
Jan 22 #Javascript
Vue.js学习之计算属性
Jan 22 #Javascript
ionic中列表项增加和删除的实现方法
Jan 22 #Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
Jan 22 #Javascript
You might like
php实现jQuery扩展函数
2009/10/30 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
vue删除html内容的标签样式实例
2018/09/13 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
网络编辑岗位职责范本
2014/02/10 职场文书
文化产业实施方案
2014/06/07 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
保送生自荐信范文
2015/03/26 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
python数字图像处理:图像的绘制
2022/06/28 Python