原生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 相关文章推荐
会自动逐行上升的文本框
Jun 30 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
深入解析JavaScript中的数字对象与字符串对象
Oct 21 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
Jan 08 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
js手机号批量滚动抽奖实现代码
Apr 17 Javascript
jQuery快速高效制作网页交互特效
Feb 24 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
JS非空验证及邮箱验证的实例
Aug 11 Javascript
swiper插件自定义切换箭头按钮
Dec 28 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
前端开发必知的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 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
一些.net面试题
2014/10/06 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
学习保证书
2015/01/17 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
感恩教师节主题班会
2015/08/12 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
gateway网关接口请求的校验方式
2021/07/15 Java/Android