-
希望鼠标悬浮自动展开大纲
2024-09-24 15:06我让 GPT 辅助写了一个 JS 片段,基本能实现,但我感觉交互很奇怪:
// 鼠标移动到大纲标题自动展开与折叠下级 JS片段 setTimeout(() => { const headings = document.querySelectorAll('li.b3-list-item[data-type="NodeHeading"]'); headings.forEach((heading) => { let hideTimeout; let removeTimeout; let isMouseInHeading = false; // 标志变量,跟踪鼠标是否在 heading 内 let isMouseInSubMenu = false; // 标志变量,跟踪鼠标是否在子菜单内 // 鼠标进入列表项 heading.addEventListener('mouseenter', () => { isMouseInHeading = true; // 设置标志变量 clearTimeout(removeTimeout); // 清除可能存在的移除定时器 let nextElement = heading.nextElementSibling; if (nextElement && nextElement.tagName.toLowerCase() === 'ul') { removeTimeout = setTimeout(() => { if (isMouseInHeading) { nextElement.classList.remove('fn__none'); } }, 200); // 延迟 200ms 后再移除 fn__none } }); // 鼠标离开列表项 heading.addEventListener('mouseleave', () => { isMouseInHeading = false; // 更新标志变量 hideTimeout = setTimeout(() => { let nextElement = heading.nextElementSibling; if (nextElement && nextElement.tagName.toLowerCase() === 'ul' && !isMouseInSubMenu) { nextElement.classList.add('fn__none'); } }, 200); // 延迟 200ms 后再添加 fn__none }); // 鼠标移动到 ul > li 上时,阻止 fn__none 添加 let nextElement = heading.nextElementSibling; if (nextElement) { nextElement.querySelectorAll('li').forEach((ulItem) => { ulItem.addEventListener('mouseenter', () => { isMouseInSubMenu = true; // 更新标志变量 clearTimeout(hideTimeout); // 清除定时器,防止隐藏 clearTimeout(removeTimeout); // 清除移除定时器 }); ulItem.addEventListener('mouseleave', () => { isMouseInSubMenu = false; // 更新标志变量 hideTimeout = setTimeout(() => { if (nextElement) { nextElement.classList.add('fn__none'); } }, 200); }); }); } }); }, 1000);
-
折叠与展开 的操作问题
2024-09-24 12:03展开当前层级会将当前层级下的所有层级全部展开,有什么办法可以做到只展开当前层级而不展开当前层级下的其他折叠层级吗
目前没有解决方案:Issue #11752 · siyuan-note/siyuan
-
“/”敲斜杠后弹出的快捷功能面板中的选项条目能否删除 / 自定义?
2024-09-22 15:36在 CSS 里用这个
data-value
的值我感觉比较抽象。如果 Pull Request #12547 · siyuan-note/siyuan 合并的话就能用
data-id
属性了。