Make function wait until element exists

前端 未结 11 1841
一向
一向 2020-11-28 17:40

I\'m trying to add a canvas over another canvas – how can I make this function wait to start until the first canvas is created?

function PaintObject(brush) {         


        
11条回答
  •  有刺的猬
    2020-11-28 18:18

    If you want a generic solution using MutationObserver you can use this function

    // MIT Licensed
    // Author: jwilson8767
    
    /**
     * Waits for an element satisfying selector to exist, then resolves promise with the element.
     * Useful for resolving race conditions.
     *
     * @param selector
     * @returns {Promise}
     */
    export function elementReady(selector) {
      return new Promise((resolve, reject) => {
        const el = document.querySelector(selector);
        if (el) {resolve(el);}
        new MutationObserver((mutationRecords, observer) => {
          // Query for elements matching the specified selector
          Array.from(document.querySelectorAll(selector)).forEach((element) => {
            resolve(element);
            //Once we have resolved we don't need the observer anymore.
            observer.disconnect();
          });
        })
          .observe(document.documentElement, {
            childList: true,
            subtree: true
          });
      });
    }
    

    Source: https://gist.github.com/jwilson8767/db379026efcbd932f64382db4b02853e
    Example how to use it

    elementReady('#someWidget').then((someWidget)=>{someWidget.remove();});
    

    Note: MutationObserver has a great browser support; https://caniuse.com/#feat=mutationobserver

    Et voilà ! :)

提交回复
热议问题