ember-skeleton is built and maintained by DockYard, contact us for expert Ember.js consulting.
Show fast-loading temporary images in place of an eventual slow-loading image.
This library relies on addEventListener and removeEventListener
which is
IE9+
npm install && bower install
ember buildThe builds will be in the dist/ directory.
ember install ember-skeleton
If it is a bug please open an issue on GitHub.
Use the component in your templates:
The workflow is thus:
- The
tmpSrcimage will be loaded first - Once complete the
srcimage will attempt to load - If the
srccompletes successfully it will be displayed - If the
srcdoes not complete successfully thetmpSrcwill stay - If an optional
errorSrcis provided that image will be displayed in the even ofsrcnot completing successfully.
If you'd like to set defaults instead of having to manually set tmpSrc
and errorSrc for each use of {{skeleton-img}} you can overwrite the
component in app/components/skeleton-img.js
import SkeletonImg from 'ember-skeleton/components/skeleton-img';
export default SkeletonImg.extend({
tmpSrc: "/default/path/to/placeholder.png",
errorSrc: "/default/path/to/error/placeholder.png"
});Now you can do:
You can still override the defaults by passing those values into the component from within the template.
The component itself produced an img tag with a skeleton-img class.
The follow state-based classes are also available:
loadingused when thesrcimage is still loadingloadedused whensrchas successfully completedload-errorused ifsrchas not succesfully completed
Because the slow-loading images will likely be a different size than the
placeholders it is recommended that you normalize the img tag's
dimensions:
.skeleton-img {
width: 300px;
height: 300px;
}This example will ensure that the when src swaps our with tmpSrc
that there isn't any chnages in dimensions. This of course is optional
and the values should change based upon your needs.
If you'd like to defer rendering you can override the renderSrc value
on the component. For example, you might want to change over to only
rendering the src once the element is in the viewport. This is easily
accomplished in combination with
ember-in-viewport.
Override app/components/skeleton-img.js
import SkeletonImg from 'ember-skeleton/components/skeleton-img';
import InViewportMixin from 'ember-in-viewport';
const {
set
} = Ember;
export default SkeletonImg.extend(InViewportMixin, {
renderSrc: false,
didEnterViewport() {
set(this, 'renderSrc', true);
}
});This is a great performance optimization for mobile applications.
We are very thankful for the many contributors
This library follows Semantic Versioning
Please do! We are always looking to improve this library. Please see our Contribution Guidelines on how to properly submit issues and pull requests.
DockYard, Inc © 2015