美文网首页
5.6 线上的图形绑定点击事件

5.6 线上的图形绑定点击事件

作者: skoll | 来源:发表于2022-01-13 09:38 被阅读0次

点击,线条上出现图形,并且图形沿着线流动

1 .现在好像做不到添加元素,那就只有向隐藏,点击的时候出现了,那就是要先看是否支持动画的链式调用了..
2 .怎么样做到给markup已经定好的结构新增元素呢?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="https://unpkg.com/@antv/x6@1.1.1/dist/x6.js"></script> -->
    <!-- 实在调试不出来,那就换最新的版本试试 -->
    <script src="https://unpkg.com/@antv/x6/dist/x6.js"></script>
    <!-- 线条过渡样式 -->
    <!-- 这个实现也有点拉,就是多加几条线,然后每个都展示一点点,那就是说,有多少种颜色,就要加多少线条 -->
</head>
<body>
    <h3>基本图形和属性</h3>
    <div id="container">

    </div>
    <script>
        const graph=new X6.Graph({
            container:document.getElementById('container'),
            width:800,
            height:600,
            grid:true,  
        })
       graph.addEdge({
           source:{x:320,y:60},
           target:{x:300,y:260},
           vertices:[{x:320,y:200}],
           markup:[
                {
                    tagName:'path',
                    selector:'p1'
                },{
                    tagName:'path',
                    selector:'p2'
                },
                //代表一条线段好像一定要有两个path,一个是明处显示,一个是在暗处,当作阴影之类的
                {
                    tagName:'rect',
                    //要渲染一个矩形,
                    selector:"sign"
                },{
                    tagName:'circle',
                    selector:'c1'
                    //渲染一个大圆
                },{
                    tagName:'circle',
                    selector:'c2'
                    //渲染一个小圆,和上面的组和显示为一个圆环
                },{
                    tagName:"text",
                    selector:"signText",
                    //显示一段文本
                }
           ],
           attrs:{
               p1:{
                   fill:'none',
                   stroke:'#237804',
                   strokeWidth:6,
                   strokeLinejoin:'round',
                   connection:true,
                   //加这个属性才能在path上面绑定上d属性,不然就爆炸
                   //仅适用于边的 <path> 元素,当该属性为 true 时,表示将在该元素上渲染边,即设置该元素的 d 为边的 pathData
               },
               p2:{
                connection:true,
                fill:'none',
                stroke:'#237804',
                strokeWidth:6,
                strokeLinejoin:'round'
               },
               sign:{
                   x:-20,
                   y:-10,
                   width:50,
                   height:20,
                   stroke:"#237804",
                   fill:"#73d13d",
                   atConnectionLength:30,
                   //将边中的指定元素移动到指定偏移量的位置处,并自动旋转元素,使其方向与所在位置边的斜率保持一致

                   //问题来了,如何知道这个矩形属于这条边呢,仅仅是因为他们被同一个g包围起来么
                   strokeWidth:1,
                   event:'click:rect',
                   //定义了可以触发的事件
                   cursor:'pointer'

               },
               signText:{
                   atConnectionLength:24,
                   textAmchor:'middle',
                   textVerticalAnchor:'middle',
                   text:'按钮',
                   event:'click:rect',
                   cursor:'pointer'
               },
               c1:{
                   r:10,
                   stroke:"#5222d",
                   fill:"#fe854f",
                   atConnectionRatio:0.68,
                   strokeWidth:1,
               },
               c2:{
                   r:8,
                   stroke:"#f5222d",
                   fill:"white",
                   atConnectionRatio:0.68,
                   strokeWidth:1,
               }
           }
       })

       graph.on('edge:click',(e)=>{
           console.log('click',e)
           e.e.stopPropagation()

           const t=e.edge.attr('c1/atConnectionRatio')>0.3?0.3:0.9
           //获取data,attrs里面的某个属性值,

           //并且重新搞成一个新的值

           //动画配置
           const options={
               delay:100,
               duration:1000,
               timing:X6.Timing.easeInOutBack,
           }

           e.edge.transition('attrs/c1/atConnectionRatio',t,options)
           //元素.变化的属性,变化后的值,变化的参数
           e.edge.transition('attrs/c2/atConnectionRatio',t,options)
       })


        
    </script>
</body>
</html>

相关文章

网友评论

      本文标题:5.6 线上的图形绑定点击事件

      本文链接:https://www.haomeiwen.com/subject/xpqwcrtx.html