Js效果:楼层跳跃

实现思路

通过scroll的距离来判断当前的展示区域属于哪一个楼层

布局

Html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ul class="nav">
<li>享受品质</li>
<li>服饰美妆</li>
<li>家电手机</li>
<li>电脑数码</li>
<li>3C运动</li>
</ul>
<ul class="content">
<li>享受品质</li>
<li>服饰美妆</li>
<li>家电手机</li>
<li>电脑数码</li>
<li>3C运动</li>
</ul>

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<style>
*{margin:0;padding:0;}
li{
list-style: none;
color: #FFFFFF;
}
.nav{
position: fixed;
left: 15px;
top: 80px;
}
.nav li{
width: 70px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 14px;
cursor: pointer;
background: #666;
color: #FFFFFF;
}
.nav .now{
background: lightcoral;
}
html, body{
height: 100%;
}
ul{
height: 500%;
}
.content li{
height: 20%;
font: 100px "Microsoft YaHei";
text-align: center;
}

</style>

JS实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<script>
var navLiArr = $('ul')[0].children;
var contentLiArr = $('ul')[1].children;

//给每个不同楼层添加不同的颜色
var colorArr = ['lightgreen','lightseagreen','lightskyblue',
'lightgray','lightyellow'];

for (var i=0; i<contentLiArr.length;i++){
contentLiArr[i].style.background = colorArr[i];
}
// 点击转到对应的楼层
for (var i=0;i<navLiArr.length;i++){
navLiArr[i].index=i;
navLiArr[i].onclick=click;
}

function click () {
//改变样式
var parent=this.parentNode;
parent.isclick=true;
for(var j = 0; j <navLiArr .length; j++ ){
navLiArr[j].className='';
}
this.className='now';
var dis=this.index*document.body.offsetHeight*1;
clearInterval(window.timer);
window.timer=setInterval(function () {
var pos=(dis-scroll().top)/10;
pos=pos>0?Math.ceil(pos):Math.floor(pos);
window.scrollTo(0,scroll().top+pos);
if(dis==scroll().top){
clearInterval(window.timer);
parent.isclick=false;
}
})

}

window.onscroll=function (ev) {
// console.log(ev)
if(!navLiArr[0].parentNode.isClick){
//滚动到相应板块 改变样式
//获取滚动距离 scroll()。top
var dis=document.body.offsetHeight;
var topDis=scroll().top;
var t=topDis/dis;
//t 与 navLiArr[i].index 比较
t=Math.round(t);
console.log(t);
for(var k = 0; k <navLiArr .length; k++ ){
navLiArr[k].className='';
}
navLiArr[t].className='now';
}
}
</script>
文章目录
  1. 1. 实现思路
  2. 2. 布局
    1. 2.1. Html
    2. 2.2. CSS
  3. 3. JS实现
|