1. 程式人生 > >使用ionic中ion-slide-box實現移動app輪播特效

使用ionic中ion-slide-box實現移動app輪播特效

H5混合式移動開發框架ionic,是使用angularJS的語法,加上大名鼎鼎的移動應用開發框架cordova的核心。它的特點是跨平臺、入門簡單、可以減少開發週期。實質上,ionic就是用製作網頁的技術來開發移動app

下面使用ionicion-slide-box實現移動app輪播特效。

一、基本結構

其基本結構就是用ion-slide-box標籤包含若干個<ion-slide>標籤:

<ion-slide-box>

<ion-slide>

第一張圖片

</ion-slide>

<ion-slide>

第二張圖片

</ion-slide>

<ion-slide>

第三張圖片

</ion-slide>

  ……

</ion-slide-box>

二、ion-slide-boxAPI

屬性

型別

詳情

does-continue (可選)

布林值

是否迴圈切換:幻燈頁預設只能向左滑動,最後的幻燈頁只能向右滑動。將does-continue屬性值設為true,就可以讓幻燈頁組首尾連線起來,迴圈切換。

slide-interval (可選)

數字

自動播放的間隔時間,預設為4000毫秒。

show-pager (可選)

布林值

否顯示分頁器分頁器用來指示幻燈頁的選中狀態,位於幻燈片的底部,預設為黑色的實心小圓

pager-click (可選)

表示式

如果shou-pagertrue,當點選頁面分頁器時,觸發該表示式,傳遞一個'索引'變數。

on-slide-changed (可選)

表示式

當幻燈頁滑動時,觸發該表示式。傳遞一個'索引'變數。

active-slide (可選)

表示式

根據下標值,指定選中的幻燈頁。

auto-play(可選)

布林值

是否自動播放幻燈頁

三、$ionicSlideBoxDelegate介紹

可以使用$ionicSlideBoxDelegate控制所有的滑動框,常見方法如下:

方法名

引數/引數型別

詳情

slide(to, [speed])

number

to:滑上指定的幻燈片的下標值

speed:滑動鎖花費的時間,單位為毫秒

previous([speed])

number

speed:返回前一個幻燈片所花的時間,單位為毫秒。

next([speed])

number

speed:跳到下一個幻燈片所花的時間,單位為毫秒。

stop()

停止滑動

start()

開始滑動

currentIndex()

返回當前播放幻燈頁的下標值。

slidesCount()

返回幻燈片總的片數

四、原始碼

<!DOCTYPE html>

<html ng-app="myApp">

    <head>

       <meta charset="UTF-8">

       <title>使用ionicion-slide-box實現移動app輪播特效</title>

       <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0,user-scalable=no,width=device-width" />

       <link rel="stylesheet" href="css/ionic.css" />

       <script type="text/javascript"src="js/ionic.bundle.min.js"></script>

       <style>

           img{

max-width:100%;

}

</style>

    </head>

    <body ng-controller="myController">

       <ion-header-bar class="bar-positive">

           <ion-title>

              <h3>移動app輪播特效的製作</h3>

           </ion-title>

       </ion-header-bar>

       <ion-content>

           <ion-slide-box active-slide="model.activeIndex" does-continue="true" slide-interval="1000" auto-play="true" show-pager="true" pager-click="toSlideIndex(index)" on-tap="stopOrStart()">

              <ion-slide>         

                 <img src="img/1a.jpg" />       

              </ion-slide>

              <ion-slide>

                  <img src="img/2a.jpg" />

              </ion-slide>

              <ion-slide>

                  <img src="img/3a.jpg" />

              </ion-slide>

              <ion-slide>

                  <img src="img/4a.jpg" />

              </ion-slide>

              <ion-slide>

                  <img src="img/5a.jpg" />

              </ion-slide>

           </ion-slide-box>

       </ion-content>

       <ion-footer-bar class="bar-positive"></ion-footer-bar>

       <script>

           angular.module("myApp", ['ionic'])

                .controller("myController", function($scope, $ionicSlideBoxDelegate) {

                  $scope.model = {

                     activeIndex: "2",

                  };

/**

                   * 單擊分頁器,跳到指定的幻燈片

                   */

                  $scope.toSlideIndex = function(index) {

                     $scope.model.activeIndex = index;

                  };

                  /**

                   * 第一次輕擊幻燈片,停止輪播

                   * 第二次輕擊幻燈片,開始輪播

                   * 依次迴圈

                   */

                  $scope.even = 0;

                  $scope.stopOrStart = function() {

if($scope.even == 0) {

                         $ionicSlideBoxDelegate.stop();

                         $scope.even=1;

                     } else {

                         $ionicSlideBoxDelegate.start();

                         $scope.even=0;

                     }

                  }

              });

</script>

    </body>

</html>

五、提升

  1、修改樣式

執行程式碼,在瀏覽器中點選F12,檢視具體的樣式,找到對應的樣式名,重寫ionic專案中的css就可以了,比如可以把分頁器的小圓心變為白色的。

  2、非同步載入

如果網頁中的圖片地址是從資料庫獲取的,建議使用ajax,在ionic中,可以使用$http.get()方法非同步載入圖片,如果存在跨域問題,則可以使用$http.jsonp()方法。然後遍歷即可:

<ion-slide ng-repeat="m in imgs">         

                 <img src="img/{{m.imgUrl}}" /> 

              </ion-slide>

有時候會出現圖片無法加載出來,可以在在相應的controller檔案增加 $ionicSlideBoxDelegate.update()$ionicSlideBoxDelegate.update(); 就是當容器尺寸發生變化時,需要呼叫update()方法重繪幻燈片,更新滑動框;另外一種解決方案就是用ng-if判斷遍歷的陣列是否為空,不為空時再用repeat遍歷該陣列即可:

<ion-slide-box active-slide="model.activeIndex" does-continue="true" auto-play="true" ng-if="imgs">

              <ion-slide ng-repeat="m in imgs"

                 <img src="img/{{m.imgUrl}}" /> 

              </ion-slide>

           </ion-slide-box>

如果輪播至最後一個不輪播,可以在相應的controller檔案增加 $ionicSlideBoxDelegate.loop(true)