代码之家  ›  专栏  ›  技术社区  ›  Boris Hamanov

检测浏览器DOM更改完成

  •  0
  • Boris Hamanov  · 技术社区  · 15 年前

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

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

    我需要:

    当给定的dom元素完成大小更改时检测

    或

    检测整个DOM更改随重新布局一起完成的时间。

    到目前为止,我什么也找不到。我知道情况对大多数人来说太复杂了,但我希望有人能帮忙。谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   Dave Aaron Smith    15 年前

    在检查DOM状态的地方进行一些轮询怎么样?这是jquery,将调用 resetMyScrollbar 每当页面正文中的HTML以最长半秒的延迟进行更新时。

    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();
      ...
    
        2
  •  0
  •   letronje    15 年前

    尝试OnLoad事件。