0.0.6 • Published 3 years ago

react-web-highlighter v0.0.6

Weekly downloads
9
License
MIT
Repository
-
Last release
3 years ago

0. 在线案例

点我点我

1. 灵感

公司需要做前端文书划线编辑等功能,木得法子, GO GO GO !

非常感谢如下两篇文章提供的思路:

「划线高亮」和「插入笔记」—— 不止是前端知识点

✨ 如何用 JS 实现“划词高亮”的在线笔记功能?✨🖍️

2. 安装

npm i react-web-highlighter
yarn add react-web-highlighter

3. 使用方式

import React, { useCallback, useMemo, useState } from "react";
import TextHighlight from 'react-web-highlighter';

/** Tip: 如果划线木有效果,看看样式是否有添加 */

const template = "<p>我就是一段文本,想记录点什么,然而却又不知道从何时记录起,那就只能默默的埋藏在心底,生根发芽...</p>";

const App = () => {
  const [data, setState] = useState<any>([]);

  const modes = useMemo(() => {
    return [
      {
        className: "huaxian",
        mode: "huaxian",
        name: "划线",
      },
    ];
  }, []);

  const onAdd = useCallback(
    (selectText) => {
      const d = {
        ...selectText,
        mode: 'huaxian',
        id: Math.random().toString().slice(2)
      };
      data.push(d);
      setState([...data]);
    },
    [data]
  );

  const onUpdate = useCallback(
    (list = []) => {
      setState((d: any) => d);
    },
    [setState]
  );

  return (
    <TextHighlight
      value={data}
      template={template}
      modes={modes}
      onAdd={onAdd}
      onUpdate={onUpdate}
    />
  );
};

export default App;

4. 示例

一个更复杂的使用示例,请查看仓库的 DEMO 示例(在example文件夹中)

DEMO 安装运行(当前使用的是 tsdx):

  1. 项目根目录:
yarn
  1. example 目录:
yarn
  1. 项目根目录:
yarn start
  1. example 目录:
yarn start
  1. 访问: http://localhost:1234

5. TextHighlight 组件参数说明

参数名类型描述是否必须默认值
templatestring富文本 HTML 字符串--
valueINoteTextHighlightInfo[]高亮的选区数据--
tagNamestring用于包裹高亮文本的 HTML 标签名span
onAdd(data:INoteTextHighlightInfo)=>any新增选区时触发的回调--
onUpdate(data:INoteTextHighlightInfo[])=>any选中已存在的选区时触发的回调(由于选区会有重叠,所以参数为数组列表,会返回当前标记当前选中选区的所有节点)--
rowKeystring每条数据的唯一值id
modesIModeProps[]用于区分类型与不同类型设置样式--

INoteTextHighlightInfo 属性:

参数名类型描述是否必须
listINoteTextHighlightInfoItem[]选区数据
textstring选区选中的文本数据
modestring当前数据类型(例如:笔记,画线等)

INoteTextHighlightInfoItem 属性:

参数名类型描述是否必须
levelnumber[]选区层级数据,依据顶级节点一层层下钻到选中文本节点
startnumber当前选中的开始文本节点的偏移量
endstring当前选中的结束文本节点的偏移量
textstring当前文本节点选中的文本

IModeProps 属性:

参数名类型描述是否必须
modestring类型
classNamestring用于设置当前类型的类名

5.1 ToolBar 组件参数说明

ToolBar 需作为 TextHighlight 的子元素存在

参数名类型描述是否必须默认值
maskboolean是否显示遮罩层true
visibleboolean用于控制弹窗的显示隐藏false
autoClosableboolean点击自动触发管true
wrapClassNamestring设置样式--
onCancelfunction设置关闭的回调--
childrenReactNode弹窗内部的子元素--

6. 方法

setSelectRange 方法: | 参数名 | 类型 | 描述 | 是否必须 | | --------- | -------- | ---------------------- | -------- | | node | INoteTextHighlightInfo | 用于设置原生选中文本的方法 | 是 |

7. TODO

  1. 编写测试用例
  2. 完善交互逻辑
0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago