UNPKG

primevue

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://badge.fury.io/js/primevue.svg)](https://badge.fury.io/js/primevue) [![Discord Chat](https://img.shields.io/discord/55794023

68 lines (61 loc) 1.95 kB
import BaseComponent from 'primevue/basecomponent'; import { openBlock, createElementBlock, mergeProps, renderSlot, createCommentVNode } from 'vue'; var script = { name: 'DeferredContent', extends: BaseComponent, emits: ['load'], data() { return { loaded: false }; }, mounted() { if (!this.loaded) { if (this.shouldLoad()) this.load(); else this.bindScrollListener(); } }, beforeUnmount() { this.unbindScrollListener(); }, methods: { bindScrollListener() { this.documentScrollListener = () => { if (this.shouldLoad()) { this.load(); this.unbindScrollListener(); } }; window.addEventListener('scroll', this.documentScrollListener); }, unbindScrollListener() { if (this.documentScrollListener) { window.removeEventListener('scroll', this.documentScrollListener); this.documentScrollListener = null; } }, shouldLoad() { if (this.loaded) { return false; } else { const rect = this.$refs.container.getBoundingClientRect(); const docElement = document.documentElement; const winHeight = docElement.clientHeight; return winHeight >= rect.top; } }, load(event) { this.loaded = true; this.$emit('load', event); } } }; function render(_ctx, _cache, $props, $setup, $data, $options) { return (openBlock(), createElementBlock("div", mergeProps({ ref: "container" }, _ctx.ptm('root')), [ ($data.loaded) ? renderSlot(_ctx.$slots, "default", { key: 0 }) : createCommentVNode("", true) ], 16)) } script.render = render; export { script as default };