2.2 第二种情况,通过鼠标中键滚动或拖动滚动条,这个时候要关联左边内容和右边菜单项,这是最难的地方。考虑分步实施,先易后难,各各击破的策略。
2.2.1 先收集标题元素的坐标高度。也就是所有的h1标签的垂直高度。存入数组1.
2.2.2 收集菜单项中的a元素,存入数组2.
2.2.3 监听滚动事件,判断当前内容属于哪个菜单项。
做一步的时候,建议在稿纸上画一个图:
A1
****************
* A2
*
****************
* A3
*
****************
*
* A4
*
每滚动一次,就判断当前滚动的距离是在哪一个区间,如果是0到A1则是第1章,A1到A2则是第2章,以此类推。
关于元素的位置高度,我这里简单地用element.offsetTop来获取,可能会存在兼容性问题,如果用jquery来做的话,应当是$('element').offset().top,
同样的,滚动条的高度,我也是简单的用了document.body.scrollTop来获取,如果换成jquery的话,应当是$(window).scrollTop();
画图的作用是把抽象的问题具体化,帮助我们思考,找出规律。也许称为“建模”会显得高大上一些吧。
需要强调的是数组1和数组2中的关系应当是一一对应的。如<a href="#h1">对应的是<h1>。
2.3 第三种情况,直接进入页面时的菜单状态指示。比如通过index.html#h3这样的地址进来,菜单中的h3应当要突出显示。
3. 实现悬浮菜单的显示和隐藏动画。
3.1 这一步应当是比较简单的,可以考虑先做。利用css3的tramsform属性就可以了,简单高效,跨浏览器的话,注意兼容。