检测浏览器 DOM 更改完成

发布于 2024-09-30 15:45:34 字数 354 浏览 1 评论 0原文

我有一段 JavaScript 代码,可以将新的 XHTML 添加到现有页面(DOM 树)中。 我的页面元素是动态的,因此添加新元素会导致其他元素大小发生变化。我有一个自定义滚动条实现,它取决于这些大小,并且每次更改时都需要重置。

我在插入新 XHTML 的语句后不久调用重置方法。但这似乎还为时过早。有时滚动条无法正确调整。如果我在重置之前添加一些延迟,这是可以的,但我认为它太粗糙且不可靠的解决方案。

我需要:

检测给定 DOM 元素何时完成大小更改

检测整个 DOM 更改何时完成以及重新布局。

到目前为止我什么也没找到。我知道对于大多数人来说情况太复杂,但我希望有人能够提供帮助。谢谢!

I have a JavaScript code that adds new XHTML to already existing page (DOM tree).
My page elements are dynamic, so adding new elements causes changes in other elements size. I have a custom scroll bar implementation that depends on those sizes and needs to be reset every time they change.

I call the reset method shortly after the statement that inserts the new XHTML. But it seems that this is too soon. Sometimes the scrollbar does not adjust properly. If I add some delay before reset, it is OK, but I consider it too crude and unreliable solution.

I need to either:

Detect when given DOM element completes change of size

or

Detect when the entire DOM change finishes along with the re-layout.

So far I could not find nothing. I know the situation is too complex for most people, but I hope somebody will be able to help. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

难如初 2024-10-07 15:45:34

进行一些轮询来检查 dom 的状态怎么样?这是使用 jQuery 的,只要页面主体中的 html 以最多半秒的延迟更新,就会调用 resetMyScrollbar

var lastDom = "";
function checkDomHash() {
  var newDom = $("body").html();
  if (newDom != lastDom) {
    resetMyScrollbar();
  }
  window.setTimeout(checkDomHash, 500);
}

在现实生活中,我会使用哈希函数并比较哈希值,因为比较巨大的字符串是浪费的。

var lastDomHash = "";
...
  var newDomHash = md5OrWhatever($("body").html());
  ...

编辑

或者您可以检查滚动条的高度。

var lastHeight = 0;
...
  var newHeight = $("#my_element_id").outerHeight();
  ...

How about some polling where you check the state of the dom? This is with jQuery and will call resetMyScrollbar whenever the html in the page body updates with a maximum half second delay.

var lastDom = "";
function checkDomHash() {
  var newDom = $("body").html();
  if (newDom != lastDom) {
    resetMyScrollbar();
  }
  window.setTimeout(checkDomHash, 500);
}

In real life I'd use a hash function and compare hashes as comparing huge strings is wasteful.

var lastDomHash = "";
...
  var newDomHash = md5OrWhatever($("body").html());
  ...

Edit

Or you could check the height of whatever the scroll bar is for.

var lastHeight = 0;
...
  var newHeight = $("#my_element_id").outerHeight();
  ...
零崎曲识 2024-10-07 15:45:34

尝试 onload 事件。

Try the onload event.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文