Я использую плагин Jquery Mobile pagination и пытаюсь превратить его в мой плагин.
Pagination позволяет перелистывать страницы на мобильных устройствах.
Мой плагин использует разделенный экран, поэтому я перелистываю страницы на одной из панелей, которые я использую.Поэтому мне нужно настроить оригинальный плагин, чтобы:
- изменение страниц панели при нажатии / нажатии клавиши = работает
- изменение страниц панели при пролистывании влево / вправо = не работает
Проблема заключается в том, что при перелистывании страница на самом деле не меняется, поэтому мне нужно имитировать все, что происходит во время обычного jQuery Mobile changePage
.
Все работает нормально, за исключением установки URL-адреса для перелистываемой страницы.
Я могу получить идентификатор страницы, но не могу установить для нее URL-адрес.Я думаю, это полезно, используя dataURL
, но я не могу заставить его работать.
Любая помощь с благодарностью!
Вот соответствующий код из модифицированного плагина:
snapTo = function( newOffset, immediate ){
var $newActive = newOffset === 0 ? $page : newOffset > 0 ? $prevPage : $nextPage,
samePage = !$newActive || $newActive.is( $page ),
newUrl = samePage && $page.jqmData( "url" ) || $newActive.jqmData( "url"),
// so I have the new page and it's url when the page is "swiped in"
// this fires when the swipe is done
doneCB = function(){
if( !samePage){
// checking for panel
if ( $('html').hasClass( "multiview") ) {
// ... stuff
// I need to set the URL here without triggering a transition
} else {
//this is how the plugin does it
$page.removeClass( $.mobile.activePageClass )
//disable hash listening
$.mobile.urlHistory.ignoreNextHashChange = true;
// pagination uses this but it triggers a changePage, which I don't want
$.mobile.path.set( newUrl );
//set "toPage" as activePage
$.mobile.activePage = $newActive;
...
}
}
РЕШЕНИЕ
Не уверен, что кто-то его использует, но в любом случае это решение:
- Вы должны вызвать changePage
- аналогично настройке пагинации ignoreNextHashChange = true , мне нужно установить аналогичный блокировщик внутри моего плагина, чтобы остановить hashChangesот запуска нежелательного перехода.
Код внутри нумерации страниц:
var fakeOptions = {};
fakeOptions.transition="none";
// set a blocker!
$(_pluginTriggerElement_).plugin("option", "$blockPaginationHashChange", true);
// fire a transition
$.mobile.changePage( $newActive, fakeOptions );
Это запустит changePage без перехода.Мой плагин имеет процедуру, похожую на JQM, в которой каждый changePage также запускает последующий hashChange.Как и в случае с параметром JQM $ ignoreNextHashChange, я определяю свою собственную опцию $ blockPaginationhashChange и настраиваю блокировщик внутри подпрограммы Hashchange панели следующим образом:
// block pagination hashChanges
if ( self.options.$blockPaginationHashChange == true ) {
self.options.$blockPaginationHashChange = false;
// stop here
return;
}
Таким образом, обратные переходы hashChange не запускаются, когдастраницы перелистываются.Очень мигающий, но это работает.