angularjs - 检测图像是从指令完全加载的,其中指令未应用于图像元素

标签 angularjs angularjs-directive

SO中有很多关于我们如何使用 Angular 指令来知道何时加载图像的示例。这些示例描述了一个直接应用于 img 元素的指令,如下所示:

<img ng-src="myimage.jpg" my-great-directive />

然后在指令“my-great-directive”中

我们可以做一个:
element.bind("load" , function(e){ }

我工作得很好。

但是,如果构造是这样的:
<div my-great-directive>
  <img ng-src="myimage.jpg" />
</div>

在 my-great-directive 中,如何绑定(bind)到内部图像加载事件?

这对我来说并不是一个真正的理论问题。我正在使用一个名为 angular-carousel-slider 的第 3 方 slider ,它像这样环绕:
<ul rn-carousel  rn-carousel-buffered
                    rn-carousel-index="mycarousel.index"
                    rn-carousel-auto-slide="0.3" rn-carousel-pause-on-hover >
   <li ng-repeat="slide in slides">
       <img ng-src="{{eventBasePath}}{{slide.img}}?rand={{rand}}"/>
  </li>
</ul>

我正在尝试修改它的代码,以便它不会滑动到下一个图像,除非当前图像已完全加载(以避免快速 slider 半加载图像并移动到下一个图像的情况)。我被困在如何在指令中捕获这个图像加载事件。做element.bind("load")不起作用,因为该指令未应用于图像元素。

谢谢!

最佳答案

查看此工作演示:JSFiddle
使用 anguler.element 找到img元素并绑定(bind)事件。
在您的指令中,它应该是 element.find('img') .

angular.module('Joy', [])
    .directive('hello', [function () {
    return {
        restrict: 'A',
        link: function (scope, ele) {
            var img = ele.find('img');
            console.log(img);
            img.bind('load', function () {
                console.log('img is loaded');
            });
        }
    };
}]);
HTML:
<div ng-app="Joy">
    <div hello>
        <img ng-src="https://www.google.com.hk/images/srpr/logo11w.png">
    </div>
</div>

更新 1
如果使用 ng-repeat , 添加 $timeout等待ng-repeat首先完成。检查工作演示:JSFiddle .
注意:这个演示正在加载一个非常大的图像。图片加载后,文字img is loaded将显示。
更新 2
如果事件绑定(bind)不起作用,请尝试原生 image.onload绑定(bind)(或 oncomplete 以查找缓存的图像)。工作演示:JSFiddle .

关于angularjs - 检测图像是从指令完全加载的,其中指令未应用于图像元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31665668/

相关文章:

javascript - 对另一个值使用react的验证指令在 1.0.x 中有效,但在 1.2.x 中无效

javascript - Angular ui-router,可以在其他解析之前解析身份验证检查吗?

javascript - 跨多个客户端同步的 Firebase 倒数计时器

javascript - 如何在 View 中对 Controller 中的更改使用react

javascript - AngularJS : Retrieving data to a directive from a factory function

javascript - Uncaught Error : [$injector:unpr] Unknown provider:

javascript - 具有隔离范围的 Angularjs 指令需要澄清

javascript - 在 Angular-js 指令的链接函数中编写指令

javascript - 具有函数绑定(bind)的 Angular 指令范围评估 ('&' )

javascript - 从 1.4.9 升级到 1.5.0 时,Angular 指令嵌套异常损坏