使用ionic中ion-slide-box实现移动app轮播特效

白昼怎懂夜的黑 提交于 2019-12-02 10:34:58

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)

 

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!