J'ai déjà lu de nombreux articles sur ce numéro. Par exemple, utilisez une variable pour enregistrer l'intervalle d'exécution. J'ai l'impression de devoir aller me masturber à chaque fois, ce qui est assez fatigant. J'aime choisir des outils avant de déplacer des briques. En fait, la solution est très simple. Iscroll intercepte en fait les événements TouchStart et Touchend lors du clic sur le navigateur. Lorsque vous touchez, utilisez JS pour déclencher l'événement onClick de l'élément (la fonction_end). En fonctionnement réel, Touchend est d'abord exécuté, puis les fonctions liées à ONClick sont à nouveau exécutées. Cela crée un mal de tête de déclenchement deux fois en un seul clic. Ce n'est pas un problème. La raison pour laquelle c'est un problème est que nous devons examiner le code source d'Iscroll. La façon de résoudre ce problème est de refuser d'exécuter la fonction une deuxième fois. Et ma logique est exactement le cas. Après avoir exécuté le code qui déclenche l'événement Click dans la fonction _end, nous pouvons supprimer la fonction liée sur l'événement OnClick. Ensuite, ajoutez à nouveau cet événement après quelques centaines de millisecondes de temps. Par exemple:
La copie de code est la suivante:
// avant le traitement
<span onclick = "test ()"> double-cliquez pour tester </span>
// après traitement
<span onclick = "void (0)"> double-cliquez pour tester </span>
Après avoir supprimé la fonction liée à ONClick, cette deuxième fois ne déclenchera naturellement plus la fonction de test. Afin de continuer à l'utiliser la prochaine fois, nous pouvons utiliser Settimeout pour restaurer le contenu d'Onclick Back.
Le code source ISCroll modifié (environ 550 lignes à 570 lignes, dans la fonction _end):
La copie de code est la suivante:
that.doubleTaptimer = setTimeout (function () {
that.doubleTaptimer = null;
// trouve le dernier élément touché
Target = Point.target;
while (cible.NodeType! = 1) Target = Target.ParentNode;
if (target.tagname! = 'select' && target.tagname! = 'input' && target.tagname! = 'textarea') {
ev = doc.createevent ('MouseEvents');
ev.initmouseevent ('click', 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);
/ ** Le code suivant est un nouveau code ** /
// Trouvez l'élément qui lie l'événement de clic.
var obj = $ (cible) .attr ("onClick")! = null? $ (cible): $ (cible) .parents ("[onclick]") [0];
if (obj! = null) {
var clickContent = $ (obj) .attr ("onClick");
if (clickContent! = "void (0)") {
// Utilisez de nouveaux attributs pour stocker la fonction de clic d'origine
$ (obj) .attr ("Data-ClickBak", $ (obj) .attr ("onclick"));
// modifie la valeur de l'attribut onClick.
$ (obj) .attr ("onclick", "void (0)");
// empêcher les clics violents
if (that.hashbox.length> 0) {
for (var _i = 0; _i <that.hashbox.length; _i ++)
{
if (that.hashbox [_i] == $ (obj)) {
that.hashbox.splice (_i, 1);
casser;
}
}
}
that.hashbox.push ($ (obj));
that._clickback ();
}
}//fin
}
}, that.options.zoom? 250: 0);
Fonction _clickback et cabinet de code de hashbox (ajouté avant la fonction _end)
La copie de code est la suivante:
hashbox: [],
/ * Restaurez l'événement de l'objet cliqué * /
_clickback: function () {
var that = this;
setTimeout (function () {
if (that.hashbox.length> 0) {
var obj = that.hashbox.pop ();
obj.attr ("onclick", obj.attr ("data-clickbak"));
if (that.hashbox.length> 0) that._clickback ();
}
}, 500);
}
Bien sûr, il peut également être implémenté via une fonction publique sans modifier le code source ISCroll.
Ce qui précède concerne cet article. J'espère qu'il sera utile pour tout le monde d'apprendre à utiliser le contrôle de glissement Iscroll.