Я читал много статей об этом выпуске раньше. Например, используйте переменную для записи интервала выполнения. Я чувствую, что мне нужно идти и мастурбировать каждый раз, что довольно утомительно. Я люблю выбирать инструменты перед перемещением кирпичей. На самом деле решение очень простое. Iscroll на самом деле перехватывает события TouchStart и Touchend при нажатии на браузер. При Touchend используйте JS, чтобы запустить событие OnClick элемента (function_end). В фактической работе Touchend сначала выполняется, а затем функции, связанные с Onclick, снова выполняются. Это создает головную боль от запуска дважды в один щелчок. Это не проблема. Причина, по которой это проблема, заключается в том, что мы должны посмотреть на исходный код ISCROLL. Способ решить эту проблему состоит в том, чтобы отказаться выполнить функцию во второй раз. И моя логика - это именно так. После выполнения кода, который запускает событие Click в функции _END, мы можем удалить функцию, связанную с событием OnClick. Затем добавьте это событие снова через несколько сотен миллисекунд времени. Например:
Кода -копия выглядит следующим образом:
// перед обработкой
<span onclick = "test ()"> дважды щелкните, чтобы тестировать </span>
// после обработки
<span onclick = "void (0)"> дважды щелкните, чтобы проверить </span>
После удаления функции, связанной с Onclick, этот второй раз, естественно, не запустит функцию тестирования. Чтобы продолжить использование его в следующий раз, мы можем использовать SetTimeout для восстановления содержания OnClick обратно.
Модифицированный исходный код ISCROLL (около 550 строк до 570 строк, в функции _END):
Кода -копия выглядит следующим образом:
это.doubletaptimer = settimeout (function () {
что. Doubletaptimer = null;
// Найти последний троганный элемент
target = point.target;
while (target.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);
/** Следующий код - новый код **/
// Найти элемент, который связывает событие Click.
var obj = $ (target) .attr ("onclick")! = null? $ (target): $ (target) .parents ("[onclick]") [0];
if (obj! = null) {
var clickcontent = $ (obj) .attr ("onclick");
if (clickContent! = "void (0)") {
// Использование новых атрибутов для хранения исходной функции клика
$ (obj) .attr ("data-clickbak", $ (obj) .attr ("onclick"));
// Измените значение атрибута OnClick.
$ (obj) .attr ("onclick", "void (0)");
// предотвратить насильственные клики
if (that.hashbox.length> 0) {
for (var _i = 0; _i <that.hashbox.length; _i ++)
{
if (that.hashbox [_i] == $ (obj)) {
that.hashbox.splice (_i, 1);
перерыв;
}
}
}
что.hashbox.push ($ (obj));
that._clickback ();
}
}//конец
}
}, что.options.zoom? 250: 0);
_clickback Функция и фрагмент кода хешбока (добавлено перед функцией _end)
Кода -копия выглядит следующим образом:
Hashbox: [],
/*Восстановите событие объекта Clicked*/
_clickback: function () {
var that = это;
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);
}
Конечно, он также может быть реализован с помощью публичной функции без изменения исходного кода IScroll.
Выше всего об этой статье. Я надеюсь, что для всех будет полезно научиться использовать управление скольжением Iscroll.