Изменить переход jQuery Mobile при использовании триггера («клик») - PullRequest
3 голосов
/ 15 марта 2012

Мне нужно навигационное меню, которое отображает изменения страницы в зависимости от кликов и пролистываний.Чтобы выполнить это, я должен был вызвать щелчок, когда я провожу пальцем.Проблема в том, что, когда я делаю это, я больше не могу использовать:

$.mobile.changePage(prevpage, { transition : 'realslide', reverse : true });

со свойством reverse:true, являющимся важной частью.«swipeleft» может иметь обычный переход, но «swiperight» нуждается в обратном переходе, и я не могу сделать это в HTML с data-transition="reverse", потому что это зависит от направления пролистывания.

В настоящее время это мой кодвыглядит (предоставлено пользователем Jasper ).Я не уверен, где я могу связать в обратном переходе в.

$(function(){
    var $nav   = $('#nav').children().children(),
        totNav = $nav.length;

    $(document).on('swipeleft', '.ui-page', function() {

        var next = ($nav.filter('.active').index() + 1);

        if (next === totNav)
            return;

        $nav.eq(next).children().trigger('click');

    }).on('swiperight', '.ui-page', function() {

        var prev = ($nav.filter('.active').index() - 1);

        if (prev === -1)
            return;

        $nav.eq(prev).children().trigger('click');

    }).on('click', '#nav a', function(e) {
        $(this).parent().addClass("active").siblings().removeClass("active");
    });
});

Этот вопрос является расширением этого: Обновление меню в jQuery Mobile на основе события свайпа

РЕДАКТИРОВАТЬ: Спасибо всем за вашу помощь!Вот мое окончательное решение:

    <script>
    $(function(){

        var $nav    = $('#nav').children().children(),
            totNav  = $nav.length;

        $(document).on('swipeleft', '.ui-page', function() {

            var next = ($nav.filter('.active').index() + 1);
            var $elem = $nav.eq(next).children();

            if (next === totNav)
                return;

            $.mobile.changePage.defaults.reverse = false;

            $elem.trigger('click');

        }).on('swiperight', '.ui-page', function() {

            var prev = ($nav.filter('.active').index() - 1);
            var $elem = $nav.eq(prev).children();

            if (prev === -1)
                return;

            $.mobile.changePage.defaults.reverse = true;

            $elem.trigger('click');

        }).on('click', '#nav a', function(e) {

            var prev = $nav.filter('.active').index();

            $(this).parent().addClass("active").siblings().removeClass("active");

            var now = $nav.filter('.active').index();

            if (prev > now)
                $.mobile.changePage.defaults.reverse = true;
            else
                $.mobile.changePage.defaults.reverse = false;

        });

    });
    </script>

1 Ответ

4 голосов
/ 15 марта 2012

Окей, это решение может быть немного хакерским, но оно работает.

Перед тем, как вызвать событие, вы можете установить обратный переход страницы по умолчанию, затем после триггера установите значение по умолчанию. Я не пробовал это, но я думаю, что это может быть достигнуто так:

$(function(){
    var $nav   = $('#nav').children().children(),
        totNav = $nav.length;

    $(document).on('swipeleft', '.ui-page', function() {

        var next = ($nav.filter('.active').index() + 1);
    $.mobile.changePage.defaults.reverse = true; // Reverse transition
        $nav.eq(next).children().trigger('click');
    $.mobile.changePage.defaults.reverse = false; // Dont reverse


    }).on('swiperight', '.ui-page', function() {

        var prev = ($nav.filter('.active').index() - 1);
        $nav.eq(prev).children().trigger('click');

    }).on('click', '#nav a', function(e) {
        $(this).parent().addClass("active").siblings().removeClass("active");
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...