原生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 StringBuilder类实现
Dec 22 Javascript
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
Prototype源码浅析 Enumerable部分(二)
Jan 18 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
Dec 13 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
Nov 24 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
利用hasOwnProperty给数组去重的面试题分享
Nov 05 Javascript
Nginx设置为Node.js的前端服务器方法总结
Mar 27 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
Jun 07 Javascript
微信小程序实现简单购物车功能
Dec 30 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
python调用摄像头显示图像的实例
2018/08/03 Python
浅谈django orm 优化
2018/08/18 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
师范生个人推荐信
2013/11/29 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
主要负责人任命书
2014/06/06 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL