2009-12-02 11 views
14

私はJQueryを使用して、スクロールバーを自動的に追加するdiv内の要素をドラッグし、必要に応じてscrollHeight/scrollWidthを展開できるアプリケーションを設計しています。コンテナdivのscrollHeightとscrollWidthが変更されても、私は消す必要があります。jQueryのscrollHeightまたはscrollWidthの変更に対して発生するイベントはありますか?

いいえ、スクロールイベントは使用しないでください。1)要素をエッジにドラッグしてscrollHeight/scrollWidthを変更するだけで、スクロールが開始されないためです。 2)scrollHeight/scrollWidthが変更されないときに、スクロールが発生します。

ヒント

答えて

6

jQueryはおすすめしませんが、there is a 'resize' dispatcherです。 JavaScriptを使用して

2017バージョン:

this.container = document.querySelector('#container'); 
this.watcher = window.requestAnimationFrame(this.watch); 

this.watch =() => { 
    cancelAnimationFrame(this.watcher); 

    if (this.lastScrollHeight !== container.scrollHeight) { 
    // do something 
    } 

    this.lastScrollHeight = container.scrollHeight; 
    this.watcher = requestAnimationFrame(this.watch); 
}; 

scrollHeightとどのようにそれがscrollTopに関連するためのドキュメントを参照してください。 scrollHeightを照会すると、パフォーマンスの悪いDOMの再計算が発生する可能性があります。また、(blocksの場合)およびその他のCSS displayタイプの再帰チェックではないため、position:absoluteで高さ/高さを手動で管理する方が高速になる可能性があります。

+0

まあ、その所有権を持つことはできません。 Firefoxでうまく動作しているようです。あなたのコメントはChromeにチェックインするよう促しましたが、どこに行かないのですか。 スクロールバーでオーバーフローしたdivのディメンションを取得するより良い方法はありますか? – Pridkett

+0

私のステートメントに関する引用の拡張回答を確認してください – jitter

+0

これは私が求めていた質問に対する答えではなくても、これは答えのようです。実際には私は間違った質問をしていました。ポインタをありがとう。 – Pridkett

5

私はここでこの質問に答えましたが、これは無関係に見えるかもしれませんが、scrollHeight ChangeとscrollWidthもサポートしています。

Detecting when a div's height changes using jQuery

プラグイン:

http://www.jqui.net/jquery-projects/jquery-mutate-official/

デモ:このようなをチェックする間隔(のsetTimeout)を使用しているよう

$('.selector').mutate('scrollHeight',function(){ 
    alert('it has changed the scroll height do something about it...'); 
}); 

このプラグインは、クロスブラウザを動作するはず変更、それはあなたがそれを必要とする場合は、拡張することもできます:)

助けて欲しいと思っています。

+0

awesome、thanks – wuliwong

+1

このプラグインは実際には突然変異の_listen_ではなく、100msごとにDOMをポーリングします:https://github.com/valtido/jQuery-mutate/blob/master/js/mutate.js#L44 申し訳ありません古いプラグインとスレッドを呼び出すこの方法は非常に高価です。 – arminrosu

+0

@arminrosuこれはロバ年前に行われました – Val

関連する問題