recogito-js:用于文本注释/图像注释的前端插件

创建批注:

 

继续批注:

右侧批注列表:

1、功能与应用

  • 文本注释:recogito-js可以将注释功能添加到网页上,或者作为构建完全自定义注释应用程序的工具箱。
  • 图像注释:除了文本注释外,它还支持为网页中的图像添加绘图、注释和标签功能。
  • PDF注释:通过@recogito/recogito-react-pdf插件,它还能够支持在React中注释PDF文档。

2、官网及示例

官网:https://github.com/recogito/recogito-js/wiki/API-Reference

示例:https://recogito.github.io/recogito-js/

3、需求:

前面的文章提到过很多的tinyMCE、Vditor、cherryMarkdown、wangEditor等等markdown和富文本编辑器,在这些编辑器生成的文本内容的预览基础上要加上批注功能,用户选中文本后就要弹出批注弹窗,确认批注后右侧会相应展示出批注内容,同时在右侧进行批注的编辑、删除

4、安装与使用:

npm i @recogito/recogito-js@1.8.2

以下示例为文本注释功能:

import { Recogito } from "@recogito/recogito-js";
import "@recogito/recogito-js/dist/recogito.min.css";// 初始化批注
const initRecogito = () => {getAnnoList();r = new Recogito({content: document.querySelector(".artDetail"), // 批注区域readOnly: false,  // 是否只读locale: "auto", // 可选择语言 auto会根据浏览器设置选择语言});r.setServerTime(Date.now()); // 设置批注日期r.setAuthInfo({   // 这里设置每个批注携带的默认信息id: useUserStore().userId,displayName: useUserStore().nickName,});// 创建批注事件r.on("createAnnotation", async function (annotation, overrideId) {// 定义一个getInitAnnotate方法拿到创建的这个批注信息let newAnno = getInitAnnotate("create", annotation);// 因为批注插件不管有没有输入内容都会创建,这里要求了没有批注内容时不允许新建批注if (!newAnno.annotationContent?.trim()?.length) {getAnnoList(); // 刷新批注列表避免页面出现空批注内容return proxy.$modal.msgWarning("请先输入批注内容");}// 将批注信息存入后端submitAnnotation(newAnno).then(({ data }) => {recogitoList.value.push(data);  // 在页面右侧回展示批注信息proxy.$modal.msgSuccess("新增成功!");}).catch((err) => {getAnnoList();// 刷新批注列表避免页面出现空批注内容});});// 在已有批注基础上补充批注r.on("updateAnnotation", function (annotation, previous) {let newAnno = getInitAnnotate("update", annotation);if (!newAnno.annotationContent?.trim()?.length) {getAnnoList();return proxy.$modal.msgWarning("请先输入批注内容");}submitAnnotation(newAnno).then(({ data }) => {// 补充批注时let index = recogitoList.value.findIndex((item) => item.id === data.id);recogitoList.value[index] = data;proxy.$modal.msgSuccess("新增成功!");}).catch((err) => {getAnnoList();});});
};// 更改批注参数
const getInitAnnotate = (title, newAnno, pkId) => {let data = {};// 创建批注时if (title === "create") {data.annotationContent = newAnno.body[0]?.value;data.textContent = newAnno.target.selector.find((item) => item.type === "TextQuoteSelector")?.exact;// 修改批注时} else if (title === "update") {data.annotationContent = newAnno.body[newAnno.body?.length - 1]?.value;} else {// 通过外部input框编辑批注let annoBody = newAnno.body.find((item) => item.pkId === pkId);data.annotationContent = annoBody?.iptValue;data.pkId = pkId;}let annoPosition = newAnno.target.selector.find((item) => item.type === "TextPositionSelector");// 按照后端入参要求组装批注内容的结构data.annotationId = newAnno.id;data.createdBy = useUserStore().name;data.endCoordinate = annoPosition.end;data.startCoordinate = annoPosition.start;data.knwlgId = artDetails.value.pkId;data.knwlgNo = artDetails.value.knwlgNo;return data;
};// 获取批注列表并回显
const getAnnoList = () => {getAnnotationList({ knwlgId: artDetails.value.pkId }).then((res) => {recogitoList.value = res.data;  // 批注列表setTimeout(() => {r.clearAnnotations(); //清除所有批注r.setAnnotations(recogitoList.value); // 设置已有批注内容}, 500);}).catch(() => {});
};// 根据批注id在点击右侧批注列表激活文本域内批注弹窗
const selectAnnotation = (id) => {let domList = document.querySelectorAll(".r6o-annotation");let activeTop =Array.from(domList).find((item) => item.dataset.id === id && item.innerText?.length)?.offsetTop - 5;document.querySelector(".article-container").scrollTop = activeTop;r.selectAnnotation(id);
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WITS核心价值观【创新】篇|从财务中来,到业务中去

「客尊」、「诚信」、「创新」 与「卓越」 是纬创软件的核心价值观。我们秉持诚信态度,致力于成为客户长期且值得信赖的合作伙伴。持续提升服务厚度,透过数字创新实践多市场的跨境交付,助客户保持市场领先地位。以追求卓越的不懈精神&#xf…

腾讯云点播VOD(sprintboot后端+vue前端)

1. 腾讯云点播 官网文档入口: 云点播简介_云点播购买指南_云点播操作指南-腾讯云 2. 业务需求 2.1.上传视频 2.2.浏览视频 2.3.删除视频 3. 腾讯云提供服务器上传和客户端上传。我使用springboot后端实现客户端上传视频。 3.1 后端要求 生成签名,前端拿着签名凭证,才能上…

easyui的topjui前端框架使用指南

博主今天也是第一次点开easyui的商业搜权页面,之前虽然一直在使用easyui前端框架(easyui是我最喜欢的前端ui框架),但是都是使用的免费版。 然后就发现了easyui的开发公司居然基于easyui开发出了一个新的前端框架,于是我…

AppFlow无代码轻松搭建模型Agent

随着大语言模型发展至今,如何深度开发和使用模型也有了各种各样的答案,在这些答案当中,Agent无疑是一个热点回答。 通过模型也各种插件的组合,可以让你的模型应用具备各种能力,例如,通过天气查询插件机票查…

解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题

最近安装了最新版本的鲁大师,安装过程中不小心同时安装了捆绑软件TabX explorer。这个软件和系统自带的文件资源管理器很像,最后弹出会员到期才发现,这个不是系统文件资源管理器,是第三方的文件资源管理器,就按正常流程…

服务器机柜和网络机柜有什么区别

服务器机柜和网络机柜虽然在外观上可能相似,都遵循19英寸的标准,但它们的设计目的、功能、结构和特性存在明显的区别。下面是两者的主要区别: 1. 用途 服务器机柜:主要用于承载和组织服务器设备,包括主机、存储设备、交…

智能化物业服务:楼层动态一目了然

通过图扑先进的可视化技术,实现对物业楼层的实时监控与高效管理。全面掌握楼层动态,优化资源配置,提升响应速度和服务质量,为业主提供智能化、便捷化的物业管理体验。

智慧校园-就业管理系统总体概述

在当代教育与信息技术深度融合的背景下,智慧校园就业管理系统成为了连接学生、高校与企业的重要纽带,它以创新的服务理念和技术手段,重塑了职业规划与就业服务的传统模式。这一系统致力于为即将步入社会的学生们提供全面、个性化的支持&#…

酒店民宿预订小程序:高效管理,便捷入住

目前,我国旅游业发展非常旺盛,同时也带动了酒店民宿的快速发展。随着互联网科技的快速发展,酒店民宿小程序层出不穷。一个高效的小程序目前已经成为了各大服务业中必不可少的环节,对于酒店民宿商家来说,线上小程序不仅…

2024年6月大众点评广州餐饮店铺POI分析20万家

2024年6月大众点评广州餐饮店铺POI共有199175家 店铺POI点位示例: 店铺id k9uiFADtAvs9EdPC 店铺名称 点都德(聚福楼店) 十分制服务评分 8.6 十分制环境评分 8.3 十分制划算评分 8.5 人均价格 77 评价数量 41673 店铺地址 惠福东路470号(富临食府对面) 大…

2024年6月17日~2024年6月26日周报

一、前言 在上周主要完成了可变形卷积的学习的部署。 本周,结合前段时间的工作与闵老师的讨论,思考了接下来的一些尝试方向。本周重新在之前的网络上尝试添加可变形卷积v4,或者将可变形卷积v2修改为可变形卷积v4。另外,继续学习了…

入职必备-Git安装(为什么Git安装包无法直接安装)

1.首先下载Mac Git应用,打开Git官网https://git-scm.com/download,执行以下操作(见下图一和下图二),然后会打开页面(见下图三),向上滑动一下会见到页面(见下图四&#xf…

逆变器使用手册:类型详解、安装要点与维护须知

逆变器随着可再生能源的兴起和移动电源需求的激增已成为连接直流电与交流电世界的桥梁,其重要性不言而喻。无论是太阳能发电系统的高效利用,还是汽车、游艇等移动设备的电力供应,逆变器都扮演着关键角色。然而,正确的使用方法是确…

ELK日志集成

https://www.bilibili.com/video/BV1x94y1674x/?buvidXY705117E90F73A790429C9CFBD5F70F22168&vd_source939ea718db29535a3847d861e5fe37ef

期货日内交易口诀

1、向下差价法 前提:要判断准确后市是向下行情走势。被套后,等反弹到一定的高度,估计见短线高点了,先卖出,待其下跌一段后再买回。通过这样不断地高卖低买来降低成本,最后等总资金补回了亏损,完…

第1章 基础知识

第1章 基础知识 1.1 机器语言 机器语言就是机器指令的集合,机器指令展开来讲就是一台机器可以正确执行的命令 1.2 汇编语言的产生 汇编语言的主题是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式。…

测试用例设计方法-流程分析法

一、引言 在软件开发过程中,测试是确保软件质量的关键环节之一。而测试用例设计作为测试过程中的重要组成部分,其质量和完备性直接影响到测试效果和软件的最终交付质量。 测试用例设计的目标是通过设计一组有效的测试用例来检查软件系统的各种功能和行为…

送物机器人电子方案定制

这是一款集娱乐、教育和互动于一身的高科技产品。 一、它的主要功能包括: 1. 智能对话:机器人可以进行简单的对话,回答用户的问题,提供有趣的互动体验。 2. 前进、后退、左转、右转、滑行:机器人可以通过遥控器或AP…

基于MATLAB仿真设计无线充电系统

通过学习无线充电相关课程知识,通过课程设计无线充电系统,将所学习的WPT,DC-DC,APFC进行整合得到整个无线充电系统,通过进行仿真研究其系统特性,完成我们预期系统功能和指标。 以功率器件为基本元件&#x…

Redis 7.x 系列【7】数据类型之列表(List)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 RPUSH2.2 LPUSH2.3 LRANGE2.4 LINDEX2.6 LREM2.7 LLEN2.8 LPOP…