# region-screenshot **Repository Path**: weijun620/region-screenshot ## Basic Information - **Project Name**: region-screenshot - **Description**: 一个H5端选区截图插件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2024-04-04 - **Last Updated**: 2024-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # region-screenshot-js - - - **语言:** [English](README.md) / [简体中文](README.zh-CN.md) - - - A web-based selection screenshot plugin that helps you quickly build a beautiful and functional screenshot selection feature. 一个web端选区截图插件,帮助你快速构建出精美的选区截图功能。 - - - ## 🎨在线Demo ## 它如何工作 region-screenshot-js的核心原理是使用`WebRTC`(Web Real-Time Communication)技术,读取浏览器标签页信息。因此region-screenshot-js只允许在本地环境或者HTTPS环境中运行。 你也可以通过如下设置使浏览器在在非HTTPS环境中运行region-screenshot-js,假设使用Chrome浏览器: **(请谨慎使用,这可能引入安全隐患)**: 1. 进入chrome://flags/#unsafely-treat-insecure-origin-as-secure 2. 在Insecure origins treated as secure文本框中输入你的网站地址,例如:https://www.example.com 3. 勾选右侧Enable ## 安装 * `npm install region-screenshot-js` * Or download the repository ## 使用 ### ESM(ECMAScript Modules) ```js import RegionScreenshot from "region-screenshot-js"; ``` ### UMD(Universal Module Definition) ```html ``` --- ```js let screenshot = new RegionScreenshot(); ``` ## 代码示例 ```js let screenshot = new RegionScreenshot(); screenshot.on("screenshotGenerated",(dataUrl)=>{ console.log(dataUrl); }) ``` ## 文档 ### Options | 配置项 | 类型 | 默认值 | 描述 | | --- | --- | --- | --- | | **maskColor** | String | rgba(0,0,0,0.5) | 遮罩层颜色 | | **globalColorOptions** | Array | ["#ff3a3a","#f8b60f","#0083ff","#40ff00","#363636","#e9e9e9"] | 配置所有绘制项可供选择的颜色(当绘制项有单独的颜色配置时,该配置无效) | | **regionSizeIndicator** | [Object](#regionSizeIndicator) | {...} | 左上角区域大小指示器样式(见下文)| | **rectangleOptions** | Object | {color:globalColorOptions ,size: [4, 6, 8]} | 配置矩形绘制项可供选择的颜色和线宽 | | **circleOptions** | Object | {color:globalColorOptions ,size: [4, 6, 8]} | 配置圆形绘制项可供选择的颜色和线宽 | | **paintOptions** | Object | {color:globalColorOptions ,size: [4, 6, 8]} | 配置自由画笔绘制项可供选择的颜色和线宽 | | **mosaicOptions** | Object | {size: [6, 8, 10]} | 配置马赛克绘制项可供选择的线宽 | | **textOptions** | Object | {color:globalColorOptions ,size: [16, 18, 20]} | 配置文字绘制项可供选择的颜色和字体尺寸 | | **arrowOptions** | Object | {color:globalColorOptions ,size: [4, 6, 8]} | 配置箭头绘制项可供选择的颜色和线宽 | | **customDrawing** | Array<[customDrawingObject](#customDrawingObject)> | - | 自定义绘制(见下文) | #### regionSizeIndicator | Options | Type | Default | Description | | --- | --- | --- | --- | | **show** | Boolean | true | 尺寸指示器是否显示 | | **color** | String | #ffffff | 尺寸指示器颜色 | | **fontSize** | Number | 14 | 尺寸指示器尺寸 | #### customDrawingObject ##### Code Example ```js //其中“$”来自于jquery.js let screenshot = new RegionScreenshot({ customDrawing: [ { className: "triangle", optionsHtml: `
min
middle
max
`, onOptionsCreated(optionsEl) { $(optionsEl) .find("div") .click(function () { $(this).addClass("active"); $(this).siblings().removeClass("active"); }); }, onDrawingOpen(canvasEl,optionsEl,saveCallback) { let ctx = canvasEl.getContext("2d"); canvasEl.style.cursor = "crosshair"; canvasEl.onclick = function (e) { ctx.beginPath(); ctx.lineWidth = $(optionsEl).find(".triangle-size-options.active").attr("size"); ctx.moveTo(e.offsetX, e.offsetY - 10); ctx.lineTo(e.offsetX - 10, e.offsetY + 10); ctx.lineTo(e.offsetX + 10, e.offsetY + 10); ctx.closePath(); ctx.stroke(); saveCallback();//请在绘制结束后调用保存回调,以确保插件的撤销功能正常 }; }, onDrawingClose(canvasEl) { canvasEl.onclick = null; canvasEl.style.cursor = "default"; }, }, ], }); ``` | 配置项 | 类型 | 描述 | | --- | --- | --- | | **className** | String | 自定义绘制项的类名 | | **optionsHtml** | String | 定义自定义绘制项二级菜单的html内容 | | **onOptionsCreated** | Function | 当自定义绘制项的二级菜单创建完成该函数将被调用,可在参数中获取到`二级菜单dom对象` | | **onDrawingOpen** | Function | 当自定义绘制项被激活时该函数将被调用,可在参数中获取到`二级菜单dom对象`、`canvas dom对象`、`保存历史记录函数`,注意:请在每次自定义绘制结束后调用`保存历史记录函数`,以确保插件的撤销功能正常 | | **onDrawingClose** | Function | 当自定义绘制项被关闭时该函数将被调用 | ### Event #### 代码示例 ```js let screenshot = new RegionScreenshot(); screenshot.on("successCreated",(dataUrl)=>{ console.log("插件初始化成功"); }); screenshot.on("screenshotGenerated",(dataUrl)=>{ console.log(dataUrl); }); ``` | 事件名称 | 描述 | | --- | --- | | **screenshotGenerated** | 截图生成完成时触发,可在回调中获取`图片base64编码` | | **screenshotDownload** | 截图被下载时触发,可在回调中获取`图片base64编码` | | **regionDragging** | 选区尺寸或位置改变时触发,可在回调中获取`选区的详细位置信息` | | **regionDragStart** | 选区尺寸或位置改变前触发,可在回调中获取`选区的详细位置信息` | | **regionDragEnd** | 选区尺寸或位置改变后触发,可在回调中获取`选区的详细位置信息` | | **successCreated** | 插件初始化成功时触发 | | **errorCreated** | 插件初始化失败时触发,可在回调中接受`错误信息` | | **closed** | 插件被关闭时触发 | # 🎉致谢与引用 感谢以下插件,他们为region-screenshot-js实现提供了支持. * [dom-to-image](https://github.com/tsayen/dom-to-image) 一个将dom节点转换成图片的插件(在文字绘制时使用了该插件) * [jquery](https://github.com/jquery/jquery) jquery是一个快速、简洁的JavaScript框架(在dom选择和事件绑定是使用了该插件)