空循环体的while循环如何助力activeMenu()函数运行?
循环的工作原理
这个while循环的逻辑完全体现在条件判断语句里,空循环体只是因为不需要额外执行代码,所有操作都在循环条件中完成:
- 初始时
len被赋值为页面中section元素的总数。 - 每次循环开始前,先执行
--len将len减1,接着判断两个条件(逻辑与&&会短路,左边不满足时右边不会执行):--len的结果不为0(如果len减到0,左边条件为false,整个判断直接不成立)- 当前页面滚动距离
window.scrollY加上97,小于索引为len的section元素的顶部偏移量offsetTop
- 只要两个条件同时满足,循环就会持续执行(也就是不断给
len减1,重复判断),直到其中一个条件不满足,循环终止。
对函数的作用
这个循环的核心作用是定位当前滚动位置对应的导航项索引:
它从最后一个section开始向前遍历,找到第一个符合“当前滚动位置(加97偏移,一般是为了抵消导航栏的高度,避免导航栏遮挡导致判断偏差)未超过该section顶部”的临界点,此时的len就是当前视图区域对应的section的索引。
后续代码会移除所有导航项的active类,再给索引为len的导航项添加active类,从而实现滚动页面时自动高亮对应导航的效果。
内容的提问来源于stack exchange,提问作者Vishnu-
相关产品推荐
相关产品推荐

