自定义文件树提示框样式

本贴最后更新于 915 天前,其中的信息可能已经物是人非

思源的文件树提示样式是采用原生的,提示信息对我来说用处不大,且字很小,经过魔改,呈现以下效果

image.png

另外,搜索框也增加了提示信息:

image.png

魔改代码如下,可自行根据需要修改:

var oldTitle = null; //判断是否有title属性 var cls=null; //用于判断是否需要弹出提示框 var txt=null; document.addEventListener('mouseover', function (event) { let e = event.target.parentNode; let cls = e.getAttribute("class"); if(null==cls) return; // console.log(cls); if(cls.indexOf("b3-list-item") != -1){ txt=e.innerHTML; }else{ return; } let title = e.getAttribute("title"); console.log(title); oldTitle=title; if (title !== null) { e.title=""; let txts=title.split("\n"); txt=txts[0]; if (txts.length>1 && txts[1].indexOf("命名")!==-1){ txt=txts[1].replace("命名 ",""); } } setTimeout(function () { swsshowTooltip(txt, e); }, 0); }) document.addEventListener('mouseout', function (event) { if(oldTitle !== null){ event.target.parentNode.title=oldTitle; } swshideTooltip(); }) function swsshowTooltip(message, target) { const targetRect = target.getBoundingClientRect(); if (targetRect.height === 0 || !message) { swshideTooltip(); return; } let messageElement = document.getElementById("swstooltip"); if (!messageElement) { document.body.insertAdjacentHTML("beforeend", `<div class="tooltip" id="swstooltip">${message}</div>`); messageElement = document.getElementById("swstooltip"); } else { messageElement.innerHTML = message; } if (target.getAttribute("data-inline-memo-content")) { messageElement.classList.add("tooltip--memo"); // class https://github.com/siyuan-note/siyuan/issues/6161 } let left = targetRect.left; const position = target.getAttribute("data-position"); if (position === "right") { left = targetRect.right - messageElement.clientWidth; } else if (position === "center") { left = targetRect.left + (targetRect.width - messageElement.clientWidth) / 2; } swssetPosition(messageElement, left, targetRect.top + targetRect.height + 8, targetRect.height * 2 + 8); }; function swshideTooltip() { const messageElement = document.getElementById("swstooltip"); if (messageElement) { messageElement.remove(); } }; function swssetPosition(element, x, y, targetHeight = 0, targetLeft = 0) { element.style.top = y + "px"; element.style.left = x + "px"; const rect = element.getBoundingClientRect(); // windows 下悬浮菜单在 drag 位置时无法点击 let dragBarHeight = 0; /// #if !BROWSER dragBarHeight = document.getElementById("drag").clientHeight; /// #endif // 上下超出屏幕 if (rect.bottom > window.innerHeight || rect.top < dragBarHeight) { const top = y - rect.height - targetHeight; if (top > dragBarHeight && (top + rect.height) < window.innerHeight - dragBarHeight) { // 上部 element.style.top = top + "px"; } else if (top <= dragBarHeight) { // 位置超越到屏幕上方外时,需移动到屏幕顶部。eg:光标在第一个块,然后滚动到上方看不见的位置,按 ctrl+a element.style.top = dragBarHeight + "px"; } } if (rect.right > window.innerWidth) { // 展现在左侧 element.style.left = `${window.innerWidth - rect.width - targetLeft}px`; } else if (rect.left < 0) { // 依旧展现在左侧,只是位置右移 element.style.left = "0"; } }
.tooltip, .swstooltip { color: rgb(219, 215, 214); background-color: #055687; font-size: 18px; line-height: 200%; border:2px solid rgb(5, 160, 244); max-width: 520px; }
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25860 引用 • 107103 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 15710886610 via TAS-AN00

    老哥怎么实现,你的功能好像很棒,代码加到哪里不会操作能再详细教一下么

    1 回复
  • 其他回帖
  • xml2008 1
    作者

    改进后的代码,鼠标移到关键字上才会显示

    var oldTitle = null; //判断是否有title属性 var cls = null; //用于判断是否需要弹出提示框 var txt = null; document.addEventListener('mouseover', function(event) { let f1 = event.target.parentNode; //一级父节点 let f2 = event.target.parentNode.parentNode; //二级父节点 let f1class=f1.getAttribute("class"); let m = event.target //自身 txt = "" // console.log(m.tagName); if (m.tagName == "MARK" && f1class.indexOf("b3-list-item" != -1)) { txt = f1.innerHTML } else if (m.tagName == "SPAN" && f1class!=null && f1class.indexOf("b3-list-item" != -1)) { let title = f1.getAttribute("title"); if (title !== null) { oldTitle = title; f1.title = ""; let txts = title.split("\n"); txt = txts[0]; if (txts.length > 1 && txts[1].indexOf("命名") !== -1) { txt = txts[1].replace("命名 ", ""); //如果命名里包含 | 则换行显示 空格会被忽略 txts = txt.split("|"); if (txts.length > 1) { txt = "" for (let index = 0; index < txts.length; index++) { txt += "<p style='border-bottom: 1px dashed rgb(6, 196, 209);'>" + txts[index] + "</p>"; } } } } } setTimeout(function() { swsshowTooltip(txt, m); }, 0); }) document.addEventListener('mouseout', function(event) { if (oldTitle !== null) { event.target.parentNode.title = oldTitle; oldTitle = null; } swshideTooltip(); }) function swsshowTooltip(message, target) { const targetRect = target.getBoundingClientRect(); if (targetRect.height === 0 || !message) { swshideTooltip(); return; } let messageElement = document.getElementById("swstooltip"); if (!messageElement) { document.body.insertAdjacentHTML("beforeend", `<div class="tooltip" id="swstooltip">${message}</div>`); messageElement = document.getElementById("swstooltip"); } else { messageElement.innerHTML = message; } if (target.getAttribute("data-inline-memo-content")) { messageElement.classList.add("tooltip--memo"); // class https://github.com/siyuan-note/siyuan/issues/6161 } let left = targetRect.left; const position = target.getAttribute("data-position"); if (position === "right") { left = targetRect.right - messageElement.clientWidth; } else if (position === "center") { left = targetRect.left + (targetRect.width - messageElement.clientWidth) / 2; } swssetPosition(messageElement, left, targetRect.top + targetRect.height + 8, targetRect.height * 2 + 8); }; function swshideTooltip() { const messageElement = document.getElementById("swstooltip"); if (messageElement) { messageElement.remove(); } }; function swssetPosition(element, x, y, targetHeight = 0, targetLeft = 0) { element.style.top = y + "px"; element.style.left = x + "px"; const rect = element.getBoundingClientRect(); // windows 下悬浮菜单在 drag 位置时无法点击 let dragBarHeight = 0; /// #if !BROWSER dragBarHeight = document.getElementById("drag").clientHeight; /// #endif // 上下超出屏幕 if (rect.bottom > window.innerHeight || rect.top < dragBarHeight) { const top = y - rect.height - targetHeight; if (top > dragBarHeight && (top + rect.height) < window.innerHeight - dragBarHeight) { // 上部 element.style.top = top + "px"; } else if (top <= dragBarHeight) { // 位置超越到屏幕上方外时,需移动到屏幕顶部。eg:光标在第一个块,然后滚动到上方看不见的位置,按 ctrl+a element.style.top = dragBarHeight + "px"; } } if (rect.right > window.innerWidth) { // 展现在左侧 element.style.left = `${window.innerWidth - rect.width - targetLeft}px`; } else if (rect.left < 0) { // 依旧展现在左侧,只是位置右移 element.style.left = "0"; } }
  • xml2008
    作者

    参考这个帖子 啊哈哈哈代码来咯 ~~ 那你们先吃我就不打扰了哈 ~~


    或者:

    将代码添加到可以自动加载 js 文件里,例如 themm.js

    后面的 css 代码添加到 theme.css 文件里

  • 好像部分效果还是有点问题,比如搜索中,要是没有选中对应的高亮,就显示不对。

    image.png

    2 回复
  • 查看全部回帖

推荐标签 标签

  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    184 引用 • 824 回帖 • 1 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 384 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    229 引用 • 1432 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 1 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖 • 1 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 186 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 222 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    371 引用 • 1856 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 172 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 4 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 645 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 311 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 447 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 28 关注
  • danl
    174 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 350 关注