1

我有一个跨浏览器和跨平台的 webapp。在 iPhone 上,我设法使用 $(document).scrollTop(0); 隐藏地址栏;

下面是执行我想做的代码片段。

$(window).ready(function(){
$(window).scroll(function(){ /*detect scroll event*/
    setTimeout("ScrollWindowToTop();",0);
}); 
});
function ScrollWindowToTop(){
bodyelem=$("html,body"); /*i have tried this out with document,window, html, body*/
$(bodyelem).scrollTop(50);
}

我需要它在以下情况下工作:1.当用户物理滚动页面时2.当页面当前处于另一个滚动位置时,当我点击状态栏使地址栏可见时,调用上述函数它隐藏了地址栏。

上述场景在 iPhone 4S 中完美实现。然而,第二种情况在 iPhone 5 中惨遭失败。

有谁知道可以在这里做什么?

编辑:我做了一些玩弄代码。在函数 ScrollWindowToTop() 中,我将其编辑如下

function ScrollWindowToTop(){
   document.body.scrollTop=50;
}

但是,如果我在控制台中打印 document.body.scrollTop 的值,它会将值显示为 0。知道为什么 iPhone5 中的 Safari 不修改此属性的值吗?

4

1 回答 1

1

好的,所以我找到了一个肮脏的修复程序。

$('body').on('touchstart', function (e){
  if (!$('.activeScroll').has($(e.target)).length){ 
    ScrollWindowToTop();
   }
}); 

我的页面上只有几个可滚动元素,因此我在可滚动元素中添加了一个名为“ activeScroll ”的类。如果在任何不可滚动的元素上检测到“ touchstart ”,它将强制页面向上滚动。因此,如果地址栏决定是讨厌的顽固自我而不是隐藏,页面上任何地方的触摸事件都会强制它备份。进入厄运之地。

于 2013-03-13T07:23:36.497 回答