2009-12-02 5 views
14

Estoy usando JQuery para diseñar una aplicación donde el usuario puede arrastrar elementos dentro de un div que automáticamente agrega barras de desplazamiento y expande scrollHeight/scrollWidth según sea necesario. Necesito disparar un incluso cuando el scrollHeight y scrollWidth del contenedor div se cambian.¿Hay algún evento que desactive los cambios en scrollHeight o scrollWidth en jQuery?

No, no quiero usar el evento de desplazamiento porque 1) el desplazamiento no se dispara cuando simplemente comienza a arrastrar un elemento al borde y el desplazamiento scrollHeight/scrollWidth cambia. 2) scroll dispara cuando scrollHeight/scrollWidth no cambia.

¿Alguna pista?

Respuesta

6

No recomiendo jQuery, pero there is a 'resize' dispatcher.

versión

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

Consulte la documentación para scrollHeight y cómo se relaciona con scrollTop. Consultar scrollHeight puede desencadenar un recálculo DOM no ejecutable, y administrar manualmente alturas/tops con position:absolute es probablemente más rápido, ya que no es una verificación recursiva en margins (para blocks) y otros tipos de CSS display.

+0

Bueno, no pueden ser tan patentados. Parece que funcionan bien en Firefox. Aunque, su comentario me instó a verificar en Chrome, donde es un no ir. ¿Existe alguna forma mejor de obtener las dimensiones de un div que se haya desbordado con barras de desplazamiento? – Pridkett

+0

Ver respuestas ampliadas para citas sobre mis declaraciones – jitter

+0

Bien, esta parece ser la respuesta, incluso si no es la respuesta a la pregunta que estaba haciendo. En realidad, estaba haciendo la pregunta incorrecta y debería ser criticado por usar una extensión que no sea compatible con las normas. Gracias por los consejos. – Pridkett

5

He respondido esta pregunta aquí, que puede parecer irrelevante, sin embargo, admite scrollHeight Change too y scrollWidth.

Detecting when a div's height changes using jQuery

Plugin:

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

Demostración:

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

Este plugin también debería funcionar navegador cruz como se está utilizando intervalos (setTimeout) para comprobar tales cambios, también puede extenderse si lo necesita :)

espero que ayude ...

+0

impresionante, gracias – wuliwong

+1

Este plugin en realidad no _listen_ por mutaciones, pero sondea el DOM cada 100ms: https://github.com/valtido/jQuery-mutate/blob/master/js/mutate.js#L44 Lo siento para mostrar un antiguo complemento e hilo. De esta manera es muy caro. – arminrosu

+0

@arminrosu esto se hizo burros hace años – Val

Cuestiones relacionadas