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
93
Less_css_介绍.pdf
ikamal
1
67
Other Decks in Programming
See All in Programming
VS Code Update for GitHub Copilot
74th
1
560
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
140
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
260
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
2
250
RailsGirls IZUMO スポンサーLT
16bitidol
0
140
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
260
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
0
600
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
100
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
330
Discover Metal 4
rei315
2
110
システム成長を止めない!本番無停止テーブル移行の全貌
sakawe_ee
1
160
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Designing Experiences People Love
moore
142
24k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Bash Introduction
62gerente
614
210k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
Done Done
chrislema
184
16k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
The Language of Interfaces
destraynor
158
25k
Thoughts on Productivity
jonyablonski
69
4.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