zoukankan      html  css  js  c++  java
  • Ionic

    1、Ionic提供基于AngularJS的扩展

    结构:

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar align-title="center">
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content>
      <p>这是正文</p>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    </script>
    
    </body>
    </html>

    2、ionRefresher
    下拉刷新组件
    ①用在ionContent第一个子元素
    ②通过on-refresh去绑定刷新要执行的动作
    ③事件 $scope.$broadcast('scroll.refreshComplete')

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content ng-controller="myCtrl">
      <ion-refresher
        on-refresh="refresh()"
        >
    
      </ion-refresher>
      <ul class="list list-inset">
        <li class="item"
            ng-repeat="tmp in list track by $index">
          {{tmp}}
        </li>
      </ul>
    
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope', function ($scope) {
          $scope.list = [100,200,300];
    
          $scope.refresh = function () {
            console.log(' on refresh func is called ');
            //向数组插入一条数据
            $scope.list.push(
              Math.floor(Math.random()*10));
    
            //通过event的方式通知ionic刷新结束了
            $scope.$broadcast('scroll.refreshComplete')
          }
    
        }])
    
    </script>
    
    </body>
    </html>

    3、ionInfiniteScroll
    上拉加载更多组件
    ①用在ionContent最后一个子元素
    ②通过on-infinite去绑定加载更多时要执行的动作
    ③事件 $scope.$broadcast('scroll.infiniteScrollComplete');
    ④该组件默认会在首次加载时判断是否可以加载更多数据,如果可以,就会自动触发on-infinite;可以通过immediate-check='true/false'调整是否允许首次加载是否要自动触发加载更多

    注意事项:如果没有更多数据可以加载了,通过ngIf指令移除该组件

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content ng-controller="myCtrl">
    
      <ul class="list list-inset">
        <li class="item"
            ng-repeat="tmp in list track by $index">
          {{tmp}}
        </li>
      </ul>
      <ion-infinite-scroll
        immediate-check="false"
        on-infinite="loadMore()">
    
      </ion-infinite-scroll>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
      app.controller('myCtrl',
        ['$scope', function ($scope) {
          $scope.list = [10, 20, 30, 40];
          $scope.loadMore = function () {
            console.log('in load more');
            $scope.list.push(
              Math.floor(Math.random() * 100));
            //通过事件方式通知ionic加载完成了
            $scope.$broadcast(
              'scroll.infiniteScrollComplete');
          }
    
        }
        ]
      )
    </script>
    
    </body>
    </html>

    4、$ionicScrollDelegate
    在服务中封装了控制滚动的方法
    scrollTop scrollBottom scrollTo()
    getScrollPosition

    例子:滚动到列表项内容为20:
    Object {left: 0, top: 1060, zoom: 1}

    程序控制恢复到指定的位置:
    scrollTo()

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body ng-controller="myCtrl">
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content>
      <ul class="list list-inset">
        <li class="item" ng-repeat="tmp in list">
          {{tmp}}
        </li>
      </ul>
    
    </ion-content>
    
    <ion-footer-bar>
      <button
        ng-click="goToTop()"
        class="button button-small button-positive">
        Top
      </button>
      <button
        ng-click="getNowPos()"
        class="button button-small button-assertive">
        GetPosition
      </button>
      <button
        ng-click="restorePosition()"
        class="button buton-small button-balanced"
        >
        RestorePos
      </button>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope', '$ionicScrollDelegate',
          function ($scope, $ionicScrollDelegate) {
    
            $scope.list = [];
            for (var i = 0; i < 500; i++) {
              $scope.list.push(i);
            }
    
            $scope.goToTop = function () {
              //滚动到顶部
              $ionicScrollDelegate.scrollTop(true);
            }
    
            $scope.getNowPos = function () {
              //得到当前的位置
              var postion = $ionicScrollDelegate.getScrollPosition();
              console.log(postion);
            }
    
            $scope.restorePosition = function () {
              //滚动到指定的位置
              $ionicScrollDelegate.scrollTo(0,1060,true);
            }
    
          }])
    
    </script>
    
    </body>
    </html>

    5、ionicTab 选项卡/标签页
    css:tabs tab-item tabs-icon-top/bottom/left/right
    通过指令实现选项卡

    ionTabs: 通过class来设置tabs-icon-top tabs-positive
    ionTab: 通过属性title icon icon-on icon-off on-select/deselect ng-click
    注意事项:第一个标签页式默认被选中的。on-select只要是该标签页被选中就会触发

    练习:实现点击不同的tab页面,更新头部标题的信息
    音乐--》music
    电影--》movie
    游戏--》game

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body ng-controller="myCtrl">
    
    <ion-header-bar>
      <h1 class="title">{{headInfo}}</h1>
    </ion-header-bar>
    
    <ion-tabs class="tabs-icon-top">
      <ion-tab on-select="handleSelect(0)" title="音乐" icon="ion-headphone">
        <ion-view>
          <ion-content>
            <ul class="list list-inset">
              <li class="item">Music001</li>
              <li class="item">Music002</li>
              <li class="item">Music003</li>
            </ul>
          </ion-content>
        </ion-view>
      </ion-tab>
      <ion-tab on-select="handleSelect(1)" title="电影"
        icon="ion-videocamera">
        <ion-view>
          <ion-content>
            <ul class="list list-inset">
              <li class="item">Movie001</li>
              <li class="item">Movie002</li>
              <li class="item">Movie003</li>
            </ul>
          </ion-content>
        </ion-view>
      </ion-tab>
      <ion-tab on-select="handleSelect(2)" title="游戏"
        icon-on="ion-ios-football"
        icon-off="ion-ios-football-outline">
        <ion-view>
          <ion-content>
            <ul class="list list-inset">
              <li class="item">Game001</li>
              <li class="item">Game002</li>
              <li class="item">Game003</li>
            </ul>
          </ion-content>
        </ion-view>
      </ion-tab>
    </ion-tabs>
    
    <!--
    <ion-content>
      <p>这是正文</p>
    </ion-content>
    -->
    
    
    <!--<ion-footer-bar>-->
      <!--<h1 class="title">footer</h1>-->
    <!--</ion-footer-bar>-->
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope', function ($scope) {
    
          $scope.headInfo = "";
          
          $scope.handleSelect = function (id) {
            if(id == 0)
            {
              $scope.headInfo = "music";
            }
            else if(id == 1)
            {
              $scope.headInfo = "movie";
            }
            else
            {
              $scope.headInfo = "game";
            }
            
          }
    
      }])
    
    </script>
    
    </body>
    </html>

    6、侧边栏菜单
    ionSideMenus
    ionSideMenu
    ionSideMenuContent

    ionSideMenu:
    side/width/is-eneabled
    属性:menu-toggle menu-close
    方法:$ionicSideMenuDelegate.toggleLeft/right

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-side-menus>
      <!-- 实现一个侧边栏菜单-->
      <ion-side-menu class="positive-bg">
        <button class="button-icon ion-close" menu-close="left"></button>
        <ul class="list list-inset">
          <li class="item">个人中心</li>
          <li class="item">帮助与关于</li>
          <li class="item">退出登录</li>
        </ul>
      </ion-side-menu>
    
      <!-- 再实现一个右边打开的侧边栏菜单-->
      <ion-side-menu
        width="100"
        class="balanced-bg" side="right">
        <ul class="list list-inset">
          <li class="item">个人中心</li>
          <li class="item">帮助与关于</li>
          <li class="item">退出登录</li>
        </ul>
      </ion-side-menu>
    
      <!-- 正文-->
      <ion-side-menu-content>
        <ion-header-bar>
          <h1 class="title">header</h1>
        </ion-header-bar>
    
        <ion-content ng-controller="myCtrl">
          <p>这是正文</p>
          <button menu-toggle="left">操作侧边栏菜单</button>
          <br/>
          <button
            ng-click="openLeft()"
            class="button button-balanced">
            打开左边的侧边栏菜单
          </button>
          <br/>
          <button ng-click="operateRightMenu()"
                  class="button button-assertive">
            操作右边侧边栏菜单
          </button>
        </ion-content>
    
        <ion-footer-bar>
          <h1 class="title">footer</h1>
        </ion-footer-bar>
      </ion-side-menu-content>
    </ion-side-menus>
    
    
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
      ['$scope','$ionicSideMenuDelegate',
        function ($scope,$ionicSideMenuDelegate) {
          //打开左边的侧边栏菜单
          $scope.openLeft = function () {
            $ionicSideMenuDelegate.toggleLeft(true);
          }
          
          //操作右边的侧边栏菜单
          $scope.operateRightMenu = function () {
            $ionicSideMenuDelegate.toggleRight();
          }
          
        }
      ])
    
    </script>
    
    </body>
    </html>

    7、窗口
    ①actionSheet(从下往上弹出的操作表)
    $ionicActionSheet.show({})
    参数中的对象:titleText/cancelText/destructiveText/buttons/cancel/destructiveButtonClicked/buttonClicked

    ②popup(在中间显示的弹窗)
    $ionicPopup.alert/prompt/confirm()

    ③loading
    $ionicLoading.show/hide()

    练习:实现一个列表,支持下拉刷新,在下拉刷新的处理函数中加载数据(每次加载数据,都要显示一个加载中的窗口 loading...,只出现2s)

    分析:
    ①构造数据并显示
    ②支持下拉刷新,每次在头部插入一条随机数据
    ③在下拉刷新时添加加载中的窗口

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content ng-controller="myCtrl">
      <p>这是正文</p>
      <button
        ng-click="showActionSheet()"
        class="button">
        分享文章
      </button>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',[
        '$scope','$ionicActionSheet',
        function ($scope,$ionicActionSheet) {
    
          //显示操作表
          $scope.showActionSheet = function () {
            $ionicActionSheet.show({
              titleText:'分享文章窗口',
              destructiveText:'删除',
              destructiveButtonClicked: function () {
                console.log('选择了删除操作');
                return true;
              },
              cancelText:'取消',
              cancel: function () {
                console.log('选择了取消的操作');
                return true;
              },
              buttons:[
                {text:'分享到朋友圈'},
                {text:'分享到微博'}
              ],
              buttonClicked: function (index) {
                if(index == 0)
                {
                  console.log('分享到朋友圈成功');
                }
                else
                {
                  console.log('分享到微博成功');
                }
                return true;
              }
            });
          }
          
        }
      ])
    
    </script>
    
    </body>
    </html>

    8、列表
    ion-list/ion-item/ion-checkbox/ion-toggle/'ion-radio

    ion-option-button
    ion-delete-button(show-delete='true')
    ion-reorder-button(show-reorder='true')

    11 22
    22 33
    33 44
    44 55
    55 11

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content ng-controller="myCtrl">
      <p>这是正文</p>
      <button
        class="button button-assertive"
        ng-click="showConfirm()">
        点击显示窗口
      </button>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope', '$ionicPopup',
          function ($scope, $ionicPopup) {
    
            //显示一个确认窗口
            $scope.showConfirm = function () {
              $ionicPopup
                .confirm({
                  title: '请确认',
                  template: '请确认周边安全',
                  okText: '确认',
                  cancelText: '取消'
                })
                .then(function (result) {
                  console.log(result);
                  if (result) {
                    $scope.showPrompt();
                  }
                });
            }
            //显示一个输入提示窗口
            $scope.showPrompt = function () {
              $ionicPopup
                .prompt({
                  title: '请输入金额',
                  template: "请输入本次取现的金额",
                  inputType: 'text',
                  okText: '确认取现',
                  cancelText: '取消本次操作'
                })
                .then(function (result) {
                  console.log(result);
                  if(result)
                  {
                    $scope.showAlert();
                  }
                })
            }
            //显示一个警告窗口
            $scope.showAlert = function () {
              $ionicPopup.alert({
                title:'操作成功',
                template:'请取走您的卡'
              });
            }
          }
        ])
    
    </script>
    
    </body>
    </html>

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content ng-controller="myCtrl">
      <p>这是正文</p>
      <button
        ng-click="load()"
        class="button button-balanced">
        加载数据
      </button>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope', '$ionicLoading','$timeout',
          function ($scope, $ionicLoading,$timeout) {
    
            $scope.load = function () {
              //通过$ionicLoading 实现一个加载中的窗口
              $ionicLoading.show({
                template:'正在加载...'
    //            duration:3000
              });
    
              //延迟3s,关闭加载中的窗口
              $timeout(
                function () {
                  $ionicLoading.hide();
                },
                3000
              );
    
            }
    
          }
        ])
    
    </script>
    
    </body>
    </html>

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content ng-controller="myCtrl">
      <ion-refresher on-refresh="doRefresh()">
    
      </ion-refresher>
      <ul class="list">
        <li class="item" ng-repeat="tmp in list">
          {{tmp}}
        </li>
      </ul>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope', '$ionicLoading','$timeout',
          function ($scope, $ionicLoading,$timeout) {
            $scope.list = [10, 20, 30, 44];
    
            $scope.doRefresh = function () {
    
              /*
              $ionicLoading.show()
              $http.get('url').success(function(){
               $ionicLoading.hide()
              })*/
    
              $scope.list.unshift(
                Math.floor(Math.random() * 100));
    
              $ionicLoading.show({
                template:'loading...'
              });
              $timeout(function () {
                $ionicLoading.hide();
                $scope.$broadcast(
                  'scroll.refreshComplete');
              },2000)
    
            }
    
          }
        ])
    
    </script>
    
    </body>
    </html>

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body>
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content>
      <ion-list>
        <ion-item>1</ion-item>
        <ion-item>2</ion-item>
        <ion-item>3</ion-item>
        <ion-radio></ion-radio>
        <ion-radio></ion-radio>
        <ion-checkbox>复选框</ion-checkbox>
      </ion-list>
    </ion-content>
    
    <ion-footer-bar>
      <h1 class="title">footer</h1>
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    </script>
    
    </body>
    </html>

     

    <!DOCTYPE html>
    <html ng-app="myApp">
    <head lang="en">
      <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="css/ionic.css"/>
      <script src="js/ionic.bundle.js"></script>
      <title></title>
    </head>
    <body ng-controller="myCtrl">
    
    <ion-header-bar>
      <h1 class="title">header</h1>
    </ion-header-bar>
    
    <ion-content>
      <button ng-click="toggleDelete()">
        {{deleteEnableText}}
      </button>
      <ion-list show-delete="deleteEnable">
        <ion-item ng-repeat="tmp in list">
          <ion-delete-button
            ng-click="deleteItem($index)"
            class="ion-minus-circled">
    
          </ion-delete-button>
          {{tmp}}
        </ion-item>
      </ion-list>
    
      <br/>
      <ion-list>
        <ion-item>
          michael
          <ion-option-button class="button-positive">
            action1
          </ion-option-button>
          <ion-option-button class="button-assertive">
            action2
          </ion-option-button>
        </ion-item>
      </ion-list>
    
      <!-- 学习列表在ionic手工排序的实现 -->
      <ion-toggle ng-model="reorderEnable">排序</ion-toggle>
      <ion-list show-reorder="reorderEnable">
        <ion-item ng-repeat="tmp in list">
          {{tmp}}
          <ion-reorder-button
            on-reorder="reOrder(tmp,$fromIndex,$toIndex)"
            class="ion-navicon">
    
          </ion-reorder-button>
        </ion-item>
      </ion-list>
    
    </ion-content>
    
    <ion-footer-bar>
    
    </ion-footer-bar>
    
    <script>
      var app = angular.module('myApp', ['ionic']);
    
      app.controller('myCtrl',
        ['$scope',
          function ($scope) {
            $scope.list = [11, 22, 33, 44, 55];
    
            $scope.deleteEnableText = "编辑";
            $scope.deleteEnable = false;
    
            //删除指定位置的数据
            $scope.deleteItem = function (index) {
              $scope.list.splice(index, 1);
            }
    
            //是否允许删除按钮显示的方法
            $scope.toggleDelete = function () {
              $scope.deleteEnable = !$scope.deleteEnable;
              if ($scope.deleteEnable) {
                $scope.deleteEnableText = '编辑完成'
              }
              else {
                $scope.deleteEnableText = '编辑'
              }
            }
    
            //排序时调用的方法
            $scope.reOrder = function (item, from, to) {
    
              //删除原本位置的数据
              $scope.list.splice(from,1)
              //在目的地位置插入数据
              $scope.list.splice(to,0,item)
            }
    
    
          }])
    
    </script>
    
    </body>
    </html>
  • 相关阅读:
    怎样从外网访问内网MongoDB数据库?
    怎样从外网访问内网MySQL数据库?
    怎样从外网访问内网Tomcat?
    怎样从外网访问内网Oracle数据库?
    怎样从外网访问内网WampServer?
    怎样从外网访问内网Jupyter Notebook?
    怎样从外网访问内网RESTful API?
    怎样从外网访问内网WebSphere?
    系统性能测试步骤
    性能相关面试题
  • 原文地址:https://www.cnblogs.com/web-fusheng/p/7050687.html
Copyright © 2011-2022 走看看