当前位置: 首页 > news >正文

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>

http://www.lryc.cn/news/505288.html

相关文章:

  • 【人工智能】基于Python的自然语言处理:深入实现文本相似度计算
  • 布局、组成部分
  • Go, Jocko, Kafka
  • CANoe 报文仿真
  • 升级thinkphp8最新版本,升级后发现版本不变
  • 工业大数据分析算法实战-day07
  • 六、nginx负载均衡
  • 鸿蒙项目云捐助第十一讲鸿蒙App应用的捐助成功自定义对话框组件实现
  • 华为云联合中国信通院发布首个云计算智能化可观测性能力成熟度模型标准
  • 如何评估呼叫中心大模型呼出机器人的使用效果?
  • ARM/Linux嵌入式面经(六一):联合汽车电子
  • unity 雷达
  • 单元测试知识总结
  • Android:使用Service处理息屏后的WebSocket的服务端推送消息并传递给前端
  • Git Bash Here 中文显示乱码的处理方法
  • FreeBSD安装教程
  • Loki 各模式简介
  • MySQL八股-全局锁,表级锁,表锁,元数据锁,意向锁,行级锁,行锁,间隙锁,临键
  • (四)Spring Cloud Alibaba 2023.x:高效构建 Gateway 网关服务
  • Android XR 是什么?解释它的功能、设备、开发工具等
  • 【算法】实体关系抽取
  • Codeforces Round 993 (Div. 4)题解
  • 【计算机网络】期末考试预习复习|中
  • 从零用java实现 小红书 springboot vue uniapp (4)个人主页优化
  • 为“行车大脑”降温:Simdroid-EC助力汽车ECU设计研发
  • 视频汇聚平台:Liveweb视频流媒体平台视频监控系统解决方案
  • 通过解调使用正则化相位跟踪技术进行相位解包裹
  • VMware替代 | 双一流大学采用ZStack ZSphere虚拟化平台加速医学应用算法分析
  • UNIAPP框架uView初步集成与开发设计
  • C05S08-LVS负载均衡