window.getSelection() 获取划线内容并实现 dom 追随功能

功能:鼠标对一段文本中某些文字进行划线之后,需要在当前划线文本处出现一个功能按钮显示对划线内容进行操作,比如收藏、添加样本库等功能。
一、需要了解的鼠标事件对象属性
给 dom 元素注册鼠标事件之后,会有 event 属性,要实现划线之后出现 “请选择复制或者删除”的功能,需要找到划线结束时的位置坐标(相对于当前页面的,包括滚动条),下面是三种不同的 event 属性的位置属性,我们需要使用的是 event.pageX, event.pageY
document.querySelector(".wrap").onmouseup = function (event) {console.log(event.clientX, event.clientY); // 视口位置(客户端位置),不包括滚动条console.log(event.pageX, event.pageY); // 页面位置,包括滚动条console.log(event.screenX, event.screenY); // 屏幕位置(也叫全屏位置)
}
二、整体实现流程
1、给文本整体 dom 绑定相对定位并注册 onmouseup 事件,用于获取 event 属性
2、触发 onmouseup 之后,获取页面位置
3、判断划线是否有内容,window.getSelection().toString().length !== 0
4、如果有划线内容,创建提示性 dom 元素,并指定绝对定位,分别设置 top,left 属性
5、这样就实现啦!大家遇到这样的需求不需要慌啦~
三、整体代码
<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>实现鼠标划线选中文本并进行操作</title><style>.wrap {position: relative;left: 0;width: 800px;margin-left: 20px;height: 300px;background-color: #f99;color: #1c1717;}</style></head><body><div class="wrap" onmouseup="handleMouseUp(event)">生活中总有一些美好的瞬间,让我们感受到温暖与幸福。清晨,阳光透过窗帘洒在床上,鸟儿在窗外欢快地歌唱,这一刻,仿佛整个世界都在呼唤新的开始。午后,和朋友一起漫步在公园,微风拂面,花香四溢,彼此的欢声笑语交织成一幅美丽的画卷。傍晚,夕阳西下,天边染上了绚丽的色彩,静坐在阳台,品一杯茶,心中涌起无尽的感慨。生活的点滴,正是这些简单而真实的瞬间,让我们在忙碌中找到宁静,在喧嚣中感受温暖。珍惜每一个当下,学会用心去感受生活的美好,无论是微小的快乐,还是深刻的感动,这些瞬间都将成为我们生命中最珍贵的记忆。让我们在平凡中发现不平凡,在日常中体会生活的深意。</div><script>document.querySelector(".wrap").onmouseup = function (event) {console.log(window.getSelection().toString());if (window.getSelection().toString().trim().length === 0) return;const dom = document.createElement("div");dom.style.position = "absolute";dom.style.top = event.pageY + "px";dom.style.left = event.pageX + "px";dom.style.background = "#fff";dom.innerHTML = "请选择复制或者删除";this.appendChild(dom);};</script></body>
</html>
相关文章:
window.getSelection() 获取划线内容并实现 dom 追随功能
功能:鼠标对一段文本中某些文字进行划线之后,需要在当前划线文本处出现一个功能按钮显示对划线内容进行操作,比如收藏、添加样本库等功能。 一、需要了解的鼠标事件对象属性 给 dom 元素注册鼠标事件之后,会有 event 属性&#…...
【人工智能】基于Python的自然语言处理:深入实现文本相似度计算
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 文本相似度计算是自然语言处理(NLP)中的核心任务,广泛应用于搜索引擎、推荐系统、问答系统等领域。本文全面解析文本相似度计算的核心技术,使用Python中的spaCy和sentence-transformers库实现多种方法,包括基…...
布局、组成部分
布局 线性布局 (Row/Column) 线性容器Row和Column构建,Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。 在布局容器内,可以通过space属性设置排列方向上子元素的间距,使各子元素在排列方向上有等间距效…...
Go, Jocko, Kafka
本篇内容是根据2016年8月份# 31. Go, Jocko, Kafka 音频录制内容的整理与翻译 Travis Jeffery 参加了节目,谈论 Go、Jocko、Kafka、Kafka 的存储内部结构如何工作,以及有趣的 Go 项目和新闻。 Erik St. Martin: 大家好,欢迎回到《GoTime》的另…...
CANoe 报文仿真
文章目录 一、单个/少数报文仿真1、Canoe 发送报文2、可以自定义该报文发送节点3、添加报文4、触发方式 二、ECU节点仿真1、导入DBC,添加节点2. 选择节点中的哪些报文可以发送3. 更新ECU 节点发送的报文数据 三、开始仿真激活/失效该 ECU节点 一、单个/少数报文仿真…...
升级thinkphp8最新版本,升级后发现版本不变
升级thinkphp8.0.3最新版本8.1.1,升级后发现版本不变, 更新TP有两个方法 1 全部更新(所有插件都一起更新) composer update 2 只更新TP框架核心 composer update topthink/framework 造成可能有两个原因,一是缓存问题,二是更新…...
工业大数据分析算法实战-day07
文章目录 day07概率图模型朴素贝叶斯(Naive Bayes)贝叶斯网络(Bayesian Network)一般图模型生成式和判别式模型图模型结构与模型推理 集成学习Boosting算法Stacking算法 day07 今天是第七天,昨日主要针对是第三章节中…...
六、nginx负载均衡
负载均衡:将四层或者七层的请求分配到多台后端的服务器上。 从而分担整个业务的负载。提高系统的稳定性,也可以提高高可用(备灾,其中一台后端服务器如果发生故障不影响整体业务). 负载均衡的算法 round robin 轮询 r…...
鸿蒙项目云捐助第十一讲鸿蒙App应用的捐助成功自定义对话框组件实现
在生活中,用户做了一个好事后,很多场合都会收到一份感谢。在捐助的行业也是一样的,用户捐出了一片爱心,就会收获一份温情。这里的温情是通过自定义对话框实现的。 一、通过自定义对话框组件实现捐款成功的信息页 这里用户捐款成…...
华为云联合中国信通院发布首个云计算智能化可观测性能力成熟度模型标准
2024年12月3日,由全球数字经济大会组委会主办,中国信息通信研究院(以下简称“中国信通院”)、中国通信企业协会承办的2024全球数字经济大会云AI计算国际合作论坛在北京成功召开。本次会议中,华为云联合中国信通院等单位…...
如何评估呼叫中心大模型呼出机器人的使用效果?
如何评估呼叫中心大模型呼出机器人的使用效果? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 评估呼叫中心大模型呼出机器人的使用效果是一个复杂而多维的过程,需要综合考虑多个方面&…...
ARM/Linux嵌入式面经(六一):联合汽车电子
1、自我介绍 2、介绍一下 ARM与RISCV的差异 在嵌入式系统领域,ARM与RISC-V是两种重要的指令集架构(ISA),它们各自具有独特的特点和优势。以下是对两者差异的详细介绍: ARM与RISC-V的差异 开源性与专有性: ARM:ARM架构是商业化的,任何想要使用ARM指令集或相关技术的设…...
unity 雷达
unity 雷达 首先去商店下载TouchScript插件 导入的时候勾选Enable TUIO 然后把预制体Cursors和TouchManager拖上 最后把TuioInput这个脚本挂上 脚本上的端口号尽量不改...
单元测试知识总结
我们希望每段代码都是自测试的,每次改动之后,都能自动发现对现有功能的影响。 1 测试要求 在对软件单元进行动态测试之前,应对软件单元的源代码进行静态测试; 应建立测试软件单元的环境,如数据准备、桩模块、模拟器…...
Android:使用Service处理息屏后的WebSocket的服务端推送消息并传递给前端
前言 之前我们在使 RESTful 访问服务端时,一般都是客户端请求服务端应答的方式,这种通讯方式,对于需要持续获取数据的情形都是采用轮询的方式,但是这种方式对两边的性能消耗很大,特别是服务端的压力很大。现在当我们使…...
Git Bash Here 中文显示乱码的处理方法
在使用"open Git Bash Here"时,遇到中文显示乱码问题。 原因:通常是由于编码设置不正确导致的。 open Git Bash Here —>鼠标右击空白处,点击「选项」|或「Options」 在「文本」或 「Text」选项卡中,找到"local…...
FreeBSD安装教程
FreeBSD 是一个功能强大且可靠的开源 UNIX 操作系统,适合服务器和桌面环境。本文将介绍如何安装 FreeBSD,从系统准备到基础设置,为你快速上手提供帮助。 一、准备工作 1. 硬件要求 CPU:支持 x86 或 AMD64 架构的处理器。 内存&a…...
Loki 各模式简介
目录 Loki 部署模式 单片模式 简单可扩展 微服务模式 Loki 部署模式 Loki 是一个由许多微服务组成的分布式系统。它还具有独特的构建模型,其中所有这些微服务都存在于同一个二进制文件中。 您可以使用命令行标志配置单个二进制文件的行为-target,以指…...
MySQL八股-全局锁,表级锁,表锁,元数据锁,意向锁,行级锁,行锁,间隙锁,临键
文章目录 全局锁表级锁表锁(表级锁)元数据锁(MDL,Meta Data Lock,表级锁)元数据锁演示元数据锁兼容的情况元数据锁互相阻塞的情况 意向锁(Intention lock,表级锁)意向锁分类意向锁演示:意向共享锁(**IS**)与…...
(四)Spring Cloud Alibaba 2023.x:高效构建 Gateway 网关服务
目录 前言 准备 项目集成 pom.xml引入依赖 启动类 yml文件添加网关配置 修改消费者FeignService类 结果验证 前言 Spring cloud alibaba 体系中构建微服务,我们使用Spring Cloud Gateway 作为服务网关, Gateway是Spring 官方推出的一款基于 Web…...
模型压缩新选择:用LLaMA-Factory实现QLoRA+GPTQ双重量化(附CUDA配置)
模型压缩新选择:用LLaMA-Factory实现QLoRAGPTQ双重量化实战指南 当大语言模型的参数量突破百亿级别,如何在消费级显卡上实现高效推理成为开发者面临的核心挑战。传统单一量化方法往往需要在精度和效率之间艰难取舍,而混合量化技术正在打开新的…...
告别运行库安装烦恼:如何用VisualCppRedist AIO一站式解决Windows依赖问题
告别运行库安装烦恼:如何用VisualCppRedist AIO一站式解决Windows依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 在使用Windows电脑时&…...
为什么Snap卸载Docker总卡在快照?揭秘自动备份机制与3种强制中断方案
为什么Snap卸载Docker总卡在快照?深度解析与实战解决方案 当你尝试卸载通过Snap安装的Docker时,是否遇到过进度条卡在"Save data of snap docker in automatic snapshot set #3"的情况?这种看似简单的卸载操作背后,隐藏…...
广州邮科如何为你的系统选择合适的在线式充电机?
设备运行最怕断电。在线式充电机,就是那个能让设备“永不断电”的充电神器。今天咱们用大白话,把它讲清楚。它到底是什么?简单说,就是能一边给设备供电,一边给电池充电的智能设备。设备不用停机,电池也能充…...
基于FireRedASR-AED-L与AIGC技术:自动生成语音错误分析报告
基于FireRedASR-AED-L与AIGC技术:自动生成语音错误分析报告 想象一下这个场景:你的团队刚刚完成了一轮大规模的语音识别系统测试,收集了上千小时的音频数据。接下来,你需要从海量的识别结果中,找出哪些词识别错了&…...
一个insert()调用背后的921行C++——OpenCV Delaunay三角剖分源码全解析
看这段代码: Subdiv2D subdiv(Rect(0, 0, 600, 600)); subdiv.insert(Point2f...
告别环境配置噩梦:手把手教你用OpenVINO 2024.4 + VS2019部署PyTorch图像分类模型(附完整代码)
从PyTorch到生产环境:OpenVINO 2024.4全链路部署实战指南 当你的PyTorch模型在实验环境中表现优异,如何将它无缝迁移到实际应用场景?本文将带你跨越从研究到生产的鸿沟,使用Intel OpenVINO工具包2024.4版本,在Visual S…...
Sammy.js项目实战:从零搭建完整的单页应用架构终极指南
Sammy.js项目实战:从零搭建完整的单页应用架构终极指南 【免费下载链接】sammy Sammy is a tiny javascript framework built on top of jQuery, Its RESTful Evented Javascript. 项目地址: https://gitcode.com/gh_mirrors/sa/sammy Sammy.js是一个轻量级的…...
OpenClaw 是基于 Node.js 开发的本地 AI 智能体网关,部署核心是先装 **Node.js ≥ 22**,再用 npm 全局安装并完成配置向导
OpenClaw 是基于 Node.js 开发的本地 AI 智能体网关,部署核心是先装 Node.js ≥ 22,再用 npm 全局安装并完成配置向导。以下是完整部署流程: 一、环境准备(必做) 1. 安装 Node.js 22 OpenClaw 要求 Node.js ≥ 22&…...
WZ文件编辑神器:Harepacker-resurrected从入门到精通的完整指南
WZ文件编辑神器:Harepacker-resurrected从入门到精通的完整指南 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected Harepacker-resu…...
