Angular Flexslider 隐藏直到完全加载
Angular Flexslider hide until fully loaded
我一直在努力让我的 angular flexslider
以我想要的方式工作。现在它正在动态填充,但图像需要一秒钟才能加载。它看起来不太好。当一切都满载时,我希望它淡入淡出。我怎样才能做到这一点?我无法获得 ngAnimate
或回调工作。我也尝试过一个指令。我什至尝试 $timeout
并在我的控制器中的函数末尾将变量设置为 true 和 false。没有任何效果。
到目前为止,这是我的代码:
HTML:
<flex-slider hide-till-load ng-show="showImages" class="animate-if" slider-id="slider" flex-slide="image in imagePaths track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" prev-text="" next-text="" init-delay="100" start="loaded()">
<li>
<img ng-src="{{image.custom}}" alt="Luxury Resort Rental Image"/>
</li>
</flex-slider>
注意:hide-till-load
是我尝试使用 $timeout
和 scope.$last
的指令。都没有用。 showImages
是我在某些功能结束时在控制器中设置的变量。但是,它不会等到图像完全加载,所以它无法按照我想要的方式工作。
Javascript:
//works but does not wait until images are fully loaded. Not what I want
$scope.loaded= function(){
console.log("this is after");
$timeout(function() {
$scope.showImages= true;
$scope.iconHide= true;
});
}
//doesn't work at all
resortModule.directive('hideTillLoad', function (){
return{
scope:false, //don't need a new scope
restrict: 'A', //Attribute type
link: function (scope, elements, arguments){
console.log(scope.$last);
if (scope.$last) {
console.log('page Is Ready!');
}
}
}
})
这里有一个 link 到一个 Fiddle,展示了如何让它工作:
https://jsfiddle.net/mpe51oso/
想法是添加一个指令,每当加载图像时调用一个函数。该函数会增加一个计数器 - 一旦计数器等于滑块中的图像数量,它就会设置一个标志,然后将其评估为 true 并显示您的滑块。
imageonload 指令是从这里复制的:Image loaded event in for ng-src in AngularJS
所以在你的 HTML 中添加 imageonload 属性指令并调用一个函数(这里是 incrementLoadCount)——还要注意 ng-show
<flex-slider slide="item in items track by item.id" animation="slide" ng-show="allLoaded">
<li><img ng-src="{{item.img}}" imageonload="incrementLoadCount()" />{{item.name}}</li>
</flex-slider>
然后 - incrementLoadCount 递增 ;)
$scope.incrementLoadCount = function () {
imgLoadedCount++;
if (sliderImgCount == imgLoadedCount) {
$scope.allLoaded = true;
}
}
我一直在努力让我的 angular flexslider
以我想要的方式工作。现在它正在动态填充,但图像需要一秒钟才能加载。它看起来不太好。当一切都满载时,我希望它淡入淡出。我怎样才能做到这一点?我无法获得 ngAnimate
或回调工作。我也尝试过一个指令。我什至尝试 $timeout
并在我的控制器中的函数末尾将变量设置为 true 和 false。没有任何效果。
到目前为止,这是我的代码:
HTML:
<flex-slider hide-till-load ng-show="showImages" class="animate-if" slider-id="slider" flex-slide="image in imagePaths track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" prev-text="" next-text="" init-delay="100" start="loaded()">
<li>
<img ng-src="{{image.custom}}" alt="Luxury Resort Rental Image"/>
</li>
</flex-slider>
注意:hide-till-load
是我尝试使用 $timeout
和 scope.$last
的指令。都没有用。 showImages
是我在某些功能结束时在控制器中设置的变量。但是,它不会等到图像完全加载,所以它无法按照我想要的方式工作。
Javascript:
//works but does not wait until images are fully loaded. Not what I want
$scope.loaded= function(){
console.log("this is after");
$timeout(function() {
$scope.showImages= true;
$scope.iconHide= true;
});
}
//doesn't work at all
resortModule.directive('hideTillLoad', function (){
return{
scope:false, //don't need a new scope
restrict: 'A', //Attribute type
link: function (scope, elements, arguments){
console.log(scope.$last);
if (scope.$last) {
console.log('page Is Ready!');
}
}
}
})
这里有一个 link 到一个 Fiddle,展示了如何让它工作:
https://jsfiddle.net/mpe51oso/
想法是添加一个指令,每当加载图像时调用一个函数。该函数会增加一个计数器 - 一旦计数器等于滑块中的图像数量,它就会设置一个标志,然后将其评估为 true 并显示您的滑块。
imageonload 指令是从这里复制的:Image loaded event in for ng-src in AngularJS
所以在你的 HTML 中添加 imageonload 属性指令并调用一个函数(这里是 incrementLoadCount)——还要注意 ng-show
<flex-slider slide="item in items track by item.id" animation="slide" ng-show="allLoaded">
<li><img ng-src="{{item.img}}" imageonload="incrementLoadCount()" />{{item.name}}</li>
</flex-slider>
然后 - incrementLoadCount 递增 ;)
$scope.incrementLoadCount = function () {
imgLoadedCount++;
if (sliderImgCount == imgLoadedCount) {
$scope.allLoaded = true;
}
}