先來看看效果圖

其實寫一個輪播圖還是蠻簡單的,我想了兩種種方法,來實現(xiàn)輪播圖(實際上細分是5種,但是其中兩種是操作dom原生,三種是利用AngularJs的動畫,所有歸為兩大類),等我寫出來,大家好好理解一下就好。
那我先寫一種,第一種是不使用angularjs的動畫模塊,只使用指令來完成動畫的切換。在這里面就是在指令里操作dom元素,超級easy。
示例代碼
<!DOCTYPE html><html lang="en" ng-app="lunbo"><head> <meta charset="UTF-8"> <script src="lib/angular.min.js" type="text/javascript"></script> <script src="lib/angular-animate.js" type="text/javascript"></script> <title></title> <style> .hidden{ display: none; } .active{ display: block; } </style></head><body ng-controller="lunboController"> <div lunbo ></div> <script type="text/ng-template" id="lunbo.html"> <ul> <li ng-repeat="img in images" class="fade-in style hidden" > <a href="{{img.href}}"><img src="{{img.src}}" alt=""/></a></li> </ul> </script></body><script> var app=angular.module('lunbo',['ngAnimate']); app.controller('lunboController',['$scope','readJSON', function ($scope,readJSON) { }]); app.factory('readJSON',['$http','$q', function ($http,$q) { return { query: function () { var deferred=$q.defer(); $http({ method:'GET', url:'img.json' }).success(function (data, status, header, config) { deferred.resolve(data); }).error(function (data, status, header, config) { deferred.reject(data); }); return deferred.promise; } } }]); app.directive('lunbo',['readJSON', function (readJSON) { return{ restrict:'EA', templateUrl:'lunbo.html', scope:{}, link: function (scope, element, attr) { var promise=readJSON.query(); var step=0; scope.flag=false; promise.then(function (data) { console.log(data); scope.images=data; }); setInterval(function () { element.find("li").css({"display":"none","opacity":0}); step++; step=step%5; element.find("li").eq(step).css({"display":"block","opacity":1}); },1000) } } }]); /*app.animation('.fade-in', function () { return{ enter: function (element, done) { } } })*/</script></html>[ { "href":"http://www.google.com", "src":"img/5.jpg", "alt":"5" }, { "href":"http://www.google.com", "src":"img/6.jpg", "alt":"6" }, { "href":"http://www.google.com", "src":"img/7.jpg", "alt":"7" }, { "href":"http://www.google.com", "src":"img/8.jpg", "alt":"8" }, { "href":"http://www.google.com", "src":"img/9.jpg", "alt":"9" }]看指令的最后是不是很簡單啊,就是通過指令的link函數(shù)中的element對象調(diào)用angularjs自身封裝的jquery函數(shù)來完成的。
另外一種是
link: function (scope, element, attr) { var promise=readJSON.query(); var step=0; scope.flag=false; promise.then(function (data) { console.log(data); scope.images=data; }); setInterval(function () { element.find("li").removeclass("acitve"); step++; step=step%5; element.find("li").eq(step).addclass("active"); },1000) } }如果要過渡效果,可以在acive類中加入css3的過渡動畫。
這里面是用$http和$q來實現(xiàn)了一個延遲異步拉取數(shù)據(jù),通過這樣組合函數(shù)可以使函數(shù)功能更加健壯,也更方便監(jiān)控函數(shù)。我以后會花時間專門來解釋angularjs的$q和jquery的$Deferred的內(nèi)容,其實原理差不多,都實現(xiàn)了promise操作。
用JavaScript的實現(xiàn)方法的難點,在于如何實現(xiàn)元素的增加和減少,這樣才能觸發(fā)AngularJs的動畫效果。這次寫了一個,但是在開始運行的時候有個小瑕疵,就是小按鈕的步長一定要加上1,才和照片同步。不知道怎么造成的,以后再來填坑,如有不妥的地方,歡迎指出。
還有一種寫法,我不太推薦,雖然很好寫,我把思路大概說一下,就是建立一個數(shù)組,用來存放圖片的src等信息,每次從里面取出一個,用雙向綁定到img的src上,當下現(xiàn)讀取img,當?shù)较乱粋€的時候,把img的src清空,并且賦值下一個。以此循環(huán),這樣雖然也可以做到輪播,但是這樣極大的增加了http請求數(shù)量,在網(wǎng)速低的情況下,體驗很不好,我不推薦。
所有我很推薦我這種寫法,雖然 主站蜘蛛池模板: 勐海县| 玉林市| 资兴市| 连南| 新余市| 中方县| 高青县| 南宫市| 高邮市| 丰顺县| 南乐县| 洪泽县| 宿州市| 平陆县| 浦县| 电白县| 博野县| 九龙坡区| 汾西县| 福贡县| 晋城| 高尔夫| 芦山县| 鲁甸县| 德令哈市| 金门县| 湘潭县| 临桂县| 彭泽县| 绥化市| 连江县| 尖扎县| 洪江市| 繁峙县| 会泽县| 正宁县| 寿宁县| 化德县| 鄯善县| 布尔津县| 辰溪县|