prosemirror 学习记录(三)tooltip

news2024/9/24 1:15:26

prosemirror Tooltip example

自己写的版本:

import { Plugin } from "prosemirror-state";

export const MyTooltipPlugin = new Plugin({
  view(view) {
    const tooltip = document.createElement("div");
    tooltip.classList.add("my-custom-tooltip");
    view.dom.parentNode.appendChild(tooltip);
    return {
      update(view, prevState) {
        const selection = view.state.selection;
        console.log(selection);
        if (selection.empty) {
          tooltip.style.display = "none";
          return;
        }
        tooltip.style.display = "block";
        const selectionFragment = view.state.doc.cut(selection.from, selection.to);
        const length = selectionFragment.textContent.length;
        tooltip.innerText = length;
        tooltip.style.left = view.coordsAtPos(selection.from).left + 10 + "px";
        tooltip.style.top = view.coordsAtPos(selection.from).top - 30 + "px";
      },
    };
  },
});
.my-custom-tooltip {
  border: 1px solid #ddd;
  background: white;
  position: absolute;
  font-size: 12px;
}

效果:
在这里插入图片描述

关键点:

  • Plugin - view - update
  • view.dom.parentNode.appendChild
  • view.coordsAtPos
  • view.state.doc.cut 获取选区 fragment,再通过 textContent.length 获取文本长度

官网代码不同之处:

  •   // Don't do anything if the document/selection didn't change
      if (lastState && lastState.doc.eq(state.doc) && lastState.selection.eq(state.selection)){
      	return
      }
    
  • 官方示例中用 selection.to - selection.from 计算选区长度,和我的方法得到的结果不一样。我的方法获取的是纯文本的长度,to - from 获取的不止文字长度。按需选择。

  • 官方示例计算位置时减去了父容器的偏移量。它这样算才是对的,因为 coordsAtPos 是相对屏幕的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1131594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型在数据分析场景下的能力评测

“你们能对接国产大模型吗?” “开源的 LLaMA 能用吗,中文支持怎么样?” “私有化部署和在线服务哪个更合适?” 自 7 月 14 日发布 AI 数智助理 Kyligence Copilot 后,我们收到了很多类似上面的咨询,尤其…

Django token 认证原理与实战

概述 cookie、session 与token 的区别 Cookie的作用 cookie的存储量很小,一般不超过4Kcookie并不会保存很多信息,一般用来存储登录状态cookie是以键值对进行表示的(keyvalue),例如nameli,表示cookie的名字是name,cookie携带的值是licookie的存储分为会…

php 使用 python translate 实现离线翻译

下载类库 下载语言模型 使用 脚本 offline_translation.py # 离线翻译服务代码 import warningsfrom flask import Flask, request from gevent import pywsgi from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline, AutoModelWithLMHead from transf…

TCP 协议的可靠传输机制是怎样实现的?

TCP 协议是一种面向连接的、可靠的、基于字节流的传输层协议。 1 它通过以下几种方法来保证数据传输的可靠性: 检验和:TCP 在发送和接收数据时,都会计算一个检验和,用来检测数据是否在传输过程中发生了错误或损坏。如果检验和不匹…

【Docker】Docker Compose的使用

我们知道使用一个Dockerfile模板文件,可以让用户很方便的定义⼀个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。 例如要实现一个Web项目,除了Web服务容器本身,往往还需要…

python实验16_网络爬虫

实验16:网络爬虫 1.实验目标及要求 (1)掌握简单爬虫方法。 2. 实验主要内容 爬取中国票房网 ① 爬取中国票房网(www.cbooo.cn)2019年票房排行榜前20名的电影相关数据 代码部分: import time from selenium.webdriver impor…

抽丝剥茧,Redis使用事件总线EventBus或AOP优化健康检测

目录 前言 Lettuce 什么是事件总线EventBus? Connected Connection activated Disconnected Connection deactivated Reconnect failed 使用 一种另类方法—AOP 具体实现 前言 在上一篇深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康…

FastAPI 快速学习之 Flask 框架对比

目录 一、前言二、FastAPI 优势三、Hello World四、HTTP 方法五、URL 变量六、查询字符串七、POST 请求八、文件上传九、表单提交十、Cookies十一、模块化视图十二、数据校验十三、自动化文档Swagger 风格ReDoc 风格 十四、CORS跨域 一、前言 本文主要对 FastAPI 与 Flask 框架…

cola架构:有限状态机(FSM)源码浅析及扩展

目录 0. cola状态机简述 1.cola状态机使用实例 2.cola状态机源码解析 2.1 语义模型接口源码 2.1.1 Condition和Action接口 2.1.2 State 2.1.3 Transition接口 2.1.4 StateMachine接口 2.2 Builder模式 2.2.1 StateMachine Builder模式 2.2.2 ExternalTransitionBuil…

Vue3-使用create-vue创建项目

认识create-vue create-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代构建工具),为开发提供极速响应。 使用create-vue创建项目 1.前提环境条件 已安装16.0或更高版本的Node.js node -v 2.创建一个Vue应用 npm init…

经典卷积神经网络 - GoogLeNet

GoogLeNet是google推出的基于Inception模块的深度神经网络模型,在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改进,形成了Inception V2、Inception V3、Inception V4等版本。 Inception块 4个路径从不同层面抽取信息&#xff0…

轻松掌握这几种文件批量重命名方法

文件批量重命名一直是许多人在日常工作中经常遇到的问题。如何快速、准确地重命名文件,同时保证文件名的有序性和可读性,是一个值得探讨的问题。本文将介绍一种利用固乔文件管家软件批量重命名文件的方法,帮助您轻松解决这一难题。 固乔文件管…

解析外贸开发信的结构?营销邮件书写技巧?

做外贸的开发信结构是怎样的?写外贸邮件的注意事项? 外贸开发信是国际贸易中至关重要的一环,它不仅是与潜在客户建立联系的第一步,也是一种有效的市场推广工具。蜂邮EDM将深入解析外贸开发信的结构,帮助您更好地理解如…

基于springboot+vue实现地方美食分享网站项目【项目源码+论文说明】

基于springbootvue实现地方美食分享网站演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求…

VulnHub SICKOS: 1.1

一、信息收集 1.nmap扫描 IP:192.168.103.177 开放端口:22、3128、8080 这里可以看到3128端口是作为代理使用的,所以想访问80端口必须走3128端口代理 2.利用burp挂上游代理 然后直接开代理,访问80端口 3.扫描目录 因为3128端…

使用adobe font style 工具绘制的艺术字,请鉴赏。

Adobe Fireflyhttps://firefly.adobe.com/generate/font-styles

简化通知基础设施:开源的消息通知服务 | 开源专题 No.41

novuhq/novu Stars: 22.9k License: MIT Novu 是一个开源的通知基础设施项目,它提供了统一的 API 来通过多个渠道发送通知,包括应用内、推送、电子邮件、短信和聊天。主要功能有: 为所有消息提供商 (应用内、电子邮件、短信、推送和聊天) 提…

安装EasyX--图形库--从代码到图形

一.软件安装 EasyX 是一款针对 Visual C 的免费绘图库软件,免费哦!支持 VC6.0 ~ VC2022 EasyX Graphics Library for C 这是它的网址 进入后点机下载即可 双击安装包 在这一步,注意选择适合你电脑上安装的编译器版本,我的电脑安装的是vs2022,那么我选…

微服务、事件驱动架构和 Kafka

想象一下,有一个巨大的整体应用程序,其中许多复杂的功能紧密地联系在一起。可扩展性是一个很大的挑战,部署过程可能会变得非常繁琐,而且由于内部组件高度耦合,改变功能流程也不是那么容易。 也许很多人都熟悉这个概念…

安科瑞无线测温产品在某风电场项目的超温事故预警及分析-安科瑞 蒋静

摘 要:作为保证系统安全运行的重要设备的高压开关柜装置,其内部导电连接处过热会导致电气设备的损坏,更严重的是可能还会发生火灾等严重事故。因此,电力系统中电器设备安全运行的一个重要课题就是对高压开关柜实施在线监测。本文主要研究的是针对高压开关柜接点的无…