/** * Check text element * @returns */ constcheckTheTextNode = () => { //expand char to get word,sentence based on setting //except if mouse target is special web block which need to be handled as block for clarity, handle as block try { range.setStartBefore(range.startContainer); range.setEndAfter(range.startContainer); } catch (error) { log.debug("get mouse over word fail", error); }
//check mouse is actually in text bound rect const rect = range.getBoundingClientRect(); //mouse in word rect if ( rect.left > clientX || rect.right < clientX || rect.top > clientY || rect.bottom < clientY ) { return; }
return range.startContainerasHTMLElement };
let findedElement; if (range.startContainer.nodeType !== Node.TEXT_NODE) { findedElement = checkTheUnTextElement(); } else { findedElement = checkTheTextNode(); }
return findedElement; }
判断是否为Shadow Element
shadow element 是需要特殊处理的
exportfunctionisShadowElement(element: HTMLElement) { // check element is shadow root // @ts-ignore: it's ok if (element.host && element.mode) { returntrue; } else { returnfalse; } }