• js-mark新时代的网页标记容器


    js-mark  🖍️️

    ✨ 它提供了一组可交互操作的工具来注释网页内容 ✨🖍️

    js-mark是一个JavaScript库,用于在浏览器。他是一个可以在任何网页做标记的前端库, 它提供了一组可交互操作的工具来注释网页内容。 支持标记文本和 持久化存储与还原

    在这里插入图片描述

    Demo

    如果进行简单的演示,可以打开http://webviews.cn/js-mark/运行方可查看演示效果

    安装

    方法一

    npm install js-mark

    方法二

    使用静态文件,把dist/js-mark.js静态文件直接放到项目中

    文档

    基本配置

     import JsMark from "js-mark";
     const jsMark = new jsMark(opts:OPTS)
    
    • 1
    • 2

    创建一个新的jsMark实例,opts 会合并至默认配置 (如下所示).

    interface OPTS {
        el:Element,
        options:{
            isCover:boolean
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    配置说明:

    参数名类型描述是否必须默认值
    elDocument标记的根节点元素null
    optionsObject配置项(详细如下)null

    options配置说明:

    参数名类型描述是否必须默认值
    isCoverBoolean标记内容是否可以覆盖true

    实例方法

    1.鼠标选中文本后的回调方法:jsMark.onSelected

    鼠标选中根节点下的文本从后台获取数据使用jsMark.renderStore渲染已标注节点时会触发此方法,该方法回调返回一个Selected已选中对象

    
    interface Selected {
        textNodes: Text[]; //选中的所有文本节点
        text: string;   //选中的文本
        offset: number; //选中文本相对于根结点的偏移量
        hasStoreRender: boolean; //是否来自renderStore方法渲染,一般用于从数据库拿到数据运用jsMark.renderStore方法判断首次渲染
    }
    
    jsMark.onSelected = function (res:Selected) {};
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    2.标注选中文本:jsMark.repaintRange(nodes:Text[],uid:string,cssClass:string)

    标注已经选中的文本,一般用在jsMark.onSelected回调方法内,接受三个参数

    
    //定义
    interface RangeNodes{
        textNodes: Text[]; //选中的所有文本节点,onSelected返回值的res.textNodes
        className: string; //需要标注的文本节点样式类
        uuid?: string; //标注文本节点的唯一id,会绑定到节点身上的data-selector属性,此id可用于清除当前标注节点,可选,不传会自动生成
        storeRenderOther?:any; //来自jsMark.renderStore方法的用户自定义参数
    }
    
    function repaintRange(opts:RangeNodes):void{...}
    
    //调用示例
    jsMark.onSelected = function (res) {
        jsMark.repaintRange({
            textNodes:res.textNodes
        });
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    3.点击已经标注文本后的回调方法:jsMark.onClick

    点击已经标注的内容后,会触发jsMark.onClick方法,回掉方法接受一个uid为标签上唯一的一个id,可用于清除单个标注

    
    jsMark.onClick = function (uid:string) {};
    
    
    • 1
    • 2
    • 3
    4.通过数据去标注根节点下的数据:jsMark.renderStore()
    
    //定义
    interface SelectInfo{
        offset: number;  //选中文本相对于根结点的偏移量
        text: string;   //选中的文本
        storeRenderOther?:any; //用户自定义参数
    }
    
    function renderStore(obj: SelectInfo[]): void {...}
    
    //调用
    jsMark.renderStore([{text:"测试",offset:20}])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    5.查找跟节点下的单个词组:jsMark.findWord

    通过jsMark.findWord查找文档中所有的可标注文本位置,返回相对于跟节点的偏移量

    //定义
    declare type Nullable<T> = T | null;
    
    interface Selected {
        offset: number;  //偏移量
        text: string;   //文本信息
    }
    
    function findWord(word:string):Nullable<Selected[]>{...}
    
    //调用
    jsMark.findWord("标注文本");
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    6.清除单个标注:jsMark.clearMark

    清除标签上data-selector属性为唯一uid的标签标注

    jsMark.clearMark(uid);
    
    • 1
    7.清除所有标注:jsMark.clearMarkAll
    jsMark.clearMarkAll();
    
    • 1
    8.清除事件:jsMark.destroyEvent
    jsMark.destroyEvent();
    
    • 1

    兼容性

    IEFirefoxChromeSafariOpera
    10+52+15+5.1+15+
  • 相关阅读:
    Java与GitLab OpenAPI交互
    linux:需要注意docker和aws的rds的mysql默认是UTC而不是中国时区
    vue入门到精通-Axios入门
    基于ffmpeg进行视频解码
    mybatis单框架之动态sql
    CSDN编程挑战赛第六期——Python题解
    定制SQLmap和WAF绕过
    Spring Boot 使用 Mail 实现登录邮箱验证
    打造无证服务化:这个政务服务平台有点不一样
    【仿牛客网笔记】初识Spring Boot,开发社区首页-Spring MVC入门
  • 原文地址:https://blog.csdn.net/zzz1048506792/article/details/128166266