国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

利用AngularJs實現(xiàn)京東首頁輪播圖效果

2019-11-20 09:03:01
字體:
供稿:網(wǎng)友

先來看看效果圖

其實寫一個輪播圖還是蠻簡單的,我想了兩種種方法,來實現(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)速低的情況下,體驗很不好,我不推薦。

所有我很推薦我這種寫法,雖然

主站蜘蛛池模板: 勐海县| 玉林市| 资兴市| 连南| 新余市| 中方县| 高青县| 南宫市| 高邮市| 丰顺县| 南乐县| 洪泽县| 宿州市| 平陆县| 浦县| 电白县| 博野县| 九龙坡区| 汾西县| 福贡县| 晋城| 高尔夫| 芦山县| 鲁甸县| 德令哈市| 金门县| 湘潭县| 临桂县| 彭泽县| 绥化市| 连江县| 尖扎县| 洪江市| 繁峙县| 会泽县| 正宁县| 寿宁县| 化德县| 鄯善县| 布尔津县| 辰溪县|