Вырезание фрагментов можно легко переключить, как все или ни одного. Я ищу способ вырезать кусочек, но не разрешаю дальнейший кусочек.
Пример: http://jsfiddle.net/4zg3hmn8/1/
Добавление слушателя в clickSlice
которое предотвращает по умолчанию, останавливает распространение или возвращает false, не работает: событие clickSlice запускается до запуска этих подчиненных событий.
С clickSlice
прослушивателя clickSlice
: http://jsfiddle.net/4zg3hmn8/2/
Больше копания показывает, что инициируемое событие - это mouseup
который, в свою очередь, вызывает метод clickSlice
объясняющий поведение подчиненного события. К сожалению, добавление слушателя в mouseup
вообще не повлияло на диаграмму.
С прослушивателем mouseup
: http://jsfiddle.net/4zg3hmn8/3/
Событие добавляется в частный javascript-объект, а не в элемент DOM, поэтому мне не удалось выяснить способ удаления с помощью Javascript (он легко удаляется с помощью инструментов Chrome dev).
Итак, как решить?
Переопределение недокументированных внутренних методов и событий не рекомендуется, так как это может привести к неопределенному поведению. Если вы хотите сохранить только кусочек по умолчанию вытащил, вы можете использовать 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 click
e.dataItem.ignore = false; //reset the ignore flag
}
},
}],
Обновленная скрипка: http://jsfiddle.net/4zg3hmn8/5/
Когда 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/
addEventListeners
меняются, чтобы ожидать, что во внутреннем методе addEventListeners
произойдет что-то еще, что ваш обходной путь не addEventListeners
. Посмотрите мой пример для более безопасного способа выполнить вашу задачу.