原生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 相关文章推荐
JavaScript的eval JSON object问题
Nov 15 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
Aug 05 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
JS倒计时实例_天时分秒
Aug 22 Javascript
seajs中最常用的7个功能、配置示例
Oct 10 Javascript
phantomjs导出html到pdf的方法总结
Oct 19 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
javascript原型链学习记录之继承实现方式分析
May 01 Javascript
vue中利用iscroll.js解决pc端滚动问题
Feb 15 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 获取全局变量的代码
2011/04/21 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
AngularJS语法详解
2015/01/23 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
python中使用mysql数据库详细介绍
2015/03/27 Python
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python中map()函数的使用方法示例
2017/09/29 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
社区志愿者心得体会
2014/01/03 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
道路交通安全实施方案
2014/03/12 职场文书
企业党员公开承诺书
2014/03/26 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
外联部演讲稿
2014/05/24 职场文书
档案工作个人总结
2015/03/03 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python