亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

快速移動鼠標觸發問題及解決方法(ECharts外部調用保存為圖片操作及工作流接線mouseenter和mouseleave)

2019-11-20 09:07:51
字體:
來源:轉載
供稿:網友

記錄兩個項目開發中遇到的問題,一個是ECharts外部調用保存為圖片操作,一個是workflow工作流連接曲線onmouseenter和onmouseleave事件由于鼠標移動過快觸發問題。

一、外部按鈕調用ECharts圖表的保存為圖片操作

最近使用ECharts庫繪制圖表,依據需求希望可以把圖表設置的保存為圖片操作可以在圖表外部調用,主要是希望可以和項目之前的下載圖片操作界面保持一致。然后上網找了一些方法,看了看也沒遇到一個可以滿意的。后來,突然想到了echart開放了源碼,可以看看源碼,找到下載的方法,然后調用不就可以了(可能是我技術忒次,看了看不只到如何直接調用方法,所以把源方法copy下來,改了改,只需要傳遞圖表的容器id即可)

echart圖表示例(工具欄中有下載圖片按鈕)

附上代碼記錄一下

//傳遞圖表容器idfunction downloadImpByChart(chartId){var myChart = echarts.getInstanceByDom(document.getElementById(chartId));var url = myChart.getConnectedDataURL({pixelRatio: 5,  //導出的圖片分辨率比率,默認是1backgroundColor: '#fff',  //圖表背景色excludeComponents:[  //保存圖表時忽略的工具組件,默認忽略工具欄'toolbox'],type:'png'  //圖片類型支持png和jpeg});var $a = document.createElement('a');var type = 'png';$a.download = myChart.getOption().title[0].text + '.' + type;$a.target = '_blank';$a.href = url;// Chrome and Firefoxif (typeof MouseEvent === 'function') {var evt = new MouseEvent('click', {view: window,bubbles: true,cancelable: false});$a.dispatchEvent(evt);}// IEelse {var html = ''+ '<body style="margin:0;">'+ '<img src="' + url + '" style="max-width:100%;" title="' + myChart.getOption().title[0].text + '" />'+ '</body>';var tab = window.open();tab.document.write(html);}};

這樣,我們就可以不使用它自帶的下載操作了,就可以在外部自定義按鈕、超鏈接,直接調用上面的方法就可以實現外部調用保存圖片功能了。

二、onmouseenter和onmouseleave移動速度過快導致不能正確的時機觸發事件機制

  上圖說明一下

希望鼠標在曲線上移動時不僅可以高亮展示曲線,還要在鼠標位置增加剪刀圖標,按下剪刀時可以刪除曲線。之前就直接在曲線上使用的mouseener和mouseleave方法,然后鼠標在多條曲線上快速移動時,就會出現諸多問題(剪刀不會在光標離開時消失,多條曲線都變為高亮效果)。試了多加上一些邏輯判定和換用mouseover和mouseout方法均不管用。后來突然想到,可以使用mousemove方法。判定鼠標是否在剪刀圖表的區域范圍內,若在則高亮該條曲線,不再,則所有曲線恢復默認樣式。然后居然成功了。困擾了一整天的問題終于解決了。(由于mousemove在鼠標移動時需要不斷的去監聽和觸發事件,所以最好可以有一個狀態標識表明在該狀態在再去調用高亮曲線和繪制剪刀的方法。圖上的調用時機是,當鼠標進入曲線時,設定一個全局變量為true,此后的mousemove操作根據該變量判定

記錄一下部分關鍵代碼

鼠標就進入高亮及繪制剪刀圖表

$(document).on("mouseenter","svg .curve",function(e){//每次進入后都將恢復成原始狀態$("svg .node").each(function(){this.setAttribute("opacity","1");});$.each(relation.links,function(l,link){var in_node_id=link.input.nodeId;var out_node_id=link.output.nodeId;$("#"+out_node_id+link.output.pointName+in_node_id+link.input.pointName)[0].setAttribute("opacity","1");$("#"+out_node_id+link.output.pointName+in_node_id+link.input.pointName).attr("class","curve");});//編輯狀態下需要顯示可操作圖標if(args.state=="edit"){del_Curve.ref_Curve=this;del_Curve.has_del_curve=true;if($("#del-curve-icon").length>0){$("#del-curve-icon").css({position:"absolute",top: e.pageY-obj.offset().top-10,left: e.pageX-obj.offset().left-10,color:"#ff0000"}).show();}else{var del_icon=$("<i id='del-curve-icon' class='fa fa-scissors'></i>").css({position:"absolute",top: e.pageY-obj.offset().top-10,left: e.pageX-obj.offset().left-10,color:"#ff0000",fontSize:"20px"});obj.parent().append(del_icon);}del_Curve.xAxis=$("#del-curve-icon").offset().left;del_Curve.yAxis=$("#del-curve-icon").offset().top;}//然后高亮當前曲線if($(this).attr("start")!=undefined && $(this).attr("end")!=undefined){//設置透明度$("svg .node").each(function(){this.setAttribute("opacity","0.1");});$.each(relation.links,function(l,link){var in_node_id=link.input.nodeId;var out_node_id=link.output.nodeId;$("#"+out_node_id+link.output.pointName+in_node_id+link.input.pointName)[0].setAttribute("opacity","0.1");});obj.children("g").eq(0).children("g").eq(0).before($(this));$(this).attr("class","curve curve-hover");var in_node=$("#"+$(this).attr("start")).children("g").eq(0).children("circle").eq(1);in_node.attr("class",in_node.attr("class")+" node-hover");$("#"+$(this).attr("start"))[0].setAttribute("opacity","1");var out_node=$("#"+$(this).attr("end")).children("g").eq(0).children("circle").eq(1);out_node.attr("class",out_node.attr("class")+" node-hover");$("#"+$(this).attr("end"))[0].setAttribute("opacity","1");}});

移動鼠標判定觸發操作

$(document).on("mousemove",function(e){if(del_Curve.has_del_curve){var del_icon_width=$("#del-curve-icon").width();var del_icon_height=$("#del-curve-icon").height()          //判定當前光標位置,若不在剪刀圖表區域內則恢復默認樣式if(e.pageX<del_Curve.xAxis || e.pageX>(del_Curve.xAxis+del_icon_width) || e.pageY<del_Curve.yAxis || e.pageY>(del_Curve.yAxis+del_icon_height)){del_Curve.has_del_curve=false;$("svg .node").each(function(){this.setAttribute("opacity","1");});$.each(relation.links,function(l,link){var in_node_id=link.input.nodeId;var out_node_id=link.output.nodeId;$("#"+out_node_id+link.output.pointName+in_node_id+link.input.pointName)[0].setAttribute("opacity","1");$("#"+out_node_id+link.output.pointName+in_node_id+link.input.pointName).attr("class","curve");});$(del_Curve.ref_Curve).attr("class","curve");var in_node=$("#"+$(del_Curve.ref_Curve).attr("start")).children("g").eq(0).children("circle").eq(1);in_node.attr("class",in_node.attr("class").replace("node-hover","").trim());var out_node=$("#"+$(del_Curve.ref_Curve).attr("end")).children("g").eq(0).children("circle").eq(1);out_node.attr("class",out_node.attr("class").replace("node-hover","").trim());$("#del-curve-icon").hide();}}})

okay,其實工作流的問題,如果單單只是高亮曲線,mouseenter和mouseleave的效果就足夠了。不過示例中,需要在曲線上覆蓋一個剪刀圖標,這就會跟原來曲線的mouseenter和mouseleave有沖突。因為刪除曲線的觸發元素是剪刀圖標。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩不卡在线观看| 97视频免费在线观看| 欧美视频不卡中文| 欧美成人网在线| 日韩一区二区精品视频| 欧美日韩ab片| 亚洲综合一区二区不卡| 91sao在线观看国产| 精品久久香蕉国产线看观看gif| 久久久久日韩精品久久久男男| 精品欧美激情精品一区| 亚洲欧美日韩爽爽影院| 亚洲毛茸茸少妇高潮呻吟| 国产偷亚洲偷欧美偷精品| 亚洲人成绝费网站色www| 亚洲人成在线观| 亚洲人成网站777色婷婷| 日本午夜在线亚洲.国产| 欧美性开放视频| 亚洲精品黄网在线观看| 亚洲电影免费观看高清完整版| 国产美女精彩久久| 清纯唯美日韩制服另类| 日韩午夜在线视频| 中文字幕久精品免费视频| 国产精品一区二区三| 欧美视频在线观看免费网址| 久久久久久久久久久亚洲| 久久99久久99精品免观看粉嫩| 久久五月天色综合| 91在线观看免费高清完整版在线观看| 亚洲激情第一页| 国产成人精品一区二区在线| 国产精品视频精品| 日韩禁在线播放| 欧美电影免费观看高清| 国产精品av网站| 亚洲黄色www网站| 国产mv免费观看入口亚洲| 97超视频免费观看| 亚洲第一国产精品| 国产精品欧美日韩| 中文字幕精品视频| 在线视频亚洲欧美| 亚洲精品福利资源站| 久久精品色欧美aⅴ一区二区| 欧美成人合集magnet| 91精品国产成人| 精品久久久久久久久久| 国产精品aaa| 欧美一级bbbbb性bbbb喷潮片| 国产欧美va欧美va香蕉在线| 宅男66日本亚洲欧美视频| 日韩av在线看| 91丝袜美腿美女视频网站| 中文欧美在线视频| 亚洲欧美日韩综合| 久久精品成人欧美大片| 亚洲免费人成在线视频观看| 欧美一区三区三区高中清蜜桃| 亚洲一区二区三区久久| 亚洲国产日韩欧美在线动漫| 91视频8mav| 欧美大秀在线观看| 欧美日韩国产色| 在线观看亚洲区| 亚洲图中文字幕| 粗暴蹂躏中文一区二区三区| 亚洲精品国产电影| 51ⅴ精品国产91久久久久久| 欧美国产日韩xxxxx| 欧美怡红院视频一区二区三区| 国产在线观看一区二区三区| 92国产精品久久久久首页| 欧美成人小视频| 国产精品国语对白| 精品日本美女福利在线观看| 欧美成在线视频| 91网站免费看| 韩国国内大量揄拍精品视频| 久久成人精品一区二区三区| 这里只有精品视频在线| 欧美性猛交xxxx乱大交| 国产精品成av人在线视午夜片| 国产一区二区三区网站| 亚洲黄一区二区| 日韩中文av在线| 福利一区福利二区微拍刺激| 成人有码视频在线播放| 97久久精品人人澡人人爽缅北| 日韩女在线观看| 欧美精品久久久久久久| 久久成人在线视频| 51视频国产精品一区二区| 欧美日韩免费观看中文| 中文字幕亚洲欧美日韩高清| 久热精品视频在线观看一区| 欧美色视频日本高清在线观看| 国产精品美女视频网站| 日韩av在线看| 97精品伊人久久久大香线蕉| 97香蕉超级碰碰久久免费的优势| 亚洲人成欧美中文字幕| 国产视频精品自拍| 久久亚洲影音av资源网| 大胆欧美人体视频| 国产精品一区二区三区成人| 91精品国产91久久久| 亚洲色图av在线| 亚洲人成网站在线播| 欧美一区二区三区艳史| 国语自产偷拍精品视频偷| 黑人巨大精品欧美一区二区| 欧美日韩综合视频| 日韩激情在线视频| 亚洲黄色成人网| 亚洲国产成人久久| 国产精品电影网站| 中文字幕最新精品| 亚洲一区亚洲二区| 欧美亚洲视频在线看网址| 国产精品三级在线| 欧美性受xxxx白人性爽| 亚洲福利小视频| 久久久久久91香蕉国产| 国产精品久久久久国产a级| 亚洲国产精品yw在线观看| 92看片淫黄大片欧美看国产片| 欧美高清在线视频观看不卡| 久久久久久久久91| 高跟丝袜一区二区三区| 亚洲国产日韩欧美综合久久| 国产亚洲a∨片在线观看| 欧美精品激情blacked18| 欧美日韩国产精品一区二区三区四区| 国产成人福利网站| 亚洲成人三级在线| 高清亚洲成在人网站天堂| 中文字幕精品www乱入免费视频| 欧美限制级电影在线观看| 国产日韩av在线播放| 精品久久久久久久久中文字幕| 国产黑人绿帽在线第一区| 成人h视频在线观看播放| 清纯唯美亚洲综合| 国产精品极品美女在线观看免费| 国产丝袜高跟一区| 在线精品视频视频中文字幕| 成人xxxxx| 亚洲性无码av在线| 日韩va亚洲va欧洲va国产| 欧美久久精品一级黑人c片| 国产91免费看片| 久久久久久中文字幕| 亚洲天堂av网| 2018中文字幕一区二区三区| 国产欧美一区二区三区视频| 欧美日韩国产二区| 一区二区三区四区精品| 国产精品直播网红| 欧美性黄网官网| 26uuu亚洲伊人春色| 精品视频偷偷看在线观看| 国产午夜精品一区理论片飘花|