1.1.3 • Published 6 years ago

@xunlei/vue-lazy-component v1.1.3

Weekly downloads
314
License
MIT
Repository
github
Last release
6 years ago

Vue Lazy Component

npm Commitizen friendly Git flow work flow GitHub stars GitHub issues GitHub forks GitHub license

🐌 Vue.js 2.x component level lazy loading component

Features

  • Support load component when componet visible or will soon be visible
  • Support load compoent for time delay
  • Support load skeleton component before real component load to improve the user experience
  • Support code split to load components asynchronously

Installation

npm install @xunlei/vue-lazy-component

Online demo

https://xunleif2e.github.io/vue-lazy-component/demo/dist/index.html

Usage

Registration

Use plugin to register a global component

import VueLazyComponent from '@xunlei/vue-lazy-component'
import Vue from 'vue'

Vue.use(VueLazyComponent)

Local Registration

import { component as VueLazyComponent } from '@xunlei/vue-lazy-component'

export default {
  // ...
  components: {
    'vue-lazy-component': VueLazyComponent
  }
}

Direct <script> Include

The premise is that Vue is also use direct <script> include.

<script src="https://unpkg.com/@xunlei/vue-lazy-component@1.0.7/dist/vue-lazy-component.js"></script>

Template syntax

 <vue-lazy-component
  @init="init"
  @beforeInit="beforeInit"
 >
  <!-- real component-->
  <st-series-sohu/>
  <!-- skeleton component -->
  <st-series-sohu-skeleton slot="skeleton"/>
</vue-lazy-component>

Props

ParameterDescriptionTypeOptionalDefault value
viewportViewport where componet is in. Default is the window viewport.HTMLElementtruenull means window viewport
directionDirection of the viewport scolls. vertical or horizontalStringtruevertical
thresholdThreshold of preload, in css synax.Stringtrue0px
tagNameTag name of the wrapper element.Stringtruediv
timeoutDelay time. If set this, whether visible or not, automatically load after the specified timeNumbertrue-

Events

Event NameDescriptionArgs
before-initComponent visible or delayed cut-off caused to begin loading the real component.-
initStart to load real componet-
before-enterReal component begin enterel
before-leaveSkeleton component begin leaveel
after-leaveSkeleton component leavedel
after-enterReal component enteredel
after-initInitialization is complete-

Notes

  1. The project relies on IntersectionObserver API. To run in an earlier version of the browser, you need to include IntersectionObserver API polyfill

IntersectionObserver API polyfill

https://github.com/w3c/IntersectionObserver/tree/master/polyfill

  1. Using Scoped Component Slots require Vue 2.1.0+

Development Setup

# install deps
npm install

# serve demo at localhost:8080
npm run dev

# build library and demo
npm run build

# build library
npm run build:library

# build demo
npm run build:demo

# commit use commitizen
npm run commit

# pre publish
npm run prepublish

# generate changelog
npm run changelog

License

MIT

Copyright (c) 2017 XunleiF2E