<!DOCTYPE html> | |
<html> | |
<head lang="en"> | |
<meta charset="UTF-8"> | |
<title></title> | |
<style> | |
* { | |
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: 80px; | |
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> | |
<li>帽子区域</li> | |
</ul> | |
<ol> | |
<li>鞋子</li> | |
<li>袜子</li> | |
<li>裤子</li> | |
<li>裙子</li> | |
<li>帽子</li> | |
</ol> | |
<script src="animate.js"></script> | |
<script> | |
//需求:点击ol中的li,屏幕滑动到对应的ul中的li的范围。 | |
//思路:还是利用window.scrollTo();利用缓动动画原理实现屏幕滑动。 | |
//步骤: | |
//0.获取元素 | |
//1.指定ul和ol中的li的背景色,对应的li背景色相同 | |
//2.老三步。(获取元素并绑定事件) | |
//3.利用缓动动画原理实现屏幕滑动 | |
//4.用scroll事件模拟盒子距离最顶端的距离。 | |
//0.获取元素 | |
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 = ["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; | |
//2.老三步。(并绑定事件)循环绑定,为每一个li绑定点击事件 | |
olLiArr[i].onclick = function () { | |
//***获取目标位置 | |
//获取索引值。 | |
target = ulLiArr[this.index].offsetTop; | |
//要用定时器,先清除定时器 | |
clearInterval(timer); | |
//3.利用缓动动画原理实现屏幕滑动 | |
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); | |
} | |
} | |
//4.用scroll事件模拟盒子距离最顶端的距离。 | |
window.onscroll = function () { | |
//每次屏幕滑动,把屏幕卷去的头部赋值给leader,模拟获取显示区域距离顶部的距离 | |
leader = scroll().top; | |
} | |
</script> | |
</body> | |
</html> |
JS 楼层跳跃
猜你喜欢
转载自blog.csdn.net/weixin_42304280/article/details/80711451
今日推荐
周排行