额..其实这是在慕课网放了很久的课程,不过一直沉下心去学习。一直以为不就是个菜单,所以没认真对待。然而,仔细学习后,发现还是有很多门道在的。启发式编程真的好神奇,佩服这种思路~
直奔主题吧~京东的无延迟菜单有什么特点:
- 在一级菜单滑向二级菜单的时候,鼠标不需要特意避开一级菜单可以直接移动过去(设置了延迟)
- 在一级菜单内上下滑动的时候,不需要延迟设置。
- 利用了向量的知识进行启发式设置延时问题。
向量启发式判断
由于用户在一级菜单移动向二级菜单的时候往往更倾向于直线移动。然而如果单单使用延时设置会造成一级菜单之间切换的延迟,典型地解决了一个问题冒出一个问题。于是就需要在延时设置的位置再加一层判断(用户到底是想要切换一级菜单还是想移动到二级菜单)
于是就利用了向量的知识。鼠标是否位于三角形内,这里建议画图理解————鼠标上一次位置,二级菜单的左上角和二级菜单的左下角三个点构成的三角形。判断鼠标当前位置是否位于这个三角形内,如果是,则判断为向二级菜单移动。否则是一级菜单之间的切换。
这种就是启发式编程,通过研究用户的正常操作行为推导出符合条件的模式~
其实这种小demo直接看代码更容易理解~
这里稍微总结一些小点:
- 如果不是用数据控制二级菜单,每一个二级菜单要拥有一个独立的dom结构,其余内容隐藏。
- 绑定mouseenter,mouseleave,可以确保鼠标仍旧在父元素移动的时候不会触发mouseleave。如果运用mouseover和mouseout则会出现上述问题。
- 使用节流函数以及延迟函数。
- 向量的知识是这个demo最重要的部分,务必理解。
|
|