我正在使用 JQuery 设计一个应用程序,用户可以在 div 内拖动元素,该 div 会自动添加滚动条并根据需要扩展滚动高度/滚动宽度。当容器div的scrollHeight和scrollWidth改变时,我需要触发一个even。
不,不想使用滚动事件,因为1)当您开始将元素拖动到边缘并且滚动高度/滚动宽度发生变化时,滚动不会被触发。 2)当scrollHeight/scrollWidth不改变时滚动触发。
有什么提示吗?
[免责声明]请注意,此答案的某些部分不再准确。
scrollHeight
和 scrollWidth
现在是 CSSOM Spec 的一部分,并拥有更广泛的支持 1 2
我认为这样的任务不会得到支持。为什么要有一个?
scrollHeight
和 scrollWidth
不属于任何 W3C 规范或技术建议,AFAIK 是 MSIE 专有的 DHTML 对象模型扩展。
您可以自己检查,即使 MSDN 页面声明此 MSDN 滚动宽度属性,MSDN:scrollHeight 属性没有标准。
大多数浏览器似乎都支持它,但实际上没有人“真正”知道 IE 如何实现它们,因此根据浏览器的不同,您可能会得到不同的行为。
大多数浏览器可能会对 IE 的功能进行有根据的猜测,然后修复用户的“错误报告”。但尤其是 Opera(现在是 Chrome?)已知会报告这两个属性的“不正确”值。
我已经在这里回答了这个问题,这可能看起来无关紧要,但它也支持滚动高度更改和滚动宽度。
插件:
http://www.jqui.net/jquery-projects/jquery-mutate-official/
演示:
$('.selector').mutate('scrollHeight',function (){
alert('it has changed the scroll height do something about it...');
});
这个插件也应该跨浏览器工作,因为它使用间隔(setTimeout)来检查此类更改,如果您需要它也可以扩展:)
希望有帮助...
不,当scrollHeight/scrollWidth更改时会触发事件,但是,您可以将内容包装在包装器div内,并在该内容包装器上使用
ResizeObserver
来检查其大小何时更改,其宽度和高度将是父scrollWidth和滚动高度