原生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脚本调试方法小结
Nov 24 Javascript
基于Jquery实现表格动态分页实现代码
Jun 21 Javascript
在jQuery中 关于json空对象筛选替换
Apr 15 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
php实例分享之实现显示网站运行时间
May 20 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
Angular页面间切换及传值的4种方法
Nov 04 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
Dec 08 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
vue实现的请求服务器端API接口示例
May 25 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
php计算title标题相似比的方法
2015/07/29 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
关于express与koa的使用对比详解
2018/01/25 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
python中assert用法实例分析
2015/04/30 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Django异步任务线程池实现原理
2019/12/17 Python
python matlab库简单用法讲解
2020/12/31 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
新浪微博实习心得体会
2014/01/27 职场文书
培训班开班主持词
2015/07/02 职场文书
军训新闻稿范文
2015/07/17 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS