如果没加的DIV 的话,就正常,加了就出错误了,但是使用过程中不可能不在里面嵌套DIV 的,这个问题如何解决?
<head>
<style type="text/css">
.somecontent {
width: 1000px;
height: 1232px;
margin: 0 auto;
background-color: #ccc;
}
.floor {
width: 1000px;
margin: 0 auto;
height: 400px;
background: yellowgreen;
margin-bottom: 10px;
}
.f1 {
height: 433px;
}
.f2 {
height: 352px;
}
.leftNav {
position: fixed;
bottom: 110px;
left: 10px;
width: 60px;
}
.leftNav ul {
list-style: none;
}
.leftNav ul li {
width: 60px;
height: 60px;
background-color: #ccc;
}
.leftNav ul li a {
display: block;
width: 60px;
height: 60px;
line-height: 60px;
text-align: center;
text-decoration: none;
font-size: 14px;
}
.leftNav ul li a.number {
display: block;
}
.leftNav ul li a.chinese {
display: none;
color: white;
}
.leftNav ul li.cur a.number {
display: none;
}
.leftNav ul li.cur a.chinese {
display: block;
}
.leftNav ul li.cur {
background-color: rgb(111, 0, 0);
}
</style>
</head>
<body>
<div class="somecontent"></div>
<div class="leftNav" id="leftNav">
<ul>
<li>
<a href="javascript:;" class="number">1F</a>
<a href="javascript:;" class="chinese">百货</a>
</li>
<li>
<a href="javascript:;" class="number">2F</a>
<a href="javascript:;" class="chinese">男装</a>
</li>
<li>
<a href="javascript:;" class="number">3F</a>
<a href="javascript:;" class="chinese">女装</a>
</li>
<li>
<a href="javascript:;" class="number">4F</a>
<a href="javascript:;" class="chinese">裤子</a>
</li>
<li>
<a href="javascript:;" class="number">5F</a>
<a href="javascript:;" class="chinese">童装</a>
</li>
<li>
<a href="javascript:;" class="number">6F</a>
<a href="javascript:;" class="chinese">运动</a>
</li>
<li>
<a href="javascript:;" class="number">7F</a>
<a href="javascript:;" class="chinese">电子</a>
</li>
</ul>
</div>
<div class="floor f1"></div>
<div class="floor f2">
<!--例如这里添加几个div <dic class="abc"></div><dic class="abc"></div><dic class="abc"></div><dic class="abc"></div><dic class="abc"></div> 就出现错误了-->
</div>
<div class="floor f3"></div>
<div class="floor f4"></div>
<div class="floor f5"></div>
<div class="floor f6"></div>
<div class="floor f7"></div>
<div class="somecontent"></div>
<script>
// 获取DOM元素
var leftBtnList = document.getElementById('leftNav').getElementsByTagName('li');
// 声明楼层数组,楼层高度数组
var floorArr = [];
var floorOffsetTopArr = [];
// 将所有楼层与楼层高度添加进数组
for (var i = 0; i < document.body.childNodes.length; i++) {
if (document.body.childNodes[i].nodeType == '1' && document.body.childNodes[i].className.indexOf('floor') != -1) {
floorArr.push(document.body.childNodes[i]);
floorOffsetTopArr.push(document.body.childNodes[i].offsetTop);
}
}
// 声明当前楼层,初始没有进入任何楼层
var nowFlool = NaN;
// 数组超标给楼层高度数组添加一个假楼层高度
floorOffsetTopArr.push(floorOffsetTopArr[floorOffsetTopArr.length - 1] + floorArr[floorArr.length - 1].clientHeight);
// 添加滚动监听
window.onscroll = function() {
// 获取当前卷去位置
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
// 判读是否进入当前楼层
for (var i = 0; i < floorOffsetTopArr.length; i++) {
if (scrollTop >= floorOffsetTopArr[i] - 200 && scrollTop < floorOffsetTopArr[i + 1] - 200) {
// 如果在当前楼层不执行DOM操作
if (nowFlool != i) {
// 如果是原楼层不存在则不执行DOM操作
!isNaN(nowFlool) && (leftBtnList[nowFlool].className = "");
nowFlool = i;
// 当前楼层添加
leftBtnList[nowFlool].className = "cur";
}
// 如果进入楼层就退出,如果没有退出就是没有在任何楼层
break;
}
}
console.log(i);
// 不在任何楼层 i == floorOffsetTopArr.length
if (i == floorOffsetTopArr.length) {
!isNaN(nowFlool) && (leftBtnList[nowFlool].className = "");
nowFlool = NaN;
}
}
// 给按钮添加监听
for (var i = 0; i < leftBtnList.length; i++) {
leftBtnList[i].index = i;
leftBtnList[i].onclick = function() {
scrollAnimate(floorOffsetTopArr[this.index], 600)
}
}
// 定义滚动动画
function scrollAnimate(target, time) {
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
// 定义动画间隔
var interval = 10;
// 获取总帧率
var allFrame = time / interval;
// 获取总距离
var distance = target - scrollTop;
// 定义当前帧率
var currentFrame = 0;
// 定时器
var timer = setInterval(function() {
// 设置卷曲值
document.body.scrollTop = document.documentElement.scrollTop = Liear(currentFrame, scrollTop, distance, allFrame);
currentFrame++;
if (currentFrame == allFrame) {
clearInterval(timer)
}
}, interval)
}
// 随便定义一个缓动公式
function Liear(t, b, c, d) {
return t * c / d + b;
}
</script>
</body>
</html>