Ich habe schon viele Artikel zu dieser Ausgabe gelesen. Verwenden Sie beispielsweise eine Variable, um das Ausführungsintervall aufzuzeichnen. Ich habe das Gefühl, jedes Mal zu masturbieren, was ziemlich anstrengend ist. Ich wähle gerne Werkzeuge aus, bevor ich Ziegel bewege. Tatsächlich ist die Lösung sehr einfach. IsCroll fällt beim Klicken auf den Browser tatsächlich TouchStart und Touchend -Ereignisse ab. Verwenden Sie beim Touchend JS, um das Onclick -Ereignis des Elements (The Function_end) auszulösen. Im tatsächlichen Betrieb wird erstmals Touchend ausgeführt, und dann werden die auf Onclick -bezogenen Funktionen erneut ausgeführt. Dadurch werden Kopfschmerzen in einem Klick zweimal ausgelöst. Dies ist kein Problem. Der Grund, warum dies ein Problem ist, ist, dass wir uns den Quellcode von Iscroll ansehen müssen. Der Weg zur Lösung dieses Problems besteht darin, sich ein zweites Mal zu weigern, die Funktion auszuführen. Und meine Logik ist genau der Fall. Nachdem wir den Code ausgeführt haben, der das Klickereignis in der Funktion _end auslöst, können wir die auf dem Onclick -Ereignis gebundene Funktion entfernen. Fügen Sie dieses Ereignis dann nach ein paar hundert Millisekunden noch einmal hinzu. Zum Beispiel:
Die Codekopie lautet wie folgt:
// vor der Verarbeitung
<span onclick = "test ()"> Doppelklicken Sie auf Testen </span>
// nach der Verarbeitung
<span onclick = "void (0)"> Doppelklicken Sie auf Testen </span>
Nach dem Entfernen der auf Onclick -bezogenen Funktion löst dieses zweite Mal die Testfunktion natürlich nicht erneut aus. Um es beim nächsten Mal fortzusetzen, können wir SetTimeout verwenden, um den Inhalt von Onclick zurück zu wiederherstellen.
Der geänderte ISCROLL -Quellcode (ca. 550 Zeilen bis 570 Zeilen in der Funktion _end):
Die Codekopie lautet wie folgt:
that.doubletaptimer = setTimeout (function () {
that.doubletaptimer = null;
// finde das zuletzt berührte Element
target = point.target;
while (target.nodetype! = 1) target = target.parentnode;
if (target.tagname! = 'select' && target.tagname! = 'input' && target
ev = doc.createEvent ('Mouseevents');
ev.initmouseEvent ('klick', true, true, e.view, 1,
point.screenx, point.screeny, point.clientx, point.clienty,
E. Ctrlkey, E.Altkey, E. Shiftkey, E.Metakey,
0, null);
ev._fake = true;
target.dispatchEvent (ev);
/** Der folgende Code ist neuer Code **/
// Ermitteln Sie das Element, das das Klickereignis bindet.
var obj = $ (Ziel) .attr ("Onclick")! = NULL? $ (Ziel): $ (Ziel) .PARENTEN ("[Onclick]") [0];
if (obj! = null) {
var clickContent = $ (OBJ) .ATTR ("Onclick");
if (clickContent! = "void (0)") {
// Verwenden Sie neue Attribute, um die ursprüngliche Klickfunktion zu speichern
$ (OBJ) .ATTR ("Datenklickbak", $ (OBJ) .Attr ("Onclick"));
// Ändern Sie den Wert des Onclick -Attributs.
$ (OBJ) .ATTR ("Onclick", "void (0)");
// Gewaltklicks verhindern
if (that.hashbox.length> 0) {
für (var _i = 0; _i <that.hashbox.length; _i ++)
{
if (that.hashbox [_i] == $ (obj)) {
that.hashbox.splice (_i, 1);
brechen;
}
}
}
that.hashbox.push ($ (OBJ));
that._clickback ();
}
}//Ende
}
}, that.options.zoom? 250: 0);
_clickback -Funktion und Hashbox -Code -Snippet (vor der _end -Funktion hinzugefügt)
Die Codekopie lautet wie folgt:
Hashbox: [],
/*Wiederherstellen Sie das Ereignis des angeklickten Objekts*/
_clickback: function () {
var das = dies;
setTimeout (function () {
if (that.hashbox.length> 0) {
var obj = that.hashbox.pop ();
obj.attr ("Onclick", obj.attr ("Datenklickbak");
if (that.hashbox.length> 0) that._clickback ();
}
}, 500);
}
Natürlich kann es auch durch eine öffentliche Funktion implementiert werden, ohne den ISCROLL -Quellcode zu ändern.
Das obige dreht sich alles um diesen Artikel. Ich hoffe, dass es für alle hilfreich sein wird, zu lernen, die Iscroll -Schiebeteuerung zu verwenden.