5

ここで cody sherman の JavaScript コードを使用しています: http://codysherman.com/tools/infinite-scrolling/code

また、単純な jquery スクリプトを使用して、tumblr 投稿を保持する div の背景画像を動的に変更しています。

jquery コードは正常に動作しますが、無限スクロール スクリプトが新しい投稿で更新されたときに関数を再度呼び出す方法が必要です。彼らがお互いに話している方法だと思います。

ここでページを見ることができます: http://hypergeography.tumblr.com/ (まだ無限スクロールを使用していませんが、背景画像を変更するスクリプトがあります。)

どんな助けでも大歓迎です。

4

1 に答える 1

4

十分に安全だと感じたら、間違いなくそのコードに取り掛かり (それほど長くはありません)、onreadystatechange セクションにいくつかのロジックを追加できます。このイベントは、Ajax 呼び出しが完了すると発生します。それにフックすると、コードと対話する何かを簡単に追加できます。

もう 1 つの方法は hijackXMLHttpRequestです。そのsend()メソッドが呼び出されたら、「load」イベントのリクエストを監視する独自のイベント リスナーをアタッチします。リクエストが完了したら、カスタム関数を呼び出すことができます。これは次のように実行できます。

XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
    this.addEventListener('load',function(){
        //CALL YOUR CODE HERE
    },false);
    this.originalSend(s);
}

または、onreadystatechange 関数をハイジャックして独自のロジックを追加することもできます。

XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
    if(this.onreadystatechange){
        var oldORSC=this.onreadystatechange;    
    }
    this.onreadystatechange=function(){
        if (this.readyState==4 && this.status==200){ //a successful request
                //CALL YOUR CODE HERE
        }
        if(oldORSC){
            oldORSC();
        }
    }
    this.originalSend(s);
}

もちろん、IE をサポートしたい場合は、IE が AJAX に使用する ActiveXObject で同様のことを行う必要があります。しかし、私はそれを使用していないので、例を挙げることはできません。

編集: これは、ページがこの目的のためだけに呼び出しを行っていることを前提としています。他の AJAX 呼び出しがある場合は、どの呼び出しが使用されているかを判断するロジックを追加する必要があります。このために、open()メソッドにフックして、URL やパラメーター、または呼び出しの行き先を特定するのに役立つ特定の情報を調べ、それに応じて要求を変更することができます。

また、これらのハイジャックが、他の JavaScript よりも前に FIRST と呼ばれることを確認してください。

于 2011-05-01T03:58:06.677 に答える