Jquery, das Mausrad-Ereignis loslassen und es dann neu binden, nachdem die Aktionen abgeschlossen sind?

8

Ich habe seit einiger Zeit damit zu kämpfen. Ich benutze diesen Code, um das Mausrad zu überwachen, so dass es mit einem Slider, den ich habe, zum Scrollen verwendet werden kann. Es hat jedoch ein Problem, wo die Aktionen stell dich so auf, wenn du schnell mit dem Mausrad scrollst (wie es normalerweise jemand tun würde), bauen sie auf und es verursacht fehlerhaftes Verhalten. Ich weiß, wie man dieses Problem mit Animationen löst, aber nicht mit einem Mausrad-Monitor ..

Ich möchte etwas tun, wie das Mausrad am Anfang der Aktion loslassen (in diesem Fall scrollen Sie nach dem Bewegen des Mausrads die Bildlaufleiste) und binden es anschließend erneut ein. Wenn der Benutzer also zu viele Scrolls durchführt, ignoriert er es einfach bis die anfängliche Schriftrolle fertig ist .. Ich habe den Code unten versucht, aber es ist nicht wieder bindend, also bin ich mir nicht sicher, was ich falsch mache, jeder Rat wird geschätzt.

%Vor%     
Rick 26.07.2010, 19:40
quelle

2 Antworten

6

Sie müssen die Funktion speichern, auf die Sie sich beziehen können, wie folgt:

%Vor%

Indem Sie dies tun, können Sie später .bind() später auf dieselbe Funktion zugreifen (Sie können nicht auf einen anonymen verweisen) . Sie versuchen derzeit, .bind() ohne eine Funktion aufzurufen, die mit allem umgehen kann. t arbeiten. Dies hat auch den zusätzlichen Vorteil, dass Sie dieselbe Funktionsreferenz an .unbind() übergeben können, so dass only Dieser Handler, nicht any mousewheel handler.

Alternativ können Sie ohne un / erneut binden, wie folgt:

%Vor%

Dies verwendet nur $.data() , um einen Dateneintrag "wir arbeiten" mit dem Element if zu speichern alles trifft diesen Handler, solange es wahr ist, es kehrt nur zurück und ignoriert das Ereignis.

    
Nick Craver 26.07.2010, 19:45
quelle
5

In dieser Situation ist das eine unnötige Bindung / Entbindung, die schwieriger und ineffizienter ist als sie sein muss. Die Freigabe ist großartig, um Ressourcen freizusetzen, wenn eine Aktion nicht mehr benötigt wird oder für eine Weile nicht mehr benötigt wird; Aber für den Bruchteil einer Sekunde, wenn Sie nicht möchten, dass Ihr Code zum Auflösen / Wiederverbinden ausgeführt wird, ist viel Aufwand erforderlich. Verwenden Sie einfach eine Variable, um festzustellen, ob das Mausrad berücksichtigt werden soll. Wahrscheinlich brauchen Sie auch keine jquery-Daten zu verwenden, nur eine schnellere Variable, die außerhalb der Funktion definiert ist.

%Vor%

Obwohl die Logik, den Scroller nur während der paar Zeilen über den Prozessen zu deaktivieren, ehrlich gesagt ein bisschen fehlerhaft ist, muss man ein Programmierer gewesen sein, der viel mit Multithreading-Sprachen zu tun hat :) In js ist es nicht einmal möglich, dass ein anderes Ereignis in der In der Mitte der Codezeilen einer Funktion, also nehme ich an, dass Sie sie lieber für eine bestimmte Zeit ausschalten (und das gilt auch, wenn Sie eine Variable verwenden oder binden / lösen):

%Vor%     
Jimbo Jonny 19.04.2012 20:59
quelle

Tags und Links