[Angularjs]angular ng-repeat与js特效加载先后导致的问题

写在前面

最近在项目中遇到这样的一个前端的bug,在ng-repeat中绑定的图片,有一个晃动的特效,在手机端浏览的时候,图片有时候会正常展示,有时就展示不出来。当时猜测是因为angularjs与特效的那些代码加载的先后顺序造成的。有了这样的猜测,就有查找解决方案的方向了。

系列文章

[Angularjs]ng-select和ng-options

[Angularjs]ng-show和ng-hide

[Angularjs]视图和路由(一)

[Angularjs]视图和路由(二)

[Angularjs]视图和路由(三)

[Angularjs]视图和路由(四)

[Angularjs]ng-class,ng-class-even,ng-class-odd

[Angularjs]单页应用之分页

[Angularjs]国际化

[Angularjs]ng-repeat中使用ng-model遇到的问题

[Angularjs]过滤器

[Angularjs]ng-file-upload上传文件

解决方案

自定义一个指令,在加载完成angular repeat时,然后再去绑定那些特效。具体如下所示:

var app = angular.module('mylibraryapp', ['ngRoute', 'pascalprecht.translate', 'ngFileUpload']);

//指令
app.directive('onFinishRenderFilters', function ($timeout) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            if (scope.$last === true) {
                $timeout(function () {
                    scope.$emit('ngRepeatFinished');
                });
            }
        }
    }
});

在使用ng-repeat的标签上面添加这样的代码

<div class="item" id="filediv" ng-repeat="file in files" on-finish-render-filters>
           ........
</div>

在对应的Controller里面,添加angular repeat执行完成的回调方法

    //加载完成
    $scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
        new WOW().init();
        var h = $(window).height();
        $(".modal-dialog").css("margin-top", (h / 2) - 100 + "px");
    });

总结

这个问题折腾了很长时间,在电脑上测试测试不出来,在部分低版本的android手机上面有这样的问题。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5089637.html
时间: 2024-08-30 17:33:52

[Angularjs]angular ng-repeat与js特效加载先后导致的问题的相关文章

AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法_AngularJS

本文实例讲述了AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法.分享给大家供大家参考,具体如下: 1.分页加载数据的基础上,如何通过滚动加载,实现分页加载数据的效果,github上,针对AngularJS,有一款不错的插件,地址为:https://github.com/sroze/ngInfiniteScroll 2.下面来看官方给出的文档 (1)使用样例: <ANY infinite-scroll='{expression}' [infinite-scroll-di

js模块加载seajs框架的教程

有些时候,我们不得不写一些前段的东西,但是总感觉前段加载的太乱,管理起来不方便,加载也是问题,其实以前不会写页面,但是偶然机会开始一直写页面+写程序了.我的使用搭配方案是 seajs + angularjs + bootstrap + jquery + grunt + less . 为什么使用的是 Grunt 其实很简单,因为我也需要编译 less 文件,实施监控文件的改动和对 html . js .css 进行压缩.当然不仅仅是这些,功能很强大,我就不一一介绍了.只是个人喜好而已.感觉这东西跟

网站加速图文教程一:让JS文件加载速度加快

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 很多网站里会添加大量的JS代码,其中是统计啊,广告代码等一大堆的JS代码,如用某XX联盟的广告大部分时间打开网页的时候都显示在加载该联盟的广告,这样严重影响了用户的体验.有没有什么方法加快JS的加载呢?下面便宜吧就介绍一下让JS文件加载速度加快的图文教程. 首先,大部分的JS调用的代码为下: <script src="xxxx

浅析JS异步加载进度条_javascript技巧

展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1.当用户点击load button执行异步请求. 调用方法 出现加载条 2.怎么实现进度条呢? 1) 在document.body 新增一个div.覆盖浏览器. 设置背景会灰色. z-index = 999. 加载的时候让用户无法修改界面值 2) 在document.body 新增一个动态的div. 代码实现: Main.html: <!DOCTYPE html> <html>

怎么判断js脚本加载完成

 本篇文章主要是对判断js脚本加载完成的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在"按需加载"的需求中,我们经常会判断当脚本加载完成时,返回一个回调函数,那如何去判断脚本的加载完成呢?   我们可以对加载的 JS 对象使用 onload 来判断(js.onload),此方法 Firefox2.Firefox3.Safari3.1+.Opera9.6+ 浏览器都能很好的支持,但 IE6.IE7 却不支持.曲线救国 -- IE6.IE7 我们可以使用 js.onrea

javascript-关于codefollow编辑器的js偶尔加载不出来的问题

问题描述 关于codefollow编辑器的js偶尔加载不出来的问题 一.问题描述 codefollow网站用的是Simditor编辑器,在网速不是很快的情况下偶尔会出现编辑器工具栏加载不出来,导致无法发布问题和回答问题.查看控制台,报的是404的错,错误信息如下: 这两个js的文件路径是正确的,这两个js是模版引擎解析的源文件,静态资源没有问题,不懂为什么会报404的错,有没有哪位大神之前遇到过这种情况,一般是什么原因会导致报404的错? 解决方案 把你的dns设置为8.8.8.8看看

JS文件加载:比较async和DOM Script

async与script动态加载都能使文件异步加载,本文叙述它们对页面渲染和load加载的影响方面. 目前我用demo.js作为执行文件操作.代码: var now = function() { return +(new Date()); } var t_s = now(); while(now() - t_s < 2000) {  } 用sleep.php作为请求文件操作.代码: <?php     sleep(3);     echo "var bb"; ?> 1

IE及IE6浏览器中判断JS文件加载成功失败的方法

 这篇文章主要介绍了IE及IE6浏览器中判断JS文件加载成功失败的方法,本文使用vbscript来解决这个问题,需要的朋友可以参考下     浏览器的文件加载实际上是有非常纠结的兼容问题的.最近看到@lifesinger做了一个具体的总结.这里比较麻烦的是IE6~8不区分加载成功或失败,都走一个回调.在网上看了一种解决方案是,在加载文件的最后置一个全局变量或改变标签的属性来区分,这样成功与否就通过这个标志位判断.但显然不太完美,还要改加载文件. 后来尝试另一种思路,先创建一个vbscript,s

jquery跟js初始化加载的多种方法及区别介绍

 jquery是等待页面加载完数据,以及页面部分元素:js是页面全部加载完成才执行初始化加载,具体示例祥看本文 jquery和js初始化加载页面的区别:  jquery:等待页面加载完数据,以及页面部分元素(不包括图片.视频),    js:是页面全部加载完成才执行初始化加载.    1.jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,    第一种(比较常用):  代码如下: $.function(){  alert("第一种方法");  });    第二