46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import Lazy from './lazy'
|
|
import LazyComponent from './lazy-component'
|
|
import LazyContainer from './lazy-container'
|
|
import LazyImage from './lazy-image'
|
|
import { VueLazyloadOptions } from '../types/lazyload'
|
|
import { App } from 'vue'
|
|
|
|
export default {
|
|
/*
|
|
* install function
|
|
* @param {Vue} Vue
|
|
* @param {object} options lazyload options
|
|
*/
|
|
install (Vue: App, options: VueLazyloadOptions = {}) {
|
|
const lazy = new Lazy(options)
|
|
const lazyContainer = new LazyContainer(lazy)
|
|
|
|
const vueVersion = Number(Vue.version.split('.')[0])
|
|
if (vueVersion < 3) return new Error('Vue version at least 3.0')
|
|
|
|
Vue.config.globalProperties.$Lazyload = lazy
|
|
|
|
Vue.provide('Lazyload', lazy)
|
|
|
|
if (options.lazyComponent) {
|
|
Vue.component('lazy-component', LazyComponent(lazy))
|
|
}
|
|
|
|
if (options.lazyImage) {
|
|
Vue.component('lazy-image', LazyImage(lazy))
|
|
}
|
|
|
|
Vue.directive('lazy', {
|
|
beforeMount: lazy.add.bind(lazy),
|
|
beforeUpdate: lazy.update.bind(lazy),
|
|
updated: lazy.lazyLoadHandler.bind(lazy),
|
|
unmounted: lazy.remove.bind(lazy)
|
|
})
|
|
Vue.directive('lazy-container', {
|
|
beforeMount: lazyContainer.bind.bind(lazyContainer),
|
|
updated: lazyContainer.update.bind(lazyContainer),
|
|
unmounted: lazyContainer.unbind.bind(lazyContainer)
|
|
})
|
|
}
|
|
}
|