首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Oilybear
V2EX  ›  问与答

前端-鼠标滑动实现高亮与复制

  •  
  •   Oilybear · 37 天前 via iPhone · 925 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,最近的项目需求中,有一项前端需求困扰着弟弟。

    项目背景:

    前端 React 框架

    需求如下:

    1. 鼠标滑动选中一段文字,实现对选中文字的高亮,并复制文字

    问题:

    1. 是否有现成的控件可以支持这一需求
    2. 如果需要自己手写控件,可以通过什么样的实现思路去实现 不知道各位朋友有什么高招😭
    第 1 条附言  ·  37 天前

    谢谢各位大家,刚刚review问题发现我在需求表达出现了问题。复制——>获取文字的位置。 Eg. hello hello比如选中第一个hello期望得到一个[0, 4]的array,选中第二个则为期望为[5, 10]这样一个array

    11 回复  |  直到 2019-12-13 10:45:44 +08:00
    findsomeone
        1
    findsomeone   37 天前 via Android
    我觉得应该不会很难? 比如现在各种 chrome 翻译插件都有划词翻译 而且一般也开源 参考下监控事件?
    orzorzorzorz
        2
    orzorzorzorz   37 天前
    复制的话,简单粗暴就是 document.execCommand('copy')。链接在[这里]( https://stackoverflow.com/questions/6300213/copy-selected-text-to-the-clipboard-without-using-flash-must-be-cross-browser)
    改高亮的话有两种思路,一种是直接改 ::selection,一种是去掉 ::selection 的默认样式,想办法获得选中时的字,然后改这些字所在 dom 的样式。
    orzorzorzorz
        3
    orzorzorzorz   37 天前
    这跟 re 不 react 没啥关系,市面上我是没见过有这样的组件的。
    RV0n
        4
    RV0n   37 天前
    window.getSelection()获取选中文字 再走正则匹配 匹配文字显示高亮 再利用 clipboard 实现复制
    orzorzorzorz
        5
    orzorzorzorz   37 天前
    https://github.com/bvaughn/react-highlight-words
    查了下,是有个相关的库,看上去能用。
    Oilybear
        6
    Oilybear   37 天前 via iPhone
    @orzorzorzorz 谢谢大佬,刚刚我在需求表述上出现了问题,复制文字如果变化为获取文字相对一段文字的位置的话。不知有什么好的思路实现。例子已添加到附言中。
    Oilybear
        7
    Oilybear   37 天前 via iPhone
    @findsomeone 好的,我去参考一下
    learnshare
        8
    learnshare   37 天前
    MDN: selection & range
    Cbdy
        9
    Cbdy   37 天前 via Android
    浏览器给你提供了 onSelect 事件
    netnr
        10
    netnr   37 天前
    https://www.netnr.com/run/code/5068762375722166316

    写了个 单节点 选中高亮的 demo,跨节点需要更复杂的逻辑判断,已拿到选中内容如何复制应该不成问题了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3561 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 10:09 · PVG 18:09 · LAX 02:09 · JFK 05:09
    ♥ Do have faith in what you're doing.