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 に完全に実装されています。ただし、2 番目のシナリオは 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();
   }
}); 

ページにスクロール可能な要素が2つしかないため、スクロール可能な要素に「activeScroll」というクラスを追加しました。スクロールできない要素で「タッチスタート」が検出されると、ページが強制的に上にスクロールされます。したがって、アドレスバーが厄介な頑固な自己であり、非表示ではないと判断した場合、ページ上の任意の場所でタッチイベントを実行すると、アドレスバーが強制的にバックアップされます。運命の地へ。

于 2013-03-13T07:23:36.497 に答える