切片拉动可以轻松切换为全部或全部。我正在寻找一种拉出切片的方法,但不允许任何进一步切片。
示例:http://jsfiddle.net/4zg3hmn8/1/
在clickSlice
上添加一个可以防止默认,停止传播或返回false的侦听器不起作用:clickSlice事件在触发这些从属事件之前被触发。
使用clickSlice
听众:http://jsfiddle.net/4zg3hmn8/2/
更多挖掘表明被触发的事件是mouseup
,后者又调用clickSlice
方法来解释从属事件行为。不幸的是,在mouseup
上添加一个监听器对图表没有任何影响。
使用mouseup
听众:http://jsfiddle.net/4zg3hmn8/3/
该事件被添加到私有javascript对象而非DOM元素上,因此我无法找到通过Javascript删除的方法(可以使用Chrome开发工具轻松删除)。
那怎么解决?
答案 0 :(得分:1)
调用AmCharts.makeChart
时,传入的配置对象用于扩展基本的默认图表对象。操作这个,我们可以传入基础对象中使用的addEventListener方法的副本,并有效地覆盖它,删除我们不想要的部分:
...
"startDuration": 0,
"valueField": "litres",
"titleField": "country",
"pulledField": "isPulled",
"balloon": {
"fixedPosition": true
},
"addEventListeners": function(a, b) {
var c = this
a.mouseover(function(a) {
c.rollOverSlice(b, !0, a)
}).mouseout(function(a) {
c.rollOutSlice(b, a)
}).touchend(function(a) {
c.rollOverSlice(b, a)
}).mouseup(function(a) {
alert('ah ah ah... didn\'t say the magic word!')
}).contextmenu(function(a) {
c.handleRightClick(b, a)
})
},
...
使用mouseup
听众:http://jsfiddle.net/4zg3hmn8/4/
答案 1 :(得分:1)
不推荐覆盖未记录的内部方法和事件,因为它可能导致未定义的行为。如果您只想保留默认切片,则可以使用clickSlice
事件再次致电clickSlice
,取消用户的初始点击。您需要设置自定义属性以告知事件忽略手动clickSlice调用,但是:
"listeners": [{
event: 'clickSlice',
method: function(e) {
if (!e.dataItem.ignore) {
e.dataItem.ignore = true; //prevent infinite loop
e.chart.clickSlice(e.dataItem.index); //call clickSlice to cancel out the user's click
e.dataItem.ignore = false; //reset the ignore flag
}
},
}],