目的:达到像各个大型购物网站一样的楼层跳跃
需求:点击ol中的li,屏幕滑动到对应的ul中li范围
思路:还是利用window.scrollTo();利用缓动动画原理实现屏幕滑动
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{
padding:0;
margin: 0;
}
body,html{
height: 100%;
}
ul{
list-style: none;
height: 100%;
}
ul li{
height:100%;
}
ol{
list-style: none;
position: fixed;
top: 80px;
left: 50px;
}
ol li{
width: 50px;
height: 50px;
border:1px solid #000;
cursor: pointer;
text-align: center;
line-height: 50px;
}
</style>
</head>
<body>
<ul>
<li>鞋子区域</li>
<li>袜子区域</li>
<li>裤子区域</li>
<li>裙子区域</li>
<li>帽子区域</li>
</ul>
<ol>
<li>鞋子</li>
<li>袜子</li>
<li>裤子</li>
<li>裙子</li>
<li>帽子</li>
</ol>
<script type="text/javascript" src=""></script>
<script type="text/javascript">
//需求:点击ol中的li,屏幕滑动到对应的ul中li范围
//思路:还是利用window.scrollTo();利用缓动动画原理实现屏幕滑动
//步骤:
//1.获取元素
//2.指定ul和ol中的li的背景色,对应的li背景色相同
//3.获取元素并绑定事件
//利用缓动动画原理实现屏幕滑动
//用scroll事件模拟盒子距离最顶端的距离
//获取元素
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;
//指定ul和ol中li的背景色,与对应的li背景色相同
//设置一个数组,里面装颜色,然后指定的颜色给数组中的指定元素
var arrColor = ["pink","blue","yellow","orange","green"];
//利用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(){
//获取步长
var step = (target-leader)/10;
//二次处理步长
step = step>0?Math.ceil(step):Math.floor(step);
//屏幕滑动
leader = leader+step;
window.scrollTo(0,leader);
//清除定时器
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>