检测macbook中滚动事件的开始

时间:2013-06-04 12:23:26

标签: jquery html5 web-applications ios6 scroll

我有一个名为'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。

编辑2:我意识到我不太清楚。 (在所有!我忘了添加这个): 当我开始向下滚动div以查看底部附加的内容,而不是正常向下滚动时,div会向右上方拍摄,然后继续从那里向下滚动。这很奇怪:S

1 个答案:

答案 0 :(得分:0)

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

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

可能会有所帮助

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

$(document).ready(function(){

    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');
        }
    });


});