A (very) small collection of directives to help with the loading of images. Will be adding more as I think of them.
Currently available on bower. Hoping to make it available on NPM also.
bower install angular-image-utils --save
Lodash
is also required for debouncing window resize events. It's not a hard requirement but without it your browser may struggle to keep up with the hundreds of function calls that get fired on resize. This depends very much on how many images you are loading and whether you're concerned with the user resizing the browser before the images have loaded, it's at your discretion. Just in case you want to though (and you should cause lodash
is amazing) lodash
is defined as a dependency in bower so it's as simple as loading it before you load this script.
Setting the width
and height
attributes on an image can be desirable if you have something like a grid of images. Unfortunately even if you can return width and height of images before you load the image in the users browser setting these attributes will often overflow thier bounds.
This is a simple little directive which dynamically sets those attributes while the image loads and removes those attributes once it that is done to restore the natural flow.
<img iu-sizes iu-width="1024" iu-height="768" ng-src="{{image}}" />
Which before load in a parent container that is 500px wide will yield:
<img iu-sizes width="500" height="375" iu-width="1024" iu-height="768" src="..." ng-src="..." />
As mentioned before, after load those width
and height
attributes will be removed.
You can also get the sizes to be applied to a parent element and then have them removed when a child element triggers the load event.
<div iu-sizes iu-width="1024" iu-height="768">
<img iu-sizes-element ng-src="..." />
</div>
Inserts a small user-defined string at the end of the images parent container.
So:
<div>
<img iu-spinner iu-template-string="<span class='spinner'></div>" ng-src="..." />
</div>
Will compile to:
<div class="iu-load">
<img iu-spinner iu-template-string="<span class='spinner'></div>" ng-src="..." />
<span class='spinner'></div>
</div>
Notice how the iu-load class was added to the class. The iu-spinner
directive will add this class on link()
when the onload
event is triggered on the image element a further iu-complete
class is added so that you may do things like hide the spinner or trigger animations.
So to clarify, when the image has loaded the HTML will look like this:
<div class="iu-load iu-complete">
<img iu-spinner iu-template-string="<span class='spinner'></div>" ng-src="..." />
<span class='spinner'></div>
</div>
You can customize the class names. Refer to the API below.
You can also get the spinner to attach to a parent container and then be removed in a similar way to iu-sizes
.
<div iu-spinner iu-template-string="<span class='spinner'></div>">
<img iu-sizes-element ng-src="..." />
</div>
iu-width
: The original width of the image in pixels. Required.iu-height
: The original width of the image in pixels. Required.iu-scale-up
: Boolean to override the default behaviour of not up-scaling images. Optional.
iu-template-string
: The template to insert into the bottom of the parent container. Optional ifiu-template-url
is specified.iu-template-url
: Dynamically loads a template to insert into the bottom of the parent container via Angular's$http
service. Optional ifiu-template-string
is specified.iu-parent-selector
: A CSS selector that matches which parent you want the loading classes to be applied to. If not found or not set, it's applied to the immediate parent. Optional.iu-load-class
: Change class that is added to the parent when thelink()
function on the directive is called. Optional. Defaultiu-load
.iu-complete-class
: Change class that is added to the parent when the image element finished loading. Optional. Defaultiu-complete
.iu-error-class
: Change class that is added to the parent when the image element fails to load. Optional. Defaultiu-error
.iu-error-replace-string
: A custom string that will replace the image if it fails to load. Optional.iu-error-replace-url
: A custom template URL that will replace the image if it fails to load. Optional.
Restrictiu-spinner
andiu-sizes
to attributes, not elements.- Add to NPM directory.
- Add ngDocs.
- Use bower to pull down frontend test dependencies.
bower install
. - Install the dependencies specified in
package.json
.npm install
. - Run the tests with npm.
npm test
or gulpgulp test
. - Run the build with
gulp build
.