Как предотвратить запуск 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
});