2013-12-05 3 views
0

Я создаю мобильное веб-приложение с jQuery Mobile и хотел бы скрыть панель поиска над видимой областью. Таким образом, пользователю нужно будет тянуть страницу вниз, чтобы увидеть панель поиска. Я думаю, что лучший способ сделать это - определить панель поиска, как обычно, а затем на загрузку страницы вручную установить положение прокрутки, скажем, 55 пикселей. Вот мой код:scrollTo получает переопределение при использовании jQuery Mobile

$(document).ready(function() { 
    $("html,body").scrollTop(55); 
} 

Проблема заключается в том, что я могу видеть на обновления страницы он скрыт от глаз, но как только он будет полностью загружен немедленно подскакивает назад к вершине. jQuery Mobile является виновником, поскольку это не происходит с этим простым JS Fiddle.

Как остановить JQM от переопределения моего набора scrollTop, или мне нужно реализовать его по-другому?

ответ

2

jQuery Mobile имеет специальную функцию прокрутки $.mobile.silentScroll(). Он прокручивается без анимации, но в то же время он не вызывает событие scroll.

Вам также нужно подождать, пока страница полностью загрузится в DOM перед вызовом этой функции. Вы можете привязать его к pagebeforeshow или pageshow.

$(document).on("pagebeforeshow", "#page", function() { 
    setTimeout(function() { 
     $.mobile.silentScroll(100); 
    }, 10); 
}); 

Demo

+0

Это работает, спасибо. Однако это не идеально. Это не работает в мобильном Safari. Однако он работает на рабочем столе Safari. Даже при использовании 'pagebeforeshow' он показывает строку поиска в течение короткого момента, а затем этот код запускается, и страница перескакивает вниз, и полоса прокрутки видима. Как я могу закодировать его так, чтобы он не был заметным, поэтому он находится в этом месте прокрутки, а затем открывается страница? – Joey

+0

@Omar Но предположим, что я внизу страницы и обновляю страницу. После обновления в соответствии со сценарием, который вы написали, он загрузит страницу с 100px, поэтому вы можете предложить, как сделать ее динамичной. – Vikram

+1

@ Vikram, если вы _force refresh_ (f5), то вам нужно проверить, является ли текущая страница страницей _home_, а в истории jQM нет страницы. Просто, '$ .mobile.navigate.history.stack.length> 1', если true, прокрутите, в противном случае, dont. – Omar

Смежные вопросы