2013-03-22 22 views
6

Mam aplikacji wykresu, w którym używam backbone.js dołączyć oddzielne ładowarki dla mouseUp i DoubleClick wydarzeń ponad różnej „obszar” wykresu obrazu.MouseUp i DoubleClick przyłączone do funkcji obsługi zdarzeń indywidualne użyciu backbone.js

wymagam mouseUp wykryć, czy użytkownik kliknął lewy przycisk lub w prawo na „strefy” części wykresu zależności od obrazu i że mam skierowanie mojego przepływ. Wymagam również dwukrotnego kliknięcia, aby powiększyć lub zminimalizować mój panel zawierający obraz mapy.

Oto problem .. Ponieważ każdy podwójnie niejawnie wywołuje mouseUp, jestem coraz moje maksymalizacji/minimalizacji funkcjonalność ingerować w lewo/prawo funkcji kliknięcie przycisku.

Próbowałem za pomocą różnych technik, takich jak limit czasu, aby sprawdzić, czy pojedynczy mysz w górę następuje DoubleClick (jak zasugerowano w wątku:. Need to cancel click/mouseup events when double-click event detected

to nie działa dla mnie Mam także inne obiekty w widoku zawierającym wykres na tej samej stronie, więc dołączam unikalny identyfikator do każdej procedury obsługi zdarzeń, aby je rozróżnić Próbowałem również prostej metody resetowania zestawu flag, aby wykryć podwójne kliknięcie i zapobiec mouseup, jeśli wystąpiło podwójne kliknięcie, ale ponieważ w hierarchii zdarzeń mouseup występuje przed dwukrotnym kliknięciem, że zawiodły też.

w sumie, proszę o pomoc! z góry dzięki

Odpowiedz

3

Po poradę podaną w the answer you linked, po prostu trzeba ZWLOKA wywołania zwrotnego dla mouseUp i sprawdzić, czy drugie kliknięcie występuje w danym okresie.

Zakładając widok zdefiniowany w ten sposób (http://jsfiddle.net/nikoshr/4KSZx/)

var V = Backbone.View.extend({ 
    events: { 
     'mouseup button': 'onmouseup', 
     'dblclick button': 'ondblclick' 
    }, 

    onmouseup: function() { 
     console.log('mouseup'); 
    },  
    ondblclick: function() { 
     console.log('dblclick'); 
    } 
}); 

można go modyfikować i "anuluj" zdarzenie mouseUp:

var V = Backbone.View.extend({ 
    events: { 
     'mouseup button': _.debounce(function(e) { 
      if (this.doucleckicked) { 
       this.doucleckicked = false; 
      } else { 
       this.onmouseup.call(this, e); 
      } 
     }, 300), 
     'dblclick button': function(e) { 
      this.doucleckicked = true; 
      this.ondblclick.call(this, e); 
     } 
    }, 

    onmouseup: function() { 
     console.log('mouseup'); 
    },  
    ondblclick: function() { 
     console.log('dblclick'); 
    } 
}); 

a demo http://jsfiddle.net/4KSZx/6/

+0

Dzięki za tonę! Spróbuję od razu :) – Vidhi

+1

Przepraszam za opóźnienie w przekazywaniu tego, ale rozwiązanie działało cuda! Wielkie dzięki jeszcze raz! sława! :) – Vidhi

0

ja nie wiem, czy zrozumiał, co pan powiedział, ale ... Spróbuj:

$(document).click(function(event) { 
    // Page variables of the mouse event 
    var pageX = event.pageX; 
    var pageY = event.pageY; 
    var someFunctions = function() { 
     /* 
     if(pageX == 300 && pageY == 120) { 
      event.preventDefault(); 
      // do functions 
     } 
     */ 
    }; 

    // start the functions 
    someFunctions(); 
}); 

$(document).dblclick(function() { 
    // functions here to dblclick  
}); 

Przepraszam, jeśli nie było, ale próbowałem.

+0

faktycznie próbowałem to samo za pomocą kliknięcia i dblclick jquery. Nie o to mi chodziło. Ale doceń ten wysiłek. Wielkie dzięki. Niedługo dopracuję pytanie. – Vidhi