Как предотвратить запуск mouseleave после mouseup?

В моем приложении javascript у меня есть проблемы с всплывающими сообщениями о событиях, а именно, я бы не хотел запускать отпускание мыши после наведения мыши вверх на элемент (реализовано поведение перетаскивания, поэтому он перемещается и мышь покидает его).

Как я могу это сделать?

РЕДАКТИРОВАТЬ

я использую d3.js захватить событие следующим образом:

d3.selectAll("circle")
        .on("mouseover", function(d,i){
        ...
        }
        .on("mouseup", function(d,i){
        ...
        }
        .on("mouseleave", function(d,i){
        ...
        }

2 ответа

Решение

Я решил это аналогично совету пользователя user1671639 с логической проверкой:

var been_in_mouseup = false;

.on("mousedown", function(d){
    ...
    been_in_mouseup = false;
})
.on("mouseup", function(d,i){
    ...
    been_in_mouseup = true;
})
.on("mouseleave", function(d, i){
    ...
    if(false == been_in_mouseup )
    {
    ...
    }
})

РЕДАКТИРОВАТЬ

Есть ли более элегантный способ сделать это?

Как насчет логическогоcheck переменная, как это

var preventBubble = true;
d3.selectAll("circle")
        .on("mouseover", function(d,i){
        ...
        }
        .on("mouseup", function(d,i){
        preventBubble = false;
        ....
        }
        .on("mouseleave", function(d,i){

        if(preventBubble) {         
        ...
          }
        }

Вместо того, чтобы использовать mouseover а также mouseleaveЯ бы предпочел использовать .hover()с обратным вызовом

d3.selectAll("circle").on("hover", function(d,i){
    //To Dos
  }, function(d,i) {
    // callback To Dos
});
Другие вопросы по тегам