程序员教你如何用原生JS实现一个文本划线功可以

  • 时间:2018-06-17 21:02 作者:小菜鸟程序员 来源:小菜鸟程序员 阅读:173
  • 扫一扫,手机访问
摘要:0x1. 原因得到 APP 中有个文稿板块,这部分是内嵌的前台开发的 Web 页面,支持在用户端和微信中访问,其中有一个称为划线笔记的功可以,就是长按文字之后,对选中的文字做标记,这是背景。在一次需求迭代过程中,产品对划线笔记的功可以提出了少量问题,比方为什么 iOS 和 Android 的样式不统
程序员教你如何用原生JS实现一个文本划线功可以

0x1. 原因

得到 APP 中有个文稿板块,这部分是内嵌的前台开发的 Web 页面,支持在用户端和微信中访问,其中有一个称为划线笔记的功可以,就是长按文字之后,对选中的文字做标记,这是背景。

在一次需求迭代过程中,产品对划线笔记的功可以提出了少量问题,比方为什么 iOS 和 Android 的样式不统一(使用的是系统原生的长按选中),是不是能实现单击即可以选中文字,是不是能自己设置样式,是不是能正反选……

对前台有兴趣或者者正在学习web前台的小伙伴,能私信小编【学习】就可免费领取2018最新的一整套系统web前台学习教程!

听到这里我的内心是这样的

程序员教你如何用原生JS实现一个文本划线功可以

本着跟产品友好相处的准则,我当即表示这个些需求很棒,我需要认真想一下怎样拒绝。

0x2. 分析

当然,想法归想法,做还是要想办法做的

程序员教你如何用原生JS实现一个文本划线功可以

从产品的需求看,只有自己模拟一个系统的长按选中才能满足产品现阶段及将来可可以潜在的需求。假如模拟一个长按选中,大概需要处理这么几个问题:

  • 需要禁使用系统的长按选择文字
  • 需要获取到点击字符确实切位置
  • 需要可以够模拟选中时的矩形背景

0x3. 实现

针对刚才的分析,大概能这样实现:

第一点,增加 user-select: none 的样式,这样能直接禁使用系统的文字选择;

第二点,可以够间接或者者直接获取字符位置的 dom API, 大概只有间接的通过 Range.getClientRects()

第三点,最初构思有两个方案,一个是直接在文字中插入标签,这样势必会改变整个 dom 的结构,对后续的标记造成影响,于是采使用第二个方案,直接加一个 svg 层,通过 svg 的多边形和矩形来绘制

程序员教你如何用原生JS实现一个文本划线功可以

这个方案有以下有点:

  • 自己设置选择样式
  • 点击选中当前句子
  • 长按选中当前句子
  • 正向反向选择
  • 高亮标记选中的文字
  • ......
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】你是HTML 5的一员吗?(2019-08-15 11:58)
【系统环境|】Web前端基础怎么学?html、css、JavaScript 知识架构图(2019-08-14 17:55)
【系统环境|】零基础小白走Web前端之路是否可行?答案是yes!(2019-08-13 11:44)
【系统环境|】你知道Web前端与HTML5技术的区别吗?(2019-08-12 14:10)
【系统环境|】移动前端开发和web前端开发的区别(2019-08-11 16:49)
【系统环境|】给新手的锦囊:Web前端开发小白的学习建议和路线图(2019-08-10 16:34)
【系统环境|】都说web前端开发薪资高,入行就有上万月薪,转行难吗?(2019-08-09 14:55)
【系统环境|】干货教程 | Web前端开发学习入门指南(2019-08-08 18:27)
【系统环境|】前端开发:vue路由之前端路由的原理(2019-08-07 13:17)
【系统环境|】你不知道的web前端那些事(2019-08-06 12:29)
手机二维码手机访问领取大礼包
返回顶部