Как НЕ щелкать мышью по href при перетаскивании в iScroll

У меня включен iScroll на моей странице.

Обратите внимание, что изображения в скроллере являются ссылками (так что откроется всплывающее окно для большего изображения, вы знаете, сделка). НО одна из приятных особенностей iScroll заключается в том, что вы можете перетаскивать мышь для прокрутки. НО теперь, когда кто-то перетаскивает его, он автоматически открывает изображение вместо прокрутки полосы. Есть ли обходной путь?

4 ответа

Решение

Я бы сказал, добавить класс к каждому якору во время перетаскивания скроллера. Например, добавьте имя класса "перетаскивания" к каждой привязке при перетаскивании, затем удалите класс, когда перетаскивание останавливается.

Это означает, что вы можете добавить warnDefault к любой ссылке, которая имеет класс "перетаскивания". Что-то вроде:

    myScroll1 = new iScroll('scroll1', {
        snap: 'li',
        momentum: false,
        hScrollbar: false,
        onScrollStart: function () {
            $('div#iscroll1 a').addClass("dragging");
        },
        onScrollEnd: function () {
            $('div#iscroll1 a').removeClass("dragging");
            document.querySelector('.indicator > li.active').className = '';
            document.querySelector('.indicator > li:nth-child(' + (this.currPageX+1) + ')').className = 'active';
        }
    });
    $('.dragging').click(function (e) {
        e.preventDefault();
    }

Это, однако, непроверенный код, поэтому вам может потребоваться усовершенствовать селекторы.

Я создал патч для iScroll, который исправляет эту проблему. Вы можете увидеть разницу здесь: https://github.com/zmathew/iscroll/commit/3d77681a9f4b3a6b5a7579df4443bc53356d5584

В качестве альтернативы вы можете получить полную исправленную версию iScroll отсюда: https://github.com/zmathew/iscroll/tree/prevent-scroll-clicks

Решение не работает для меня, вот мое простое решение. При перетаскивании установите перетаскивание на true, если нет - на false. Если щелкнуть при перетаскивании, игнорируйте его.

 var myScroll = new iScroll("scroll1", { onBeforeScrollMove: function () {
            window.dragging = true;
        },
            onScrollEnd: function () {
                //had to use a timeout here because without it it would fire on links at the end of the drag / dragging slowly
                setTimeout(function () { 
                    window.dragging = false;
                }, 10);
            }

        });

и на якорях проверяют на предмет перетаскивания

    $(".myanchors a").click(function () { 
        if (window.dragging) {
            return false;
        }
    });

Здравствуйте, здесь модифицированная версия iScroll 4.2.5 для загрузки

iScroll 4.2.5 + исправление щелчка

onBeforeScrollStart: function (e) {if(!hasTouch) e.preventDefault();},
Другие вопросы по тегам