Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
亚马逊的快速菜单
Search
sokamal
October 31, 2013
Programming
1
110
亚马逊的快速菜单
快速展开的菜单原理介绍,以及 jQuery-menu-aim 插件使用
sokamal
October 31, 2013
Tweet
Share
More Decks by sokamal
See All by sokamal
RETINA时代的前端优化
ikamal
2
180
jQuery最佳实践
ikamal
1
94
Less_css_介绍.pdf
ikamal
1
67
Other Decks in Programming
See All in Programming
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
110
Design Foundational Data Engineering Observability
sucitw
3
190
ソフトウェアテスト徹底指南書の紹介
goyoki
1
150
Kiroで始めるAI-DLC
kaonash
2
590
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
690
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
520
1から理解するWeb Push
dora1998
7
1.9k
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
150
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
300
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
1.6k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
How GitHub (no longer) Works
holman
315
140k
Unsuck your backbone
ammeep
671
58k
The Cult of Friendly URLs
andyhume
79
6.6k
Practical Orchestrator
shlominoach
190
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Music & Morning Musume
bryan
46
6.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Into the Great Unknown - MozCon
thekraken
40
2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Transcript
亚马逊的快速菜单 算法及应用场景 -- ECD kamalyu
上下移动--快速切换
斜向二级菜单移动--延时收起当前二级菜单 http://www.amazon.cn/
jQuery-menu-aim https://github.com/kamens/jQuery-menu-aim .menuAim({ activate: function() {}, deactivate: function() {}, enter:
function() {}, exit: function() {}, exitMenu: function() {}, rowSelector: "> li",... // "left", "above", or "below". Defaults to "right". submenuDirection: "right" });
服务平台的例子 $menu.menuAim({ // 一级菜单 rowSelector: "[data-menuid]", // 激活菜单 activate:activateSubmenu, //
取消激活 deactivate:deactivateSubmenu // 离开整个菜单区域 ,exitMenu:exitAllMenu });
实现原理 $menu .mouseleave(mouseleaveMenu) .find(options.rowSelector) .mouseenter(mouseenterRow) .mouseleave(mouseleaveRow) .click(clickRow);
实现原理 menuRow.mouseenter(mouseenterRow) // (可能)绑定延时函数 menuRow.click(clickRow) // 立即active当前一级菜单 menuRow.mouseleave(mouseleaveRow) // 删除延时函数
mouseleave(mouseleaveMenu) // 删除延时函数,调用离开菜单区域的回调函 数
mouseenterRow possiblyActivate 计算activeDelay , 插件的核心算法部分 如果 delay>0 就设置延时再调用 possiblyActivate
核心算法 activeDelay() 如果当前没有展开的二级分类,返回 0; 如果是从菜单区域之外进入,返回 0; 如果鼠标静止不动,返回 0; 计算轨迹,如果朝向二级菜单,返回 delay;
如果没有朝向二级菜单,返回 0;
鼠标轨迹计算 一个FIFO的对象,始终记录鼠标最后三个坐标; 取第一个和第三个做对比,推断运动方向;
鼠标轨迹计算 简化一下 C-B1 C-A1 ------- < -------- B-B1 A-A1
鼠标轨迹计算 上方同理 D-B1 D-A1 ------- < -------- B-B1 A-A1 上下左右方向都可以由相同的公式
计算
适用场景 一级菜单比较宽
不适用场景 一级菜单比较短 此时直接给每个菜单加适当的延时更合适 鼠标进入另外一个一级菜单的瞬间,不一定朝向二级菜单方向
Thank you