快速移动鼠标引发的问题和解决方案(ECharts外部调用保存为操作和工作流布线MouseEnter和MouseLeave)
一、外部按钮调用Echarts图应保存为图片操作
最近,ECharts库已被用于绘制图表。根据需求,我们希望我们的图表设置保存为图片的操作,可以调用外部的图表,主要是为了与之前的项目的图片下载,操作界面保持一致。然后在网上找到了一些方法,看看也没有达到一个令人满意的。后来,突然想到Echart开放源代码,可以查看源代码,找到下载的方法,然后调用不能(或许,我看技术,不仅对的方法,所以方法如何直接调用源复制下来,改变,只需要通过ID容器图)
Echart图示例(有一个按钮,下载图片工具栏中)
将代码附加到记录中
idfunction downloadimpbychart / /转移图容器(chartid){
VaR MyChart = echarts.getinstancebydom(document.getelementbyid(chartid));
var url = mychart.getconnecteddataurl({
pixelratio:5 /图片分辨率导出,默认是1
背景颜色:# FFF,背景颜色/图
工具组件忽略excludecomponents:{ / /保存图形时,默认的工具栏被忽略
工具箱
},
类型:'png ' / /图片类型,支持PNG和JPEG
});
var $ = document.createelement(A);
变量类型= 'png;
a.download美元= mychart.getoption(。标题{ 0 }。文本)+类型+'。;
a.target美元= '_blank;
a.href美元=网址;
和火狐浏览器/ Chrome浏览器
如果(typeof MouseEvent = 'function){
VaR EVT =新的MouseEvent(听到咔哒声,{
视图:窗口,
泡泡:真的,
可撤销:假
});
a.dispatchevent美元(EVT);
}
伊江
{其他
var =
+ '
+ '
+;
var标签= window.open();
tab.document.write(HTML);
}
};
这样,我们就不能使用它的下载操作,我们可以在外部自定义按钮和超链接,直接调用上面的方法,并且可以通过外部调用来实现保存图像的功能。
二,OnMouseEnter、、OnMouseLeave太快触发事件来触发机制的一个错误的时间
上面的数字说明了
希望当鼠标移动的曲线,不仅可以突出显示曲线,但也增加了剪刀图标在鼠标的位置,和曲线可以删除当剪压,mouseener和MouseLeave方法直接应用于曲线之前,然后当鼠标移动多曲线的快速,会有很多问题。剪刀不会消失时,光标离开,和多曲线将突出显示。要添加一些逻辑判断和更换mouseover和mouseout的方法是没有用的。然后,突然你的鼠标移动的方法可以使用。判断鼠标是否在剪图的面积,如果曲线突出而不再,所有曲线都恢复到默认的风格,那么它是成功的。一直困扰着整个一天的问题终于得到了解决。(因为MouseMove需要连续监测和触发事件,当鼠标移动,所以最好是有一个状态标志指示要调用的突出曲线,在这种状态下,画出剪刀的TIMING的调用图上,当鼠标进入曲线,全局变量设置为真,和随后的鼠标移动操作是根据变量的确定。
记录一些关键代码
鼠标进入高亮显示并绘制剪刀图。
$(document),(MouseEnter
每次输入之后,都会恢复到原来的状态。
$()。每个(函数(){)
this.setattribute(不透明
});
美元。每个(relation.links,功能(L,链接){
无功in_node_id = link.input.nodeid;
无功out_node_id = link.output.nodeid;
$(+ out_node_id +链接。输出。pointname + in_node_id + link.input.pointname # ){ 0 }。setAttribute(不透明
$(+ out_node_id +链接。输出。pointname + in_node_id + link.input.pointname #)。Attr(班
});
编辑状态需要显示操作图标。
如果(args。状态= =编辑){
del_curve ref_curve =这;
del_curve has_del_curve =真;
如果($(#德尔曲线图标)。长> 0){
$(#德尔曲线图标)。Css({
位置:绝对
上图:e.pagey-obj.offset(十),
左:e.pagex-obj.offset left-10(),
颜色:# FF0000
})显示();
其他{ }
无功del_icon = $()。Css({
位置:绝对
上图:e.pagey-obj.offset(十),
左:e.pagex-obj.offset left-10(),
颜色:# FF0000
字体大小:20px
});
obj.parent append(del_icon)();
}
del_curve。X = $(#德尔曲线图标)。偏移(左);
del_curve轴= $(,#德尔曲线图标)。偏移(顶部);
}
然后高亮当前曲线
如果($(this)。Attr(开始)!美元=定义(这)。Attr(端)!=未定义的){
透明性
$()。每个(函数(){)
this.setattribute(不透明
});
美元。每个(relation.links,功能(L,链接){
无功in_node_id = link.input.nodeid;
无功out_node_id = link.output.nodeid;
$(+ out_node_id +链接。输出。pointname + in_node_id + link.input.pointname # ){ 0 }。setAttribute(不透明
});
obj.children(G)。情商(0)。儿童(G)。情商(0)。在($(this));
$(这)。Attr(班
无功in_node = $(# + $(this)。Attr(开始))。儿童(G)。情商(0)。儿童(圆)。情商(1);
in_node.attr(班
$(# + $(this)。Attr(开始)){ 0 }。setAttribute(不透明
无功out_node = $(# + $(this)。Attr(结束))。儿童(G)。情商(0)。儿童(圆)。情商(1);
out_node.attr(班
$(# + $(this)。Attr(结束)){ 0 }。setAttribute(不透明
}
});
移动鼠标决策触发操作
$(document),(MouseMove
无功del_icon_width = $(#德尔曲线图标)。Width();
无功del_icon_height = $(#德尔曲线图标)(的高度) / /确定当前光标位置,如果还原在图表区域内剪刀默认风格
如果(e.pagex(del_curve。X + del_icon_width)| | e.pagey(del_curve。轴+ del_icon_height)){
del_curve has_del_curve = false;
$()。每个(函数(){)
this.setattribute(不透明
});
美元。每个(relation.links,功能(L,链接){
无功in_node_id = link.input.nodeid;
无功out_node_id = link.output.nodeid;
$(+ out_node_id +链接。输出。pointname + in_node_id + link.input.pointname # ){ 0 }。setAttribute(不透明
$(+ out_node_id +链接。输出。pointname + in_node_id + link.input.pointname #)。Attr(班
});
(del_curve美元。ref_curve)。Attr(班
无功in_node = $(# + $(del_curve。ref_curve)。Attr(开始))。儿童(G)。情商(0)。儿童(圆)。情商(1);
in_node.attr(班
无功out_node = $(# + $(del_curve。ref_curve)。Attr(结束))。儿童(G)。情商(0)。儿童(圆)。情商(1);
out_node.attr(班
$(#德尔曲线图标)藏();
}
}
})
好吧,事实上,工作流的问题,如果只有一个明亮的MouseEnter和MouseLeave曲线,效果是足够的。然而,在这个例子中,你需要通过曲线上的剪刀图标,它会随着MouseEnter和MouseLeave原始曲线的冲突。因为删除曲线的触发元件剪刀图标。