麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 09:07:51
字體:
供稿:網(wǎng)友

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

一、外部按鈕調(diào)用ECharts圖表的保存為圖片操作

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

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

附上代碼記錄一下

//傳遞圖表容器idfunction downloadImpByChart(chartId){var myChart = echarts.getInstanceByDom(document.getElementById(chartId));var url = myChart.getConnectedDataURL({pixelRatio: 5,  //導(dǎo)出的圖片分辨率比率,默認(rèn)是1backgroundColor: '#fff',  //圖表背景色excludeComponents:[  //保存圖表時忽略的工具組件,默認(rèn)忽略工具欄'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);}};

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

二、onmouseenter和onmouseleave移動速度過快導(dǎo)致不能正確的時機觸發(fā)事件機制

  上圖說明一下

希望鼠標(biāo)在曲線上移動時不僅可以高亮展示曲線,還要在鼠標(biāo)位置增加剪刀圖標(biāo),按下剪刀時可以刪除曲線。之前就直接在曲線上使用的mouseener和mouseleave方法,然后鼠標(biāo)在多條曲線上快速移動時,就會出現(xiàn)諸多問題(剪刀不會在光標(biāo)離開時消失,多條曲線都變?yōu)楦吡列ЧT嚵硕嗉由弦恍┻壿嬇卸ê蛽Q用mouseover和mouseout方法均不管用。后來突然想到,可以使用mousemove方法。判定鼠標(biāo)是否在剪刀圖表的區(qū)域范圍內(nèi),若在則高亮該條曲線,不再,則所有曲線恢復(fù)默認(rèn)樣式。然后居然成功了。困擾了一整天的問題終于解決了。(由于mousemove在鼠標(biāo)移動時需要不斷的去監(jiān)聽和觸發(fā)事件,所以最好可以有一個狀態(tài)標(biāo)識表明在該狀態(tài)在再去調(diào)用高亮曲線和繪制剪刀的方法。圖上的調(diào)用時機是,當(dāng)鼠標(biāo)進(jìn)入曲線時,設(shè)定一個全局變量為true,此后的mousemove操作根據(jù)該變量判定

記錄一下部分關(guān)鍵代碼

鼠標(biāo)就進(jìn)入高亮及繪制剪刀圖表

$(document).on("mouseenter","svg .curve",function(e){//每次進(jìn)入后都將恢復(fù)成原始狀態(tài)$("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");});//編輯狀態(tài)下需要顯示可操作圖標(biāo)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;}//然后高亮當(dāng)前曲線if($(this).attr("start")!=undefined && $(this).attr("end")!=undefined){//設(shè)置透明度$("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");}});

移動鼠標(biāo)判定觸發(fā)操作

$(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()          //判定當(dāng)前光標(biāo)位置,若不在剪刀圖表區(qū)域內(nèi)則恢復(fù)默認(rèn)樣式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的效果就足夠了。不過示例中,需要在曲線上覆蓋一個剪刀圖標(biāo),這就會跟原來曲線的mouseenter和mouseleave有沖突。因為刪除曲線的觸發(fā)元素是剪刀圖標(biāo)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 午夜视频啊啊啊 | 羞羞的视频免费在线观看 | 国产一级二级毛片 | 国产毛片在线看 | 国内精品视频饥渴少妇在线播放 | 成人性生活视频 | 免费观看视频在线观看 | 中文字幕亚洲情99在线 | 黄视频网站免费在线观看 | 久久在现视频 | 亚洲成人久久精品 | 日本aaaa片毛片免费观蜜桃 | 欧美www| 久久九九热re6这里有精品 | 久久久久久久久久性 | 一级免费毛片 | 久久成人精品视频 | 久久人人人 | 韩日黄色片 | 国产午夜精品在线 | 媚药按摩痉挛w中文字幕 | 国产高潮好爽好大受不了了 | 蜜桃视频观看麻豆 | 91羞羞 | 国产精品久久久久久久久久久久午夜 | 日韩在线欧美在线 | 国产精品伊人久久 | 羞羞网站在线看 | 亚洲成人免费网站 | 国产亚洲精彩视频 | 亚洲午夜一区二区三区 | 欧美成人精品一区二区三区 | 免费放黄网站在线播放 | 午夜久久视频 | av日韩一区二区三区 | 女人叉开腿让男人桶 | 久久人人爽人人爽人人片av高清 | 极品xxxx欧美一区二区 | 欧美一级一区二区三区 | 日韩视频区 | 国产一级一国产一级毛片 |