vue-visual
v2.7.0
Published
Vue 2 image and video loader supporting lazy loading, background videos, fixed aspect ratios, low rez poster images, transitions, loaders, slotted content and more and more
Downloads
530
Readme
Vue Visual
Vue 2 image and video loader supporting lazy loading. Visual 2.x is a simplification of Version 1.x with a greater reliance on modern browser features (IntersectionObserver, object-fit, srcset, sizes, etc).
Examples at https://bkwld.github.io/vue-visual.
Installation
- Install the package:
npm install --save vue-visual
oryarn add vue-visual
- Register the component:
import Vue from 'vue' import Visual from 'vue-visual' Vue.component('visual', Visual) import 'vue-visual/index.css'
- These polyfills are recommended for older browsers:
Usage
See the Storybook.
Props
A list of the component properties that may be set on the Visual component.
Assets
image (string)
: The URL of an image to load.srcset (string)
: Animg
srcset, used in addition to theimage
. Both are recommended.webp-srcset (string)
: Asrcset
that will be added to asource
inside of apicture
element with atype
ofimage/webp
.video (string|array)
: A video that is loaded after the image is loaded if the device supports video. If a string, should be the URL to a source video. If an array, a list of video URLs that will be added as difference<source>
s.
Size
width (number|string)
: This width will be applied to the asset element. If a number, it's assumed to be a px value.height (number|string)
: Seewidth
max-width (number|string)
: This value will be applied to the asset element as the cssmax-width
. If a number, it's assumed to be a px value.sizes (string)
: Specify theimg
sizes
attribute.aspect (number)
: Force the Visual to a specific aspect ratio. This works by making the assetposition:absolute
and then using an inner div with apadding-top
set to a percentage.expand (boolean)
: Make the Visual fill it's container via CSS using absolute positioning.
Style
object-fit (string)
- Defaultcover
. Like the CSS property.object-position (string)
- Defaultcenter center
. Like the CSS property.align (string)
- Defaultcenter middle
.. Used in conjunction with slots to position the slot content. May be any combination of one horizontal (left
,center
,right
) and one vertical (top
,middle
,bottom
) choice, space-delimited.
Loading
preload (boolean)
- Requires Nuxt framework. Iftrue
will add<link rel="preload"/>
tags to the<head>
for the image assets.autoload (boolean)
- Default:true
. Iftrue
, assets are loaded immediately unlesslazyload
.lazyload (boolean)
- Waits until the Visual enters the viewport to trigger loading. Overridesautoload
.intersection-options (object)
- IntersectionObserver options. Used withlazyload
andautopause
.placeholder-color
- Sets a background color behind the assets. Most useful in conjunction with anaspect
value.transition (string, boolean)
- Default:'vv-fade'
. A Vue transition name that is applied when an asset is loaded. Set to an empty string to immediately render assets rather than waiting for loading.
Video
autoplay (boolean)
- Iftrue
, begins playing immediately.autopause (boolean)
- Iftrue
, begins playing when the Visual enters the viewport and stops when it leaves. Overridesautoplay
.loop (boolean)
- Sets<video>
loop
muted (boolean)
- Sets<video>
muted
controls (boolean)
- Sets<video>
controls
Accessibility
alt (string)
- Sets thealt
attribute oraria-label
value, depending on context.
Slots
default
: Markup is added after the assets and before the loaderimage-source
: Adds<source>
tags to the<picture>
element.video-source
: Adds<source>
tags to the<video>
element.
Methods
load()
- Manually initiate loading.play()
- Tellvideo
to play.pause()
- Tellvideo
to pause.restart()
- Tellvideo
to restart playback from beginning.
Events
loaded:image
- Image asset has finished loadingloaded:video
- Video asset has finished loadingloaded
- All assets hvae loaded
Contributing
- Boot up the Storybook with
yarn storybook
and use that as your HMR friendly dev environment - Use
npm version ...
to build, tag, and update the poblished storybook
Changes from 1.x
- Dropped props:
poster
fallback
- per-asset variants for
load
, etc
- Prop changes
background
➡object-fit
background-position
➡object-position
fill
➡expand
- Not testing for video support on device
- Video playing state not stored in Vue state
- Image and video loaded simultenously, not in series
- Removed
setDefaults
for setting default options. See custom-defaults for an example of how to implement this functionality using a functional component.
migrate-1.x.coffee shows an example of a functional component that migrates the old API to the new API.