动态计算定位,fixed于失败项附近,并定时消失,多个提示一同显示。node
当表单处于dialog中,而且表单高度大于dialog高度,验证失败项又恰好在被overflow隐藏的部分,须要对这部分提示作特殊处理,暂且处理为不显示这部分提示。问题如图:spa
function nodeParents (elm, cls) { let parent = elm.parentNode while (parent && !parent.classList.contains(cls)) { parent = parent.parentNode } return parent }
function visibleInDialog (elm, parent) { const rect1 = elm.getBoundingClientRect() const rect2 = parent.getBoundingClientRect() return rect1.bottom < rect2.bottom && rect1.top > rect2.top }
const dialog = nodeParents(elm, 'dialog') if (dialog && visibleInDialog(elm, dialog) || !dialog) { errorTip(tip) }