AngularJS 中 ng-src 的图像加载事件

IT技术 javascript html angularjs
2021-02-07 12:05:36

我有图像看起来像<img ng-src="dynamically inserted url"/>当加载单个图像时,我需要应用 iScroll refresh() 方法以使图像可滚动。

了解图像何时完全加载以运行某些回调的最佳方法是什么?

6个回答

这是一个如何调用图像加载的示例http://jsfiddle.net/2CsfZ/2/

基本思想是创建一个指令并将其作为属性添加到 img 标签。

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 />
渐进式图像呢?
2021-03-27 12:05:36
失败回调呢?
2021-04-10 12:05:36

我稍微修改了一下,以便$scope可以调用自定义方法:

<img ng-src="{{src}}" imageonload="doThis()" />

该指令:

.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);
                });
            }
        };
    })

希望有人觉得它非常有用。谢谢@mikach

doThis()函数将是一个 $scope 方法

感谢您放置分号,以免 lint 爆炸。
2021-03-15 12:05:36
没错。直到我像您一样使用 $apply() 之前,Mikach 的解决方案才对我有用。
2021-03-24 12:05:36
2021-03-28 12:05:36
这是提供的最佳答案。也完全不需要任何 JQUERY 加载。
2021-04-02 12:05:36

@ Oleg Tikhonov:刚刚更新了之前的代码..@mikach 谢谢..)

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');
        });
    }
  };
});
将其包含在“imageonerror”指令中可能会更好,以便您可以执行不同的操作。
2021-03-27 12:05:36

我的答案:

 var img = new Image();
 var imgUrl = "path_to_image.jpg";
 img.src = imgUrl;
 img.onload = function () {
      $scope.pic = img.src;
 }

刚刚更新了之前的代码..

<img ng-src="{{urlImg}}" imageonload="myOnLoadImagenFunction">

和指令...

    .directive('imageonload', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attrs) {
                element.bind('load', function() {
                    scope.$apply(attrs.imageonload)(true);
                });
                element.bind('error', function(){
                  scope.$apply(attrs.imageonload)(false);
                });
            }
        };
    })