2009-12-02 5 views
14

Ich benutze JQuery, um eine Anwendung zu entwerfen, wo der Benutzer Elemente innerhalb eines div ziehen kann, das automatisch Bildlaufleisten hinzufügt und die scrollHeight/scrollWidth nach Bedarf erweitert. Ich muss eine sogar feuern, wenn scrollHeight und scrollWidth des Container-div geändert werden.Gibt es ein Ereignis, das bei Änderungen an scrollHeight oder scrollWidth in jQuery ausgelöst wird?

Nein, ich möchte das Bildlaufereignis nicht verwenden, weil 1) Bildlauf nicht ausgelöst wird, wenn Sie einfach ein Element an den Rand ziehen und scrollHeight/scrollWidth ändern. 2) scrollt, wenn scrollHeight/scrollWidth nicht geändert wird.

Irgendwelche Hinweise?

Antwort

6

Ich empfehle jQuery, aber there is a 'resize' dispatcher.

2017 Version mit JavaScript:

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); 
}; 

Lesen Sie die Dokumentation für scrollHeight und wie sie sich auf scrollTop. Die Abfrage scrollHeight kann eine nicht-performante DOM-Neuberechnung auslösen, und die manuelle Verwaltung von Höhen/Oberseiten mit position:absolute ist wahrscheinlich schneller, da es keine rekursive Überprüfung auf margins (für) und andere CSS display Typen ist.

+0

Nun, sie können nicht so proprietär sein. Sie scheinen in Firefox gut zu funktionieren. Obwohl Ihr Kommentar mich dazu veranlasst hat, in Chrome einzuchecken, wo es ein Nein ist. Gibt es eine bessere Möglichkeit, um die Dimensionen eines Div zu erhalten, der mit Bildlaufleisten übergelaufen ist? – Pridkett

+0

Überprüfen Sie erweiterte Antworten für Zitate über meine Aussagen – jitter

+0

Okay, das sieht wie die Antwort aus, auch wenn es nicht die Antwort auf die Frage ist, die ich gefragt habe. In Wirklichkeit stellte ich die falsche Frage und sollte für die Verwendung einer nicht standardkonformen Erweiterung geknackt werden. Danke für die Hinweise. – Pridkett

5

Ich habe diese Frage hier beantwortet, die irrelevant erscheinen mag, aber es unterstützt scrollHeight Change auch und scrollWidth.

Detecting when a div's height changes using jQuery

Plugin:

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

Demo:

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

Dieses Plugin sollte auch Cross-Browser arbeiten, wie es Intervalle verwendet (SetTimeout) für eine solche überprüfen Änderungen, es kann auch erweitert werden, wenn Sie es brauchen :)

hoffe es hilft ...

+0

genial, danke – wuliwong

+1

Dieses Plugin nicht wirklich _listen_ für Mutationen, sondern fragt das DOM alle 100ms ab: https://github.com/valtido/jQuery-mutate/blob/master/js/mutate.js#L44 Entschuldigung um ein altes Plugin & Thread zu erstellen. Dieser Weg ist sehr teuer. – arminrosu

+0

@arminosu dies wurde Esel vor Jahren getan – Val

Verwandte Themen