老师麻烦解释一下下面的代码,谢谢

来源:5-3 标识楼层号和抵达指定楼层

穿梭时间

2019-07-30 22:37:02

// elevator

floor.whichFloor = function () {

var num = -1;//这个一开始定义有什么用呢,不是一滚动就会调用$floor遍历被后面直接覆盖吗?


//测试了一下一滚动就触发遍历,当移动到floor的可视范围,就触发2次的原因是什么?

floor.$floor.each(function (index, elem) {

var floorData = floor.floorData[index];

num = index;

console.log('触发遍历')//测试?

if (floor.$win.scrollTop()+floor.$win.height()/2 < floorData.offsetTop) {

num = index - 1;

return false;//这个相当于break吗,num值会保存下来吗?

}

});


return num;

};


写回答

1回答

好帮手慕星星

2019-07-31

同学你好,

1、声明num值为-1,表示的是-1层,因为在左侧导航项中判断中当num值为-1的时候导航隐藏:

http://img.mukewang.com/climg/5d40fcc00001c72a07630334.jpg

其实这里不设置num值为-1也可以,只声明一下:

http://img.mukewang.com/climg/5d40fd17000192d309760426.jpg

在下面判断中将index减去了1,当index为0的时候,减去1为-1,也可以达到导航判断的条件。

2、在滚动事件中调用了setElevator方法,在这个方法中调用了whichFloor方法:

http://img.mukewang.com/climg/5d40fd7b00012c8a08110600.jpg

所以一滚动,就会触发console.log(),输出的次数不止两次哦,也有多次的情况。

3、这里return false相当于break:

http://img.mukewang.com/climg/5d40fe12000173f909720427.jpg

在结束当前循环之后给num值赋值了,所以num就有了当前值,然后下面就将num值返回了。

自己可以再测试理解下,祝学习愉快!

0

0 学习 · 14456 问题

查看课程