svg 折线实现地图点击画线标记

思路:
	将坐标转换成svg面板内的坐标
	鼠标按下获取坐标并生成圆标记->鼠标移动动态获取坐标并给折线,实现线随鼠标移动->设置右键点击事件取消绘图即取消之前两种事件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width:780px;
            height:400px;
            margin:0 auto;
        }
    </style>
</head>
<body>
    <div style="border:solid 1px orange;" class='box'>

        <svg  id='svg' width='100%' height='100%'
        xmlns="http://www.w3.org/2000/svg">
 
        </svg>
        
        
    </div>

    <script>
window.onload=function(){

    //命名空间
    let svgNS="http://www.w3.org/2000/svg";

    //获取父级元素
    var div=document.querySelector('.box');
    //获取svg
    let svg=document.querySelector('#svg');

    //创建标签
    function createTag(tag,obj){
        var oTag=document.createElementNS(svgNS,tag);
        for(var attr in obj){
            oTag.setAttribute(attr,obj[attr]);
        }

        return oTag;

    }
    //创建折现
    var zx=createTag('polyline',{'stroke':'blue','fill':'none','stroke-width':'2'})
    var point='';
    var flag=0;

    //在svg面板按下事件
    svg.onmousedown=function(e){
        //创建折现
        var zx=createTag('polyline',{'stroke':'blue','fill':'none','stroke-width':'2'})
        
        //获取鼠标按下起始点坐标,相对于svg
        var x1=e.clientX-div.offsetLeft;
        var y1=e.clientY-div.offsetTop;

        if(point=='')
        {
            point=x1+','+y1;
        }else{
            point=point+','+x1+','+y1;
        }

        zx.setAttribute('points',point);

        //鼠标按下创建小圆点标记
        var circle=createTag('circle',{'cx':x1,'cy':y1,'r':'10','fill':'none','stroke':'red'})

        svg.appendChild(zx);
        svg.appendChild(circle);
        flag=1;
    }

        //在svg面板点击后移动,线段长度也跟着变化
        svg.onmousemove=function(e){
            if(flag==1){
                console.log(1);
                //获取鼠标移动时坐标,相对于svg
                var x2=e.clientX-div.offsetLeft;
                var y2=e.clientY-div.offsetTop;

                zx.setAttribute('points',point+','+x2+","+y2);

                svg.appendChild(zx);
            }
        }

        //设置右键点击取消绘图事件
        svg.oncontextmenu=function(){
            svg.onmousemove=null;
            svg.onmousedown=null;
            // return false;
        }
}


    </script>
</body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SVG折线图动画效果是一种通过使用SVG(可缩放矢量图形)实现的动画效果。在折线图中,数据点通过折线连接,以展示数据的变化趋势。通过动画效果,可以使图表更加生动和吸引人。 SVG折线图的动画效果可以通过以下几种方式实现: 1. 数据点动态变化:可以使用SVG的动画属性,如<animate>元素和animate属性,来实现数据点在折线图中的动态变化。这可以通过设置数据点的位置、颜色等属性的渐变来展示数据的变化。 2. 折线路径的过渡效果:可以使用SVG的<animateTransform>元素和transform属性,来实现折线路径的平滑过渡效果。可以通过设置折线路径的平移、旋转、缩放等变换,来展示折线的变化。 3. 数据标签的动态显示:可以通过在SVG中添加文本元素,并使用动画属性来实现数据标签的动态显示效果。这可以通过设置文本元素的透明度、位置等属性的变化来展示数据标签的动态显示。 4. 鼠标交互效果:可以使用JavaScript等编程语言,结合SVG的事件属性,来实现鼠标交互效果。例如,当鼠标悬停在数据点上时,显示数据的具体数值;当点击数据点时,显示关联的详细信息等。 通过应用这些动画效果,SVG折线图可以更好地展示数据的变化趋势和信息,提高图表的可读性和吸引力。同时,结合其他前端技术和设计原则,可以进一步优化折线图的动画效果,提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值