nodelist上的MutationObserver

时间:2018-02-10 22:01:57

标签: javascript mutation-observers

我有一些html有四个部分:

<section class="section"><div class="button"></div></div>
<section class="section"><div class="button"></div></div>
<section class="section"><div class="button"></div></div>
<section class="section"><div class="button"></div></div>

在本节的内部有一个div.button类,当用户点击它时,该部分将被展开,覆盖整个页面(内部的所有元素都变得可见),并接收类'is-expanded'< / p>

现在我在那些节点上设置MutationObserver(类'section'):

utilities.js

class Observer{
  constructor(targetClass,buttonHandler){
    this.targetClass = targetClass;
  }
  initObserver(){
    let self = this;
    const observer = new MutationObserver(function(mutations){
        mutations.forEach(function(mutation){
          if(mutation.target.classList.contains(self.targetClass)){
          let menuButton = Array.from(mutation.target.children).find(function(el){
            return el.classList.contains('menu-heading')
          })
          self.buttonHandler.disable(menuButton)
          console.log(menuButton)
      }
      else if(!mutation.target.classList.contains(self.targetClass)){
        let menuButton = Array.from(mutation.target.children).find(function(el){
          return el.classList.contains('menu-heading')
        })
        self.buttonHandler.enable(menuButton)

      }
        })
      }
      return observer
  }
}

main.js

    const observer = new utilities.Observer(expandedClass).initObserver()
const sections = Array.from(document.querySelectorAll('.section'));

document.addEventListener('DOMContentLoaded',function(){
  sections.forEach(function(section){
    observer.observe(section,{attributes:true})
  })
})

我是突发观察api的新手,可以这个好用吗?甚至在性能方面(而不是在点击等时使用addEventListener)

感谢

修改 我更新代码,现在我想要的是,如果section扩展了类,子按钮(带有类.menu-heading)将css样式的pointerEvents设置为none,如果没有目标类则为auto。 buttonhandler类的enable函数执行作业

0 个答案:

没有答案