2012-02-28 2 views
2

у меня есть что-то похожее на этот iScroll например: http://cubiq.org/dropbox/iscroll4/examples/simple/iScroll scrollToElement не работает с JQuery Mobile

Кроме того, что я использую JQuery мобильный (то есть заголовок, колонтитул и содержание устанавливаются с помощью JQuery Mobile). Все работает плавно, за исключением scrollToElement.

Есть ли способ заставить scrollToElement работать при использовании jQuery Mobile и iScroll?

Вот сценарий iScroll я в настоящее время:

var myScroll; 
function loaded() { 
    myScroll = new iScroll('wrapper'); 
} 
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); 
document.addEventListener('DOMContentLoaded', function() { setTimeout(loaded, 200);}, false); 

EDIT: Забыл упомянуть, что я пытаюсь добиться. В приведенном выше примере iScroll я пытаюсь перейти к определенной строке. Единственная проблема заключается в том, что jQuery Mobile препятствует работе scrollToElement по какой-то причине.

ответ

0

Обходной я нашел, чтобы захватить позиции элементов, а затем использовать scrollToPage():

var w = $("#showselectedauthors").offset().top; 
// ... 
$.storeScroller.scrollToPage(0, w); 

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

В моем случае элемент виден, и я фиксирую w в то время. Затем я обновляю содержимое и обновляю скроллер. После этого я хочу убедиться, что элемент все еще виден.

0

Кроме того, убедитесь, что вы используете тайм-аут

  setTimeout(function() { 
      myScroll.scrollToElement(".elementClass", "0s"); 
      myScroll.refresh(); 
     }, 0); 
0

Дело кто нуждается, чтобы перейти к JQuery объекта, вот мой код. Убедитесь, что вы вызываете этот метод внутри setTimeout, и определяется ваш объект iscroll.

function scrollToElement($element) { 
    if ($element.size() > 1) { 
     throw new Error("Cannot be a node!"); 
    }; 
    var offset = $element.offset().top; 
    var to = -(offset - iscroll.y); 
    to = (iscroll.maxScrollY > to) ? iscroll.maxScrollY : to; 
    iscroll.scrollTo(0, to); 
}