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

  • 时间:2018-06-17 21:02 作者:小菜鸟程序员 来源:小菜鸟程序员 阅读:113
  • 扫一扫,手机访问
摘要: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)
最新发布的资讯信息
【系统环境|服务器应用】PHP和Python实战bcrypt算法(2019-02-01 20:47)
【系统环境|服务器应用】PostgreSQL数据库安装Version10.5(2019-02-01 20:47)
【系统环境|服务器应用】Notepad++快速选中多行(2019-02-01 20:47)
【系统环境|服务器应用】Clover支持目录多标签页(2019-02-01 20:47)
【系统环境|服务器应用】计算机视觉 OpenCV Android | Mat像素操作(2019-02-01 20:46)
【系统环境|服务器应用】PHP | 运算符 知识梳理与运用实例(2019-02-01 20:46)
【系统环境|服务器应用】人工智能通识-数学-零基础矩阵运算(2019-02-01 20:46)
【系统环境|服务器应用】Android-打包AAR步骤以及最为关键的注意事项!(2019-02-01 20:46)
【系统环境|服务器应用】回转寿司你肯定吃过!——Android消息机制(构造)(2019-02-01 20:46)
【系统环境|服务器应用】Android中不规则形状View的布局实现(2019-02-01 20:46)
手机二维码手机访问领取大礼包
返回顶部