zoukankan      html  css  js  c++  java
  • 给ECharts添加右键点击事件,实现右键功能菜单

    由于项目的需要,使用ECharts 的力导向图来实现 整个EDW数据架构的血缘分析,由于ECharts并没有给组件定义有右键的事件,同时ECharts是开源的项目,所以研究了下源码,将ECharts2.2.2 的echarts.js给修改了一番。将过程描述如下,后面提供修改后的echarts.js下载,欢迎使用!

    先说明一下,js获得右键事件大概从下面两个事件考虑:

    1、onmousedown:通过判断e.button = '2' 时,响应右键事件。

    2、oncontextmenu:通过先屏蔽默认的右键菜单事件,再给需要响应右键菜单的组件加上contextmenu的响应。

    第一种,我先实现了,但是ECharts的组件定以有click事件和鼠标拖动事件,所以在mousedown的时候又触发多个事件,这样做起来,页面在快速点击测试的时候,总是感觉反映迟钝,甚至造成部分不响应。所以最后选了第二种做法:

    新增'CONTEXTMENU'事件:

     var ZR_EVENT_LISTENS = [
            'CLICK',
            'DBLCLICK',
            'CONTEXTMENU',
            'MOUSEOVER',
            'MOUSEOUT',
            'DRAGSTART',
            'DRAGEND',
            'DRAGENTER',
            'DRAGOVER',
            'DRAGLEAVE',
            'DROP'
        ];
    _oncontextmenu: function (param) {
        //if(arguments[0].event.button == '2'){
        //    callChartListMethodReverse(this, 'onmousedown', param);
            if (param.target) {
                var ecData = this._eventPackage(param.target);
                if (ecData && ecData.seriesIndex != null) {
                    this._messageCenter.dispatch(ecConfig.EVENT.CONTEXTMENU, param.event, ecData, this);
                }
            }
        //}
    },

     修改ECharts源码的其他地方就不特别指出了,有兴趣查看修改后的源码。

        现在对界面文件进行些说明,下面模拟了些血缘分析的静态数据(项目是从后台查出的,这里就只能随便模拟一些数据看效果了),准备一个div,用来定义右键菜单:

    <div id="menuuu"  onMouseLeave ="this.style.display = 'none';">
            <ul><!--右键弹出菜单-->        
                <li id="menu_blood" onClick="alert('血缘分析');" onMouseOver="this.style.background = '#999999';" onMouseOut="this.style.background = '#CCCCCC';">
                    <img src="menu_blood.png" /><font>血缘分析</font>
                </li>
                <li id="menu_influence" onClick="alert('影响分析');" onMouseOver="this.style.background = '#999999';" onMouseOut="this.style.background = '#CCCCCC';">
                    <img src="menu_influence.png" /><font>影响分析</font>
                </li>
            </ul>
        </div>
    1. <script src="../echarts-2.2.2/echarts-2.2.2/build/dist/echarts_mhf.js"></script>  

     申明使用到右键菜单事件:

    function rightBt(param){
        var menu = document.getElementById("menuuu");
        var event = param.event;
        var pageX = event.pageX;
        var pageY = event.pageY;
        menu.style.left = pageX + 'px';
        menu.style.top = pageY + 'px';
        menu.style.display = "block";
    }
                                
    //myChart.on(ecConfig.EVENT.CLICK, focus);
    //myChart.on(ecConfig.EVENT.MOUSEDOWN, rightBt);
    myChart.on(ecConfig.EVENT.CONTEXTMENU, rightBt);

     好了差不多了,看效果图:


    转http://mhf-csu.iteye.com/blog/2223804

    代码路径

    http://download.csdn.net/detail/mhf_csu/8862597

  • 相关阅读:
    Pyspider实例之抓取数据并保存到MySQL的数据库
    pyspider中内容选择器常用方法汇总
    pyspider用PyQuery解析页面数据
    CasperJs 入门介绍
    移动应用抓包调试利器Charles
    GO语言文件的创建与打开实例分析
    Golang之实现一个负载均衡算法(随机,轮询)
    重新认识一个强大的 Gson
    关于Java的File.separator
    centos重启redis后,数据丢失
  • 原文地址:https://www.cnblogs.com/ilinuxer/p/5281525.html
Copyright © 2011-2022 走看看