I have images looking like <img ng-src="dynamically inserted url"/>
. When a single image is loaded, I need to apply iScroll refresh() method so that to make image scrollable.
What is the best way to know when an image is fully loaded to run some callback?
Here is an example how to call image onload http://jsfiddle.net/2CsfZ/2/
Basic idea is create a directive and add it as attribute to img tag.
JS:
app.directive('imageonload', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('load', function() {
alert('image is loaded');
});
element.bind('error', function(){
alert('image could not be loaded');
});
}
};
});
HTML:
<img ng-src="{{src}}" imageonload />
I modified this a little so that custom $scope
methods can be called:
<img ng-src="{{src}}" imageonload="doThis()" />
The directive:
.directive('imageonload', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('load', function() {
//call the function that was passed
scope.$apply(attrs.imageonload);
});
}
};
})
Hope someone finds it VERY useful. Thanks @mikach
The doThis()
function would then be a $scope method
@ Oleg Tikhonov: Just updated the previous code.. @ mikach Thanks..)
app.directive('imageonload', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('load', function() {
alert('image is loaded');
});
element.bind('error', function(){
alert('image could not be loaded');
});
}
};
});
My answer:
var img = new Image();
var imgUrl = "path_to_image.jpg";
img.src = imgUrl;
img.onload = function () {
$scope.pic = img.src;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With