- father::元笔记汇总
1. 多级需求和方案设想及其结论
1.1. 当聚焦到对应页面的搜索框时, 按下指定按键可以放置光标到搜索高亮处
1.1.1. 添加按键事件监听
1.1.2. 先按下shift键再按下空格键才能触发前一个功能
1.2. 匹配全文关键字, 位置存到数组中, 然后与机制同步循环光标将会放置的地方
1.2.1. 捕捉用户选择下一个和上一个高亮关键字的动作
- 测试能不能捕获到用于上一个和下一个动作
1.2.2. 记录下用户触发了多少次上一个和下一个, 将其转换为与当前光标高亮的偏移量
1.2.3. 每次输入, 都要尝试去匹配搜索
1.2.3.1. 利用已有的keyup, 来尝试去匹配搜索
1.2.3.1.1. 获得当前页面的所有文本
- 通过app.workspace.containerEl.innerText
1.3. 能够在切换高亮的同时适应页面的动态变化
1.3.1. 每次切换上下个高亮的同时也重新匹配页面的关键字, 但依旧沿用上一次的偏移量
1.3.2. 如果对象条属于mod-no-match类的化, 就不用搜索了
1.4. 找到obsidian-search-match-highlight类的元素, 替换其文本为特殊文本, 用来定位, 然后正则匹配即可
2. 调研材料及结论
2.1. 搜索机制:
2.1.1. 结论:
匹配全文的关键字, 然后从光标处开始向后循环切换高亮
2.2. 查找框能触发的按键事件:
2.2.1. 结论:
- 除了F功能区, 一般回车什么的都能触发
- 还能获取是否按动了shift或Ctrl或Alt键
- 不过Shift检测只能用于非功能键上, 如abcd啥的
- 不能用单个功能键触发keypress
- 每个键都能触发keydown, 组合键一起触发
- 每个键都能触发keyup, 组合键分开触发
- 一直按住某个键, 会多次触发keydown, 但按住某个键再按另一个键, 则会停止连续触发
2.3. 自定义组合键:
2.3.1. 结论:
2.3.1.1. 用keydown检测增强键
keydown增强按键后, 标记为按下
2.3.1.2. 用keyup检测触发键和增强按键
keyup增强按键后, 标记为弹起 keyup指定按键且增强键为按下状态, 则触发组合键处理函数
2.4. 搜索框的跳转情况:
- 输入会重置偏移
- 点击改变光标位置, 也会重置偏移