想做一个类似medium的文字选中浮动菜单也不是件容易的事情。
medium的文字悬浮菜单大概思路是:
- 利用
Window.getSelection
API,获取用户的文字选取信息。然后利用getBoundingClientRect
计算菜单的显示位置。 - 监听 'selectionchange' 事件,更新选取信息。
- 监听 'mouseup' 事件,更新菜单的显示与否。
- 更新‘scroll’ 事件,重新计算菜单位置。
折腾了半天,总算没有大的bug了。如果想进一步优化,还需要考虑菜单的方向(类似popper.js那样,例如,如果菜单位置特别靠近屏幕顶端,则菜单朝下方弹出)。
网友评论