基于SVG的绘制多边形jQuery插件

需求:用户在图片上点击选择绘制一个多边形区域,双击停止绘制,在结束绘制后给后台返回这组多边形顶点的位置
参考了百度地图提供的绘制多边形方法,但百度地图只提供了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;
        }
    },
    // 讲顶点的坐标换算成相对应的百分比并存入PointP
首先你需要了解SVG的基础知识,以及如何使用typescript来操作SVGSVG是一种基于XML的图形格式,可以用于绘制矢量图形,包括线条、多边形、文本、图像等。 在typescript中,你可以使用SVG的DOM接口来操作SVG元素,例如创建元素、设置属性、添加事件等。 下面是一个简单的例子,使用typescript和SVG绘制一个简单的电路图: ```typescript // 创建svg元素 const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.setAttribute("width", "500"); svg.setAttribute("height", "500"); document.body.appendChild(svg); // 创建一个矩形元素表示电源 const powerRect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); powerRect.setAttribute("width", "50"); powerRect.setAttribute("height", "50"); powerRect.setAttribute("x", "50"); powerRect.setAttribute("y", "50"); powerRect.setAttribute("fill", "red"); svg.appendChild(powerRect); // 创建一个矩形元素表示电灯 const lightRect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); lightRect.setAttribute("width", "50"); lightRect.setAttribute("height", "50"); lightRect.setAttribute("x", "200"); lightRect.setAttribute("y", "50"); lightRect.setAttribute("fill", "yellow"); svg.appendChild(lightRect); // 创建一条线表示电线 const wireLine = document.createElementNS("http://www.w3.org/2000/svg", "line"); wireLine.setAttribute("x1", "100"); wireLine.setAttribute("y1", "75"); wireLine.setAttribute("x2", "175"); wireLine.setAttribute("y2", "75"); wireLine.setAttribute("stroke", "black"); wireLine.setAttribute("stroke-width", "2"); svg.appendChild(wireLine); ``` 在上面的代码中,我们首先创建了一个SVG元素,然后分别创建了电源、电灯和电线的SVG元素,并设置了它们的属性,最后将它们添加到SVG元素中。 这只是一个简单的例子,实际上,绘制复杂的电路图需要更多的SVG元素和更复杂的布局。你可以使用typescript和SVG的DOM接口来创建和操作这些元素,以实现你的电路图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值