自定义文件树提示框样式

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

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

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; }
  • 思源笔记

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

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

    24827 引用 • 102133 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • xml2008
    作者

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


    或者:

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

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

  • 其他回帖
  • xml2008
    作者

    是的,鼠标移到高亮文字上才会完整显示。我的水平只能做到这样,有兴趣你可以改进一下 😄

  • 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"; } }
  • 查看全部回帖

推荐标签 标签

  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 689 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 384 关注
  • RabbitMQ

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

    49 引用 • 60 回帖 • 348 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    132 引用 • 796 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • 导航

    各种网址链接、内容导航。

    43 引用 • 177 回帖 • 2 关注
  • Telegram

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

    5 引用 • 35 回帖 • 3 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    31 引用 • 108 回帖 • 1 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 4 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 3 关注
  • 分享

    有什么新发现就分享给大家吧!

    247 引用 • 1794 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 592 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖
  • 智能合约

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

    1 引用 • 11 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 4 关注
  • Follow
    4 引用 • 12 回帖 • 8 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    183 引用 • 1010 回帖