UNPKG

v-track

Version:

一个基于Vue指令的埋点插件

74 lines (66 loc) 1.69 kB
/* * @Author: 宋慧武 * @Date: 2019-04-08 11:13:34 * @Last Modified by: 宋慧武 * @Last Modified time: 2020-06-04 17:08:44 */ /** * @desc 是否为元素几点 * * @param {DOMElement} ele 一个 DOM 元素 * @return {Boolean} */ export const isElement = ele => ele && ele.nodeType === 1; /** * @desc 获取 DOM CSS 属性的值 * * @param {DOMElement} ele A DOM 元素 * @returns {String} */ export function getStylePropValue(ele, prop) { return window.getComputedStyle(ele).getPropertyValue(prop); } /** * @desc 元素是否在可视区域可见 * * @param {Object} rect 元素大小及相对可视区域的位置信息 * @returns {Boolean} true => 可见 false => 不可见 */ export function isInViewport(rect, viewport) { if (!rect || (rect.width <= 0 || rect.height <= 0)) { return false; } return ( rect.bottom > 0 && rect.right > 0 && rect.top < window.innerHeight && rect.left < window.innerWidth && !( rect.left > viewport.right || rect.top > viewport.bottom || rect.right < viewport.left || rect.bottom < viewport.top ) ); } /** * @desc 元素是否隐藏 * * @param {DOMElement} ele A DOM 元素 * @returns {Boolean} true => 未隐藏可见 false => 隐藏不可见 */ export function isVisible(ele) { if (ele === window.document) { return true; } if (!ele || !ele.parentNode) { return false; } const parent = ele.parentNode; const visibility = getStylePropValue(ele, "visibility"); const display = getStylePropValue(ele, "display"); if (visibility === "hidden" || display === "none") { return false; } return parent ? isVisible(parent) : true; }