菜鸟教程javascript,零基础javascript教程

首页 > 经验 > 作者:YD1662022-11-01 10:17:36

菜鸟教程javascript,零基础javascript教程(1)

0x1. 起因

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

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

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

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

菜鸟教程javascript,零基础javascript教程(2)

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

0x2. 分析

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

菜鸟教程javascript,零基础javascript教程(3)

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

0x3. 实现

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

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

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

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

菜鸟教程javascript,零基础javascript教程(4)

这个方案有以下有点:

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.