2

我有一个名为“divEventScroll”的可滚动 div。当使用 javascript/jquery 将数据附加到此 div 中时,预计滚动条将保持在同一位置,即 scrollTop() 保持不变。

这在具有 iOS 5 及更低版本的 iOS 设备中完美运行。但是,在 iOS6+ 中,一旦检测到滚动,div 就会向右滚动到 div 的开头。

我已经在带有 ios 6.0.1 的 iPad3 中解决了这个问题(不是以一种非常好的方式)。

但是,它似乎在 macbook 中不起作用,因为它仅在触发滚动惯性事件后才检测到滚动。

这是我用于 iPad 的代码:(有效)

$('body').on('touchmove',function(e){
     if(navigator.userAgent.match(/(iPad|Version\/6.0)/gi)){
       if($('#divEventScroll').has($(e.target)).length && fromNextEvents){
          if($('#divEventScroll').scrollTop()<scrollPos){
                   fromNextEvents=false;  
                       $('#divEventScroll').scrollTop(scrollPos);                
          }
        }
     }
});

我用于 Macbook Pro 的代码:(当我期望它时不会被触发)

$('body').scroll(function(){
     if(navigator.userAgent.match(/(Macintosh&Version\/6.0)/gi)){
         if(fromNextEvents){
             if($('#divEventScroll').scrollTop()<scrollPos){
                 fromNextEvents=false;   
                 $('#divEventScroll').scrollTop(scrollPos);     
             }   
          }
      }
});

非常感谢您对此的帮助。

编辑:在我希望此代码工作的情况下,fromNextEvents 将设置为 true。

EDIT2:我意识到我不太清楚。(完全!我忘了添加这个):当我开始向下滚动 div 以查看附加在底部的内容时,而不是正常向下滚动,div 直接向上滚动到顶部,然后从那里继续向下滚动. 这很奇怪:S

4

1 回答 1

0

使用 $(window).scroll 而不是 $('body').scroll

http://flesler.com/jquery/scrollTo/

可能会有所帮助

示例代码。虽然与您的要求无关,但希望它可以帮助:

$(文档).ready(函数 () {

    var sidebar = $('#sidebar_content');
    var top = sidebar.offset().top - parseFloat(sidebar.css('marginTop'));

    $(window).scroll(function (event) {
        var ypos = $(this).scrollTop();
        if (ypos >= top) {
            sidebar.addClass('fixed');
        }
        else {
            sidebar.removeClass('fixed');
        }
    });


});
于 2013-06-04T12:28:26.340 回答