Nano Hash - криптовалюты, майнинг, программирование

Как зарегистрировать события свайпа на всех страницах приложения JQM?

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

function registerSwipeEvents() {
    //panel swipe from left and right for categories, favs.
    $(document).on("swipeleft swiperight", '[data-role=page]', function (e) {
        // We check if there is no open panel on the page because otherwise
        // a swipe to close the left panel would also open the right panel.
        // We do this by checking the data that the framework stores on the page element (panel: open).
        if ($.mobile.activePage.jqmData("panel") !== "open") {
            if (e.type === "swipeleft") {
                $(".right-panel").panel("open");
            } else if (e.type === "swiperight") {
                $(".left-panel").panel("open");
            }
        }
    });
}

Я пробовал вызывать эту функцию из pageinit (запускает скрипт только один раз), pagebeforeshow и pageshow (всегда запускается) следующим образом:

$('#HomePage').on('pageshow', function () {
    getFavouritesFromClient();

});

Но событие не работает для всех страниц, когда я перехожу с одной страницы на другую во второй раз! Возможно, я неправильно использую события, но лучшее, что работало до сих пор для первого раунда навигации, — это pageshow.

12.06.2013

  • вы используете однофайловые или многофайловые? 12.06.2013
  • @Omar несколько файлов, но идентификатор домашней страницы является основным идентификатором моего мастера «[data-role = page]», и весь поступающий контент вводится в контент. 12.06.2013
  • $(document).on('pageshow', '#HomePage', function () { сделает свое дело. Кроме того, просмотрите этот ответ, он полезен stackoverflow.com/a/15806954/1771795 12.06.2013
  • @ Омар, я пробовал это, даже это не работает! Кроме того, вертикальная прокрутка вверх и вниз вызывает событие смахивания! 12.06.2013
  • У вас есть обе панели на каждой странице? 12.06.2013
  • @ Омар, да, поскольку это основной макет, он отображается для каждой дочерней страницы. 12.06.2013
  • где у вас есть js, внешний файл JS или внутри тела? 12.06.2013
  • @ Омар, у меня есть только один файл сценария, который я вызываю чуть выше конца тега body в моем основном макете, поэтому он работает для всех страниц. 12.06.2013

Ответы:


1

Этот код помог зарегистрировать события свайпа на всех страницах.

Событие pagecreate применяется ко всем страницам (используя [data-role=page]). Внутри этого события мы находим идентификатор этой конкретной страницы $(this).attr('id'). Затем мы регистрируем события swipeleft и swiperight только для этой конкретной страницы, используя "#"+thisPageId.

(Я включил в код несколько строк, которые помогли мне разобраться - для тех, кому интересно это знать)

//var glbl; // this helped me find the attribute - global variable for accessing via the console
$( document ).on( "pagecreate", "[data-role=page]", function() {
    //console.log($(this)); // uncomment this line to see this DIV
    //glbl = $(debug); //uncomment this line to assign this DIV to global variable "glbl", which you can then access via the console
    var thisPageId = $(this).attr('id');
    $( document ).on( "swipeleft swiperight", "#"+thisPageId, function( e ) {
        // We check if there is no open panel on the page because otherwise
        // a swipe to close the left panel would also open the right panel (and v.v.).
        // We do this by checking the data that the framework stores on the page element (panel: open).
        if ( $( ".ui-page-active" ).jqmData( "panel" ) !== "open" ) {
            if ( e.type === "swipeleft" ) {
                $( "#panelRight" ).panel( "open" );
            } else if ( e.type === "swiperight" ) {
                $( "#panelLeft" ).panel( "open" );
            }
        }
        console.log('on swipes');
    });
    console.log('on pagecreate');
});
26.05.2015
  • Пожалуйста, объясните, что это делает, а не просто публикуйте блоки кода. 26.05.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..