我这里想添加一个效果,就是点击跳转到哪个楼层的时候,楼层之间也是有过渡效果的,并不是瞬间改变,用的是什么方法,能否解释下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.content-part {
width: 1000px;
margin: 0px auto;
margin-bottom: 30px;
background-color: #ccc;
font-size: 50px;
}
.floornav {
position: fixed;
right: 40px;
top: 50%;
margin-top: -100px;
width: 120px;
height: 200px;
background-color: orange;
}
.floornav ul {
list-style: none;
}
.floornav ul li {
width: 120px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 26px;
/* 小手指针 */
cursor: pointer;
}
.floornav ul li.current {
background: purple;
color: white;
}
.info {
background: purple;
color: #fff;
}
</style>
</head>
<body>
<nav class="floornav">
<ul id="list">
<li data-n="科技" class="info">科技</li>
<li data-n="体育">体育</li>
<li data-n="新闻">新闻</li>
<li data-n="娱乐">娱乐</li>
<li data-n="视频">视频</li>
</ul>
</nav>
<section class="content-part" style="height:674px;" data-n="科技">
科技栏目
</section>
<section class="content-part" style="height:567px;" data-n="体育">
体育栏目
</section>
<section class="content-part" style="height:739px;" data-n="新闻">
新闻栏目
</section>
<section class="content-part" style="height:574px;" data-n="娱乐">
娱乐栏目
</section>
<section class="content-part" style="height:1294px;" data-n="视频">
视频栏目
</section>
<script>
var list = document.getElementById("list");
var contentParts = document.querySelectorAll("section");
var newli = document.querySelectorAll("#list li");
var t = 0;
var timer;
list.onclick = function (e) {
var n = e.target.getAttribute("data-n");
var x = (document.querySelector('section[data-n=' + n + ']'));
document.documentElement.scrollTop = x.offsetTop;
}
var arr = [];
for (var i = 0; i < contentParts.length; i++) {
arr.push(contentParts[i].offsetTop);
}
arr.push(Infinity);
console.log(arr);
var nowfloor = -1;
window.onscroll = function () {
var scrollTop = document.documentElement.scrollTop + 1;
// console.log(scrollTop);
for (var i = 0; i < arr.length; i++) {
// console.log(arr[i]);
if (scrollTop >= arr[i] && scrollTop < arr[i + 1]) {
break;
}
}
if (nowfloor != i) {
console.log(i)
nowfloor = i;
for (var j = 0; j < newli.length; j++) {
if (j == i) {
newli[j].className = "info";
} else {
newli[j].className = "";
}
}
}
}
</script>
</body>
</html>

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星