纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)


Posted in Javascript onOctober 25, 2017

实现效果演示:

纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)

实现代码及注释:

<!DOCTYPE html>
<html>
<head>
 <title>楼层跳跃式的页面布局</title>
 <meta charset="utf-8">
 <style type="text/css">
  *{
   margin: 0;
   padding: 0;
  }
  body, html{
   height: 100%;
  }
  ul{
   list-style: none;
   height: 100%;
  }
  ul li{
   height: 100%;
  }
  ol{
   list-style: none;
   position: fixed;
   top:200px;
   left: 50px;
  }
  ol li{
   width: 50px;
   height: 50px;
   border: 1px solid #000;
   text-align: center;
   line-height: 50px;
   margin-top: -1px;
   cursor: pointer;
  }
 </style>
</head>
<body>
<ul>
 <li>第一区域</li>
 <li>第二区域</li>
 <li>第三区域</li>
 <li>第四区域</li>
</ul>
<ol>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
</ol>
<script type="text/javascript" src="myScroll.js"></script>
<script type="text/javascript">
 // 点击ol的li,屏幕滑动到对应的ul的li
 // 利用window.scrollTo();缓动动画实现
 var ul = document.getElementsByTagName("ul")[0];
 var ol = document.getElementsByTagName("ol")[0];
 var ulLiArr = ul.children;
 var olLiArr = ol.children;
 var target = 0;
 var leader = 0;
 var timer = null;
 // 1. 指定ul和ol中li的背景色,对应li的背景色相同
 var arrColor = ["green","orange","yellow","red","gold"];
 // 利用for循环给两个数组中的元素上色
 for(var i=0; i<arrColor.length; i++){
  ulLiArr[i].style.backgroundColor = arrColor[i];
  olLiArr[i].style.backgroundColor = arrColor[i];
  // 属性绑定索引值
  olLiArr[i].index = i;
  // 循环绑定,为每一个li绑定点击事件
  olLiArr[i].onclick =function(){
   // 获取目标位置
   target = ulLiArr[this.index].offsetTop;
   clearInterval(timer);
   // 利用缓动动画原理实现屏幕滑动
   timer = setInterval(function(){
    // (1).获取步长
    var step = (target-leader)/10;
    // (2).二次处理步长
    step = step > 0 ? Math.ceil(step) : Math.floor(step);
    // (3).屏幕滑动
    leader = leader + step;
    window.scrollTo(0, leader);
    // (4).清除定时器
    if(Math.abs(target-leader) <= Math.abs(step)){
     window.scrollTo(0, target);
     clearInterval(timer);
    }
   }, 25);
  }
  // 用scroll事件模拟盒子距离最顶端的距离
  window.onscroll = function(){
   // 每次屏幕滑动,把屏幕卷去的值赋给leader,模拟获取显示区域距离顶部的距离
   leader = scroll().top;
  }
 }
</script>
</body>
</html>

myScroll.js

function scroll() { 
 // 开始封装自己的scrollTop
 if(window.pageYOffset !== undefined) { 
  // ie9+ 高版本浏览器
  // 因为 window.pageYOffset 默认的是0,所以需要判断
  return {
   left: window.pageXOffset,
   top: window.pageYOffset
  }
 }
 else if(document.compatMode === "CSS1Compat") {
  // 标准浏览器,来判断有没有声明DTD
  return {
   left: document.documentElement.scrollLeft,
   top: document.documentElement.scrollTop
  }
 }
 return {
  // 未声明 DTD
  left: document.body.scrollLeft,
  top: document.body.scrollTop
 }
}

总结

以上所述是小编给大家介绍的纯html+css+javascript实现楼层跳跃式的页面布局(实例代码),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
JS拖动技术 关于setCapture使用
Dec 09 Javascript
Jquery实现页面加载时弹出对话框代码
Apr 19 Javascript
Json和Jsonp理论实例代码详解
Nov 15 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
node使用Mongoose类库实现简单的增删改查
Nov 08 Javascript
JavaScript实现的九种排序算法
Mar 04 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
Feb 24 Javascript
浅谈Node.js之异步流控制
Oct 25 #Javascript
AngularJS 实现购物车全选反选功能
Oct 24 #Javascript
React Native时间转换格式工具类分享
Oct 24 #Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 #Javascript
React Native AsyncStorage本地存储工具类
Oct 24 #Javascript
React Native验证码倒计时工具类分享
Oct 24 #Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 #Javascript
You might like
php实现水仙花数的4个示例分享
2014/04/08 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
python中dict使用方法详解
2019/07/17 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
想学画画?python满足你!
2020/12/24 Python
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
商务主管岗位职责
2013/12/08 职场文书
四年级语文教学反思
2014/02/05 职场文书
中学校庆方案
2014/03/17 职场文书
2015年教师国培感言
2015/08/01 职场文书
法制教育主题班会
2015/08/13 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
HTML中的表格元素介绍
2022/02/28 HTML / CSS