echarts移动markline(拖拽单条markline)

echarts移动markline(拖拽单条markline)

效果

请添加图片描述

问题由来:

图表中需要一个移动的标线,辅助观察图表;

想法:

意思是在原来点或者原来标线上新增一个图层,拖动图层动态绘制新的点或者新的标线;

参考文档:

1.可拖拽的点
https://echarts.apache.org/examples/zh/editor.html?c=line-draggable
2.区域绘制
https://echarts.apache.org/zh/option.html#graphic.elements-rect.type
3.别人1博客
https://blog.csdn.net/Pumpkinman/article/details/105008030

自己练习的demo

<!--
  此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=line-simple&code=PYBwLglsB2AEC8sDeAoWsAeBBDEDOAXMmurGAJ4gCmRA5AMYCGYVA5sAE7m0A0J6AE2aMiAbVoBZGL1i0AKgFcqM2gHUqAlXIAWClQDEOEFQGVmphdFoBdEgF8-6cjnxFUpMpRqyAbowA2SrT2jrB4VEZUhLCi_MQegsJiAIwArAAMPLAATADMmTnZACxZ2ckAHFnJualVRQDspQBs6dahHhTUdP4Q0MrtpAC2jBwA1gAyvd7uCeh45IMARsD-YrTQMP2yG302Ax7-jItUq8hh2sAA7kQAZgHhsA5xB1MmFP7Tzwn0K5x0AMT6fTpEHpXhfDyXCACMDaIglCGkTreWh4FbQ4KzdBPLGwIRgEQxJCwZy4aIVdKPWyzOxxWnoWx2ADcQA
  ⚠ 请注意,该图表不是 Apache ECharts 官方示例,而是由用户代码生成的。请注意鉴别其内容。
-->
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">

<head>
    <meta charset="utf-8">
</head>

<body style="height: 100%; margin: 0">
    <div id="container" style="height: 100%"></div>
    <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
    <script type="text/javascript">
    var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
        renderer: 'canvas',
        useDirtyRect: false
    });
    var app = {};
    var option;

    //初始值
    var markLineYAxis = 180;
    option = {
        xAxis: {
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {
            type: 'value',
            id: '2', //指定id
        },
        series: [{
            id: "aaa",
            animation: false,
            data: [150, 230, 224, 218, 135, 147, 260],
            type: 'line',


            // 这里是标线的展示形式
            markLine: {
                animation: false,
                symbol: ['none', 'none'],
                label: {
                    show: true,
                    position: 'start',
                    color: '#FF0000',
                    formatter: (params) => { return "标线" + params.value }
                },
                lineStyle: {
                    color: '#FF0000',
                    width: 4,
                    type: 'solid'
                },
                data: [{ yAxis: markLineYAxis}]
            }

        }]
    };

    myChart.setOption(option);

    // 增加适配宽度
    var showWidth =2000;
    showWidth = window.innerWidth || document.documentElement.clientWidth;
    showWidth = showWidth
    console.log(showWidth)




    //以下实现拖住功能
    var option2;
    option2 = {
        // 绘制阈值的graphic line
        graphic: {
            type: 'rect',
            z: 100,
            shape: {
                width: showWidth,  
                height: 0
            },

            //构造坐标扔进去
            position: [0, myChart.convertToPixel({ yAxisId: '2' }, markLineYAxis)],  
            draggable: true,
            style: {
                fill: 'rgba(0,0,0,0)',  // fill: 'rgba(0,0,0,0.03)',  方便观察
                stroke: 'rgba(0,0,0,0)', // stroke: 'rgba(0,0,0,0.03)',  方便观察
                lineWidth: 10
            },
            cursor: 'move',
            ondrag: onPointDragging
        },
    }
    myChart.setOption(option2);

    function onPointDragging() {
        //阈值变动
        console.log(this.position)
        //取动态值,设置进去
        yAxis = myChart.convertFromPixel({ yAxisId: '2' }, this.position[1]);
        myChart.setOption({
            series: [{
                id: 'aaa',
                markLine: {
                    data: [
                        { yAxis: yAxis },
                    ],
                }
            }]
        });
    }
    </script>
</body>

</html>

在这里插入图片描述

demoe都写好了,开始写业务了,

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts 中的 markline 组件默认是不能拖动的,但是我们可以通过监听鼠标事件和 markline 的位置属性,手动实现 markline拖动。 具体实现步骤如下: 1. 在 option 中定义 markline 组件,设置其相关属性,例如起点、终点、样式等。 2. 监听鼠标事件,当鼠标按下时,记录鼠标在图表中的位置和 markline 的起始位置。 3. 监听鼠标事件,当鼠标移动时,计算鼠标在图表中的位置与起始位置的差值,并将其加到 markline 的起始位置上。 4. 在 markline 上添加 draggable 属性,使其能够被拖动。同时,设置 label 的 position 为 'middle',以保证 label 文字显示在 markline 上方。 下面是一个示例代码: ``` option = { // 其他配置项 series: [{ type: 'line', data: [10, 20, 30, 40, 50], markLine: { silent: true, // 取消鼠标点击事件 symbol: 'none', label: { position: 'middle', formatter: 'Markline' }, lineStyle: { color: '#333' }, data: [{ yAxis: 30 }] } }] }; var chart = echarts.init(document.getElementById('main')); var markline = chart.getModel().getComponent('series', 0).getMarkLineModel(0); var start = null; chart.getZr().on('mousedown', function(params) { start = chart.convertFromPixel({ gridIndex: 0 }, [params.offsetX, params.offsetY]); }); chart.getZr().on('mousemove', function(params) { if (!start) { return; } var end = chart.convertFromPixel({ gridIndex: 0 }, [params.offsetX, params.offsetY]); var diff = end[1] - start[1]; markline.option.data[0].yAxis += diff; start = end; chart.setOption({ series: [{ markLine: markline.option }] }); }); chart.getZr().on('mouseup', function(params) { start = null; }); markline.option.label.show = true; markline.option.draggable = true; ``` 在上述代码中,我们首先定义了一个 markline设置其样式和位置。然后监听了鼠标事件,当鼠标按下时,记录 markline 的起始位置。当鼠标移动时,计算鼠标位置与起始位置的差值,并将其加到 markline 的起始位置上,从而实现 markline拖动。在 markline 上添加了 draggable 属性,使其能够被拖动,同时设置 label 的 position 为 'middle',以保证 label 文字显示在 markline 上方。最后,我们将 markline 的 option 通过 setOption 方法设置到图表中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值