如何拉出切片但禁用进一步拉出的切片更改

问题描述 投票:1回答:2

切片拉动可以轻松切换为全部或全部。我正在寻找一种拉出切片的方法,但不允许进一步拉片。

示例: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开发工具轻松删除)。

那怎么解决?

javascript amcharts
2个回答
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
投票

建议不要覆盖未记录的内部方法和事件,因为它可能导致未定义的行为。如果您只想保留默认切片,则可以使用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
      }
    },
  }],

更新小提琴:http://jsfiddle.net/4zg3hmn8/5/

© www.soinside.com 2019 - 2024. All rights reserved.