2013-03-12 64 views
1

我有一个跨浏览器和跨平台的web应用程序。在iPhone上,我设法使用$(document).scrollTop(0)隐藏地址栏;jquery:iphone 5 safari上的scrollTop问题当在地址栏上点击

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

$(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知道为什么Safari在iPhone5的是不是修改这个属性的值?

+0

我也试过scrollTo()和window.top.scroll(x,y),而不是scrollTop。但他们不适用于方案2中的iphone5 :( – imbecile 2013-03-12 09:50:40

回答

1

好吧,所以我发现了一个肮脏的修复。

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

我只有一对夫妇的我的网页上滚动的元素,所以我加入了一个名为“activeScroll”可滚动元素类。如果在任何不可滚动的元素上检测到'touchstart',则会强制页面向上滚动。因此,如果地址栏决定是讨厌的自我而不是隐藏,页面上任何地方的触摸事件都会强制它恢复。进入厄运之地。