Как правильно переопределить поведение обработчика событий по умолчанию (например, переключение видимости трассировки при нажатии)? - PullRequest
0 голосов
/ 25 июня 2018

Я бы хотел иметь возможность отказаться от поведения по умолчанию plotly_legendclick (как и для других событий).Кажется, я не могу найти это в документах, но кажется, что возвращение значения falsey из обработчика событий заговора делает то, что я хочу (см. codepen ).Это правильный путь?Нет preventDefault или stopPropagation?

Пояснение: В идеале, я хотел бы получить авторитетный ответ, который цитирует документацию или исходит от соавтора Plotly.js (а не гипотезы, основанной натекущее поведение исходного кода).

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Участник команды Plotly Алекс Джонсон отвечает на вопрос здесь .

Начиная с версии 1.37 (и в частности https://github.com/plotly/plotly.js/pull/2581)), вы можете отключить скрытие трасс путем нажатия легенды, используя событие plotly_legendclick: gd.on('plotly_legendclick',function() { return false; })

0 голосов
/ 26 июня 2018

Давайте посмотрим на действительный код.Ниже приведен фрагмент, он расположен в строке 108238 из файла сценария plotly.js .

var clickVal = Events.triggerHandler(gd, 'plotly_legendclick', evtData);
if(clickVal === false) return;

if(numClicks === 1) {
    legend._clickTimeout = setTimeout(function() {
        handleClick(legendItem, gd, numClicks);
    }, DBLCLICKDELAY);
}
else if(numClicks === 2) {
    if(legend._clickTimeout) clearTimeout(legend._clickTimeout);
    gd._legendMouseDownTime = 0;

    var dblClickVal = Events.triggerHandler(gd, 'plotly_legenddoubleclick', evtData);
    if(dblClickVal !== false) handleClick(legendItem, gd, numClicks);
}

Здесь мы видим, что они определили событие plotly_legendclick ивозвращаемое значение сохраняется в переменной (clickVal).

Итак, следующая следующая строка:.

if(clickVal === false) return;

if(numClicks === 1) {
    legend._clickTimeout = setTimeout(function() {
        handleClick(legendItem, gd, numClicks);
    }, DBLCLICKDELAY);
}

Таким образом, мы можем видеть, что нет необходимости в preventDefault или stopPropagation, поскольку мы никогда не вводим код, который обрабатывает событие (handleClick), когда значение, возвращаемое при нажатии, равно false !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...