需求:用户在图片上点击选择绘制一个多边形区域,双击停止绘制,在结束绘制后给后台返回这组多边形顶点的位置

参考了百度地图提供的绘制多边形方法,但百度地图只提供了API可以调用,所以只能自己写方法了
//以svg的jquery对象调用DrawPloygon(),svg内的图片需要设置为background;
//因为jquery的append方法和原生js的creactElement方法只能创建双标签,但path标签无法再双标签下输出样式,所以每次图形完成后讲svg内的path存储,再次绘制时以jquery的html方法创建新的path标签,再读取存储的path添加到svg内部
//返回的顶点参数是相对于svg的top和left的百分比
//在双击取消绘制时可能会触发user-select属性,需自行设置取消
$.extend({stopDefault:function(e) {//阻止默认浏览器动作(W3C)if (e && e.preventDefault){e.preventDefault();} else{window.event.returnValue = false;return false;}},//阻止浏览器的默认行为stopDefault:function (e) {if (e && e.preventDefault ){e.preventDefault();}else{window.event.returnValue = false;return false;}},// 讲顶点的坐标换算成相对应的百分比并存入PointPosition中DealArr:function(arr,origin,ContainerWidth,ContainerHeight){var arr=arr;var Oarr=$.PercentPoint(origin.split(' ').splice(1,2),ContainerWidth,ContainerHeight);var Larr=$.PercentPoint(arr,ContainerWidth,ContainerHeight);var Last=Oarr.concat(Larr)$.PointPosition.push(Last);},//计算百分比函数PercentPoint:function(arr,ContainerWidth,ContainerHeight){for(var i=0;i<arr.length;i++){if(i%2==1){arr[i]=(arr[i]/ContainerHeight).toFixed(3);}else {arr[i]=(arr[i]/ContainerWidth).toFixed(3);}};return arr},//储存点坐标的数组PointPosition:[],//每次双击后酱svg内的path存入数组cloneDOMcloneDOM:[]
})$.fn.extend({DrawPloygon:function(color,FillColor,StrokeWidth){var ClickTimes=0;  //记录是否是第一次点击var self=$(this);var origin;var ClickPoint;var color='red' || color;   //线条颜色var StrokeWidth='3' || StrokeWidth;     //线条宽度var FillColor='red' || FillColor;       //填充颜色var arr;var length;var ContainerWidth=self.width();var ContainerHeight=self.height();//设置默认属性var DefaultValue="stroke='"+color+"' stroke-width='"+StrokeWidth+"' stroke-linejoin='round'stroke-linecap='round'fill-rule='evenodd'stroke-opacity='0.8'stroke-dasharray='none'fill-opacity='0.4' fill='"+FillColor+"'stroke-dasharray='none'";self.on('click',function(e){ClickTimes++;if(ClickTimes == 1){origin=' '+e.offsetX+' '+e.offsetY+' ';self.html('<path d="M -9999 -9999"'+DefaultValue+' />');if($.cloneDOM.length){$.cloneDOM.map(function(v,i){self.prepend(v)})}}else{arr=self.find('path').last().attr('d').split(' ');length=arr.length;ClickPoint=arr.slice(3,length-3).join(' ');};});self.on('mousemove',function(e){if(ClickTimes>=1){$.stopDefault(e);var path=self.find('path').last();var MovePoint=' '+e.offsetX+' '+e.offsetY;if(ClickTimes == 1){path.attr('d','M'+origin+'L'+MovePoint+origin);} else{path.attr('d','M'+origin+ ClickPoint+MovePoint+origin);};}});self.dblclick(function(e){if(ClickTimes>=1){$.stopDefault(e);self.unbind();$.DealArr(arr.slice(4,length-3),origin,ContainerWidth,ContainerHeight);$.cloneDOM.push(self.find('path').last().clone())self.unbind();self.DrawPloygon()}});}
})//$('#svg').DrawPloygon()

基于SVG的绘制多边形jQuery插件相关推荐

  1. 基于svg开发绘制地铁图

    中国地铁图 中国地铁图,基于svg开发,支持PC.移动端多种浏览器.覆盖北上广多个城市. 线上开源地址 https://github.com/StavinLi/the-subway-of-china ...

  2. 转 jquery插件--241个jquery插件—jquery插件大全

    241个jquery插件-jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今 ...

  3. 200个 jquery插件

    引用:http://paranimage.com/jquery-plugin-list/ jquery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其te ...

  4. 241个jquery插件—jquery插件大全

    jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team. jQuery是继prototype之后又一个优秀的Javascrīpt框架.其经典 ...

  5. 基于HTML5 SVG可互动的3D标签云jQuery插件

    svg3dtagcloud.js是一款基于HTML5 SVG的3D标签云jQuery插件.该3D标签云插件不需要额外的CSS样式,可使用鼠标与标签进行互动,并提供很多参数来控制标签云的外观. 效果演示 ...

  6. jQuery:收集一些基于jQuery框架开发的控件/jquery插件2

    Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. 主页:http://letmehaveblog.blogspot.com/2007/10/ ...

  7. 1. 概述--从零起步实现基于Html5的WEB设计器Jquery插件

    当一个软件为了达到一定的业务扩展性时(产品上线后限定范围内的用户需求无需变更代码,通过简单的配置可满足用户的要求),必然要求软件是可配置的. 笔者过去开发过很多配置型的管理软件,从可配置的表单设计(F ...

  8. 基于Jquery插件Uploadify实现实时显示进度条上传图片

    网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们可以参考 ...

  9. html画流程图插件,基于SVG的流程图插件Flowchart.js

    Flowchart.js基于SVG的流程图插件,它仅需几行代码即可在 Web 上完成流程图的构建.可以从文字表述中画出简单的 SVG 流程图,也可以画出彩色的图表. var diagram = flo ...

最新文章

  1. 只要有钱50岁男人也嫁
  2. MyBatis动态SQL-foreach-数组/List
  3. 关于codeblocks插件(持续更新)
  4. 推荐一些经过实践检验的学习方法
  5. [Diary]忧伤,止不住忧伤……
  6. P1165 日志分析
  7. python 模拟登录验证码_Python模拟登陆 —— 征服验证码 3 CSDN
  8. 2022-06-14 QThread CPU压力测试
  9. git 找到冲突_git怎么知道哪个文件冲突
  10. 如何使用真机测试运行HarmonyOS应用
  11. 在 VSLAM 的后端优化中的重投影误差的雅可比计算详细推导
  12. 基于stm32的mpu6050传感器实验
  13. 【论文精读】Pairwise learning for medical image segmentation
  14. 日本巡逻机低飞掠过韩国军舰 韩军方斥“挑衅”
  15. python实现矩阵共轭和共轭转置
  16. 至联云分析:FIL上线后值多少钱?
  17. POJ 1737 Connected Graph(组合)
  18. python在日常工作中的具体应用_python在实际工作中的应用有哪些
  19. 按键控制8*8led点阵C语言程序,单片机按键控制8X8LED点阵屏显示图形 程序的几个问题...
  20. 如何避开面试中的5大误区?老司机教你正确的【面试技巧】!

热门文章

  1. Hanoi Tower Troubles Again! ZOJ - 1239
  2. 深度测评:RAKsmart美国站群服务器怎么样
  3. 去除照片模糊的有效方法——像素重建与修复
  4. Django admin修改app名称
  5. 在ENSP中配置DHCP服务器
  6. 容齐的身世_白发容齐和容乐是什么关系?容齐和容乐是兄妹吗?
  7. Feign - Error while extracting response for type [class java.lang.String]
  8. 推荐一个220V控制12V的电路板继电器-220v降压控制继电器
  9. 华三防火墙安全策略配置
  10. OPTA 7模式测试说明