场景:判断某个元素是否出现了可视区域,根据是否在可视区域来执行不同动作;
比如第一屏未出现支付按钮时,显示底部悬浮按钮,当页面下滑出现支付按钮,则底部悬浮按钮消失。
@/utils/index.js
/**
* 判断某个原生DOM元素是否不在屏幕可见区内
* @param {*} el 原生DOM元素
*/
const isElementNotInViewport = function(el) {
let rect = el.getBoundingClientRect();
return (
rect.top >= (window.innerHeight || document.documentElement.clientHeight) ||
rect.bottom <= 0
);
};
export { isElementNotInViewport};
isElementNotInViewport在组件内的使用:
import { isElementNotInViewport} from "@/utils/index.js";
mounted() {
this.$nextTick(() => {
let timer;
window.addEventListener("scroll", () => {
if (this.isFixed) {
this.isFixed = false;
}
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
this.handleScroll();
}, 200);
});
this.handleScroll();
});
},
methods: {
// 滑动出现底部按钮
handleScroll() {
if (isElementNotInViewport(this.$refs.lightBtn)) {
this.isFixed = true;
} else {
this.isFixed = false;
}
},
}
相关参考链接:
Element.getBoundingClientRect()
只是简单小记,如有错误望指出,互相学习,共同进步~
网友评论