112

iPad でスクロール イベントをキャプチャできないようです。これらのどれも機能しません。何が間違っていますか?

window.onscroll=myFunction;

document.onscroll=myFunction;

window.attachEvent("scroll",myFunction,false);

document.attachEvent("scroll",myFunction,false);

それらはすべて、Windows の Safari 3 でも動作します。皮肉なことに、window.onload=既存のイベントを壊しても構わないのであれば、PC 上のすべてのブラウザがサポートしています。しかし、iPadには行きません。

4

5 に答える 5

154

iPhoneOS はonscrollイベントをキャプチャしますが、予想とは異なります。

onscroll図 6-1 に示すように、1 本指のパンでは、ユーザーがパンを停止するまでイベントは生成されません。ページの移動が停止して再描画されると、イベントが生成されます。

同様に、2 本の指でのスクロールは、スクロールをonscroll停止した後にのみ発生します。

ハンドラーをインストールする通常の方法で動作します。

window.addEventListener('scroll', function() { alert("Scrolled"); });
// or
$(window).scroll(function() { alert("Scrolled"); });
// or
window.onscroll = function() { alert("Scrolled"); };
// etc 

( https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.htmlも参照してください)

于 2010-05-19T07:25:31.193 に答える
109

iOS の場合、次のようにtouchmoveイベントとscrollイベントを使用する必要があります。

document.addEventListener("touchmove", ScrollStart, false);
document.addEventListener("scroll", Scroll, false);

function ScrollStart() {
    //start of scroll event for iOS
}

function Scroll() {
    //end of scroll event for iOS
    //and
    //start/end of scroll event for other browsers
}
于 2012-03-20T12:49:04.740 に答える
39

古い投稿に別の回答を追加して申し訳ありませんが、私は通常、このコードを使用してスクロール イベントを非常にうまく取得します (少なくとも 6.1 で動作します)。

element.addEventListener('scroll', function() {
    console.log(this.scrollTop);
});

// This is the magic, this gives me "live" scroll events
element.addEventListener('gesturechange', function() {});

そして、それは私にとってはうまくいきます。それがしないのは、スクロールの減速のためのスクロールイベントを与えることだけです(減速が完了すると、最終的なスクロールイベントが発生します。好きなように行います)が、これを行うことでcssで慣性を無効にする場合

-webkit-overflow-scrolling: none;

古典的なことをしなければならないかもしれませんが、体のために、あなたはあなたの要素に慣性を得ません

document.addEventListener('touchmove', function(e) {e.preventDefault();}, true);
于 2013-06-19T15:32:29.150 に答える