js br不生效_前端标注工具-AILabel.js

# AILabel.js

背景:在前端开发过程中难免遇到针对图片的缩放平移;以及在图片上进行矢量数据、文本、标注的展示;如果你有上面的任何需求,恭喜你,找到组织了....<br/>

在此背景下,AILabel.js出生了

### 相关资料

npm下载地址:[ailabel](ailabel)<br/>

github地址: [dingyang9642/AILabel](dingyang9642/AILabel)

求star<br/>

api文档(待补充): [AILabel](https://dingyang9642.github.io/AILabel/#/)<br/>

加入qq群:378301400

### 背景-功能

> 1. 解决图片浏览(无极缩放、平移)

> 2. 矢量数据、文本、标注展示

> 3. 矢量数据绘制、编辑

> 4. 标注形式:矩形、多边形、涂抹、折线、打点、文本text、标注marker

### 示例图

![point.gif](https://upload-images.jianshu.io/upload_images/13919825-6572e82c68c254cf.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)

![polyline.gif](https://upload-images.jianshu.io/upload_images/13919825-1c9c39b8bce61ade.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)

![rect.gif](https://upload-images.jianshu.io/upload_images/13919825-7e401820b25707f7.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)

![polygon.gif](https://upload-images.jianshu.io/upload_images/13919825-6a36b7f28aa44e9c.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)

![mask.gif](https://upload-images.jianshu.io/upload_images/13919825-572b11e9f2ab86d4.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)

### 示例Demo

[- 要素](Document)<br/>

[- 注记](Document)<br/>

[- 文本](Document)<br/>

[- 绘制编辑](Document)<br/>

[- 矩形编辑](Document)<br/>

[- 要素hover](Document)<br/>

[- 图像&缩略图&比例尺](Document)<br/>

### get started

htmlcssjs部分

```javascript

// 样式声明

<style>

#hello-map {

width: 500px; // 必须

height: 400px; // 必须

position: relative; // 必须

border: 1px solid red;

cursor: pointer;

}

</style>

// 容器声明

<div id="hello-map"></div>

// js声明-容器声明(参数:zoom: 缩放比; {cx: cy:}:初始中心点位置;zoomMax、zoomMin:缩放的比例限制)

const gMap = new AILabel.Map('hello-map', {zoom: 1080, cx: 0, cy: 0, zoomMax: 650 * 10, zoomMin: 650 / 10, autoPan: true, drawZoom: true});

// 图片层实例添加

const gImageLayer = new AILabel.Layer.Image('img', '../../imgs/demo.jpeg', {w: 1080, h: 720}, {zIndex: 1});

gMap.addLayer(gImageLayer);

***至此、已完成首个简单的hello-map的使用***

```

### 矢量数据(Feture)展示

```javascript

// 常用样式声明

const gFetureStyle = new AILabel.Style({strokeColor: '#0000FF'});

// 矢量层实例添加

let gFeatureLayer = new AILabel.Layer.Feature('featureLayer', {zIndex: 2, transparent: true});

gMap.addLayer(gFeatureLayer);

// 矢量要素实例添加

const fea = new AILabel.Feature.Polygon('id', [

{x: 10, y: 10},

{x: 50, y: 10},

{x: 40, y: 50},

{x: 20, y: 60},

{x: 10, y: 10}

], {name: '中国'}, gFetureStyle);

gFeatureLayer.addFeature(fea);

```

### 文本数据(Text)展示

```javascript

// 常用样式声明

const gTextStyle = new AILabel.Style({strokeColor: '#0000FF'});

// 文本层实例添加

let gTextLayer = new AILabel.Layer.Text('textLayer', {zIndex: 2});

gMap.addLayer(gTextLayer);

// 文本要素实例添加

const text = new AILabel.Text('id', {

pos: {x: 100, y: 100},

offset: {x: 0, y: 0},

width: 100,

text: '中国'

}, gTextStyle);

gTextLayer.addText(text);

```

### 标注数据(Marker)展示

```javascript

// 不需要声明markerLayer标注图层,有且只有一个markerLayer,可通过gMap.mLayer来获取

// marker对象实例添加

const marker = new AILabel.Marker('name-中国', {

src: './marker.png',

x: 0,

y: 0,

offset: {x: -32, y: -32}

});

// 注册监听事件删除标注

marker.regEvent('click', function () {

gMap.mLayer.removeMarker(this);

});

gMap.mLayer.addMarker(marker);

```

### 各类事件监听(mouse、hover、boundsChanged、resize等各类事件)

```javascript

// mouseDown:wxy => {}

// mouseMove:wxy => {}

// geometryEditing:(type, feature, newPoints) => {}

// geometryEditDone:(type, feature, newPoints) => {}

// geometryDrawDone:(type, points) => {}

// geometryRemove: (type, feature) => {} 【目前只针对点数据】

// featureHover:feature => {}

// featureSelected:feature => {}

// featureStatusReset:() => {}

// boundsChanged() => {}

// resize() => {}

gMap.events.on('mouseDown', xy => {console.log('xy');});

gMap.events.on('boundsChanged', () => {console.log('boundsChanged');});

gMap.events.on('featureHover', feature => {console.log(feature);});

...

```

### 矢量数据绘制、编辑(点、线、面、涂抹Mask)

```

// 常用样式声明

const gFetureStyle = new AILabel.Style({strokeColor: '#0000FF'});

// 设置当前操作模式为‘drawRect’, 浏览状态对应mode为'pan'

gMap.setMode('drawRect', gFetureStyle);

// 矢量层实例添加

let gFeatureLayer = new AILabel.Layer.Feature('featureLayer', {zIndex: 2, transparent: true});

gMap.addLayer(gFeatureLayer);

// 绘制完成事件监听

gMap.events.on('geometryDrawDone', function (type, points) {

// 生成元素唯一标志(时间戳)

const timestamp = new Date().getTime();

// 元素添加展示

let fea = new AILabel.Feature.Polygon(`feature-${timestamp}`, points, {

name: '中国'

}, gFetureStyle);

gFeatureLayer.addFeature(fea);

});

// 因为自带编辑功能,故需要以下代码

gMap.events.on('geometryEditDone', (type, activeFeature, points) => {

activeFeature.update({points});

activeFeature.show();

});

```

如有其他需要,加入qq群:378301400

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

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

相关文章

android中的后退功能,如何在Android应用中实现一个返回键功能

如何在Android应用中实现一个返回键功能发布时间&#xff1a;2020-11-23 16:28:56来源&#xff1a;亿速云阅读&#xff1a;89作者&#xff1a;Leah今天就跟大家聊聊有关如何在Android应用中实现一个返回键功能&#xff0c;可能很多人都不太了解&#xff0c;为了让大家更加了解&…

bat 连续读取两行_Redis底层数据结构解析(BAT大厂必问)

Redis是一个key-value存储系统&#xff0c;现在在各种系统中的使用越来越多&#xff0c;大部分情况下是因为其高性能的特性&#xff0c;被当做缓存使用。Redis由于其丰富的数据结构也可以被应用到其他场景。Redis是一个K-V的非关系型数据库&#xff08;NoSQL&#xff09;&#…

smart原则_为什么现在少有人用德鲁克的SMART原则做目标管理了?

互联网平台充斥了各类成功学文章&#xff0c;但大多数鸡汤文只谈坚持&#xff0c;不谈策略。王健林定下一个亿的小目标被网友编成了各种段子&#xff0c;却极少有人去探究他实现目标的过程&#xff0c;用的什么方法。从企业规模来看&#xff0c;我们没有理由说王健林定下的目标…

android p 第三方预装,android P 隐藏API对系统APP的影响

android P限制了第三方APK对hide API的调用&#xff0c;那么对系统APK有什么影响呢&#xff1f;国内各大手机厂商对ROM进行各种定制&#xff0c;可以很容易绕过这些限制&#xff0c;那对于需要出海并且满足CTS要求的厂商有什么影响呢&#xff1f;先说结论&#xff1a;对系统厂商…

团队组成五个基本要素_【记录】综合分部宁波分队团队拓展活动

初冬&#xff0c;像一位美丽的、高贵的、矜持的公主&#xff0c;舞动着她那神奇的面纱&#xff0c;送来阵阵凛冽的寒风。今年宁波分队队伍逐渐壮大&#xff0c;从年初的70多人到目前120人&#xff0c;队伍中也迎来了许多00后的小伙伴们&#xff0c;为加强企业文化建设&#xff…

linux delete内存不下降_linux内存分配管理

linux内存分配管理一、前言作为从事与C/C程序开发人员&#xff0c;我们一直需要很好的管理内存&#xff0c;申请和释放&#xff1b;可能很多只知道使用malloc、new去申请&#xff0c;使用free、delete去释放&#xff0c;但是&#xff0c;去根究其内部的原理&#xff0c;可能就不…

android studio 2.3 instant run,android studio 2.3 instant run not working

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效&#xff0c;请关闭广告屏蔽插件后再试):问题:I have updated android studio from 2.2 to 2.3,then I found Instant run not working.Error while executing: am startservice com.example.codingmaster.te…

和catch的区别_BIO、NIO、AIO 的区别是什么?

BIO、NIO、AIO 的区别是什么&#xff1f;同/异步、阻/非阻塞的区别是什么&#xff1f;文件读写最优雅的实现方式是什么&#xff1f;NIO 如何实现多路复用功能&#xff1f;带着以上这几个问题&#xff0c;跟着芒果一起进入IO的世界吧。在开始之前&#xff0c;我们先来思考一个问…

302状态码_HTTP协议详解(基础概念 方法 状态码 首部 连接 Cookie 新特性 安全)

一 、基础概念URIURI 包含 URL 和 URN。请求和响应报文1. 请求报文2. 响应报文二、HTTP 方法客户端发送的 请求报文 第一行为请求行&#xff0c;包含了方法字段。GET获取资源当前网络请求中&#xff0c;绝大部分使用的是 GET 方法。HEAD获取报文首部和 GET 方法类似&#xff0c…

flask get 参数_用它 5 分钟以后,我放弃用了四年的 Flask

“ 阅读本文大概需要 3 分钟。 ”有一个非常简单的需求&#xff1a;编写一个 HTTP 接口&#xff0c;使用 POST 方式发送一个 JSON 字符串&#xff0c;接口里面读取发送上来的参数&#xff0c;对其中某个参数进行处理&#xff0c;并返回。如果我们使用 Flask 来开发这个接口&…

傲梦python笔试题_python笔试题

冒泡排序的原理&#xff1a;每次对相邻的两个元素进行比较&#xff0c;若前者大于后者&#xff0c;这将两者的位置交换。第一轮就可以将最大的元素置于列表的最后。几轮循环 冒泡排序的前提条件&#xff1a;有序的列表 import unittest # 冒泡排序 def bubble_sort(arr): for i…

python pexpect pxssh scp_python Pexpect 实现输密码 scp 拷贝的方法

在服务器A上的程序用到服务器B上的文件data&#xff0c;并且需要定期更新文件。 但是直接在bash文件中使用scp -P 1000 192.168.199.10:/temp/data /temp由于权限限制&#xff0c;不能免ssh密码拷贝&#xff0c;会要求输入B机器的密码。本想直接在bash文件中使用Pexpect 来实现…

python的类方法_python 类不实例化,调用类方法:@staticmethod 和 @classmethod

staticmethod 和 classmethod 用法 一般来说&#xff0c;要使用某个类的方法&#xff0c;需要先实例化一个对象再调用方法。 而使用staticmethod或classmethod&#xff0c;就可以不需要实例化&#xff0c;直接类名.方法名()来调用。 这有利于组织代码&#xff0c;把某些应该属于…

android sse 人脸识别,基于Android Camera2之openCamera 流程

简介frameworks\base\core\java\android\hardware\camera2Camera2在Android 5.0上首次出现&#xff0c;主要重新定义了一套Camera 的使用接口API&#xff0c;设计思想出现了变化&#xff0c;具体的可自行搜索&#xff0c;此处主要介绍下Camera2的常见类以及使用流程。CameraCap…

fetch 不是xhr_春招|前端2019应届春招:不是被大厂选,而是选大厂(字节跳动,美团,网易)...

作者&#xff1a;Thescavenger链接&#xff1a;https://www.nowcoder.com/discuss/163165来源&#xff1a;牛客网你需要的前端面经个人情况本科&#xff0c;成都双非大学&#xff0c;大三开始正式学习前端&#xff0c;主攻 react&#xff0c;目前大四。已拿美团、字节跳动 offe…

vscode编辑python_VSCode+Python开发环境

准备开始转向用VSCode做开发&#xff0c;所以把一些常用的开发环境转移到VSCode上。 这次搭建的是Python3的开发环境。 其他相关博文&#xff1a; 一、测试环境 Windows 10 VSCode v1.11.1 Python v3.6.1 二、安装Visual Studio Code 三、安装Python这一步&#xff0c;记得…

多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接

滤除背景我们获得的点云可能包含一部分背景的点云。要去除背景&#xff0c;只保留人体信息&#xff0c;最简单的方式是使用直通滤波器滤除较远点。这部分代码如下&#xff1a;123456pcl::PassThrough<:pointxyz>pass; //设置滤波器对象pass.setInputCloud(cloud); //设置…

html5 css3浏览器,五大主流浏览器CSS3和HTML5兼容性大比拼

五大主流浏览器CSS3和HTML5兼容性大比拼出处&#xff1a;快科技 2011-05-26 16:15:42 编辑&#xff1a;萧萧[爆料] 收藏文章各大主流浏览器对CSS3和HTML5的支持越来越完善&#xff0c;曾经让多少前端开发人员心碎的IE系也开始拥抱标准。就在前几天&#xff0c;W3C的HTML5社…

自学python 编程基础知识_python学习-基础知识-1

1、计算机历史 计算机使用高低电压的两种状态来描述信息。计算机可以理解的只有二进制数据即010100011....&#xff0c;1个比特位可以表示的状态只有2种&#xff0c;n个比特位可以表示的状态有2的n次方种。 所以如果想要描述天气状态&#xff1a;天晴、下雨、刮风、下雪、霜冻&…

comparator 字符串比较大小_Java中Comparable和Comparator实现对象比较

当需要排序的集合或数组不是单纯的数字型时&#xff0c;通常可以使用Comparator或Comparable&#xff0c;以简单的方式实现对象排序或自定义排序。A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort…