Ionic - JavaScript 滚动


在 ionic 应用程序中用于滚动操作的元素称为ion-scroll

使用滚动

以下代码片段将创建可滚动容器并调整滚动模式。首先,我们将创建 HTML 元素并向其添加属性。我们将添加→ Direction =“xy”以允许滚动到每一侧。我们还将设置滚动元素的宽度和高度。

HTML 代码

<ion-scroll zooming = "true" direction = "xy" style = "width: 320px; height: 500px">
   <div class = "scroll-container"></div>
</ion-scroll>

接下来,我们将世界地图的图像添加到我们在ion-scroll内创建的div元素,并设置其宽度和高度。

CSS代码

.scroll-container {
   width: 2600px;
   height: 1000px;
   background: url('../img/world-map.png') no-repeat
}

当我们运行我们的应用程序时,我们可以向各个方向滚动地图。以下示例显示了地图的北美部分。

Ionic Javascript 滚动开始

我们可以将此地图滚动到我们想要的任何部分。让我们滚动它以显示亚洲。

Ionic Javascript 滚动结束

还有其他属性可以应用于ion-scroll。您可以在下表中查看它们。

滚动属性

属性 类型 细节
方向 细绳 滚动的可能方向。默认值为y
委托句柄 细绳 用于$ionicScrollDelegate的滚动识别。
锁定 布尔值 用于一次锁定一个方向的滚动。默认值为 true。
寻呼 布尔值 用于确定分页是否与滚动一起使用。
刷新时 表达 调用拉动刷新。
滚动 表达 滚动时调用。
滚动条-x 布尔值 是否应该显示水平滚动条。默认值为 true。
滚动条-y 细绳 是否应该显示垂直滚动条。默认值为 true。
缩放 布尔值 用于应用捏合缩放。
最小缩放 整数 最小缩放值。
最大缩放 整数 最大缩放值。
滚动条-x 布尔值 用于启用弹跳。iOS 上的默认值为 true,Android 上的默认值为 false。

无限滚动

无限滚动用于在滚动经过页面底部时触发某些Behave。以下示例展示了其工作原理。在我们的控制器中,我们创建了一个用于将项目添加到列表的函数。当滚动经过最后加载的元素的 10% 时,将添加这些项目。这将持续到我们加载了 30 个元素为止。每次加载完成时,on-infinite都会广播scroll.infiniteScrollComplete事件。

HTML 代码

<ion-list>
   <ion-item ng-repeat = "item in items" item = "item">Item {{ item.id }}</ion-item>
</ion-list>

<ion-infinite-scroll ng-if = "!noMoreItemsAvailable" on-infinite = "loadMore()" 
   distance = "10%"></ion-infinite-scroll>

控制器代码

.controller('MyCtrl', function($scope) {
   $scope.items = [];
   $scope.noMoreItemsAvailable = false;
   
   $scope.loadMore = function() {
      $scope.items.push({ id: $scope.items.length}); 

      if ($scope.items.length == 30) {
         $scope.noMoreItemsAvailable = true;
      }
   
      $scope.$broadcast('scroll.infiniteScrollComplete');
   };
})

其他属性也可以与ion-infinite-scroll一起使用。下表列出了其中一些。

滚动属性

属性 类型 细节
无限大 表达 滚动到底部时应该调用什么。
距离 细绳 触发无限表达所需的距底部的距离。
旋转器 细绳 加载时应显示什么微调器
立即检查 布尔值 加载屏幕时是否应该调用“on-infinite”

滚动委托

Ionic 提供了委托来完全控制滚动元素。可以通过向控制器注入$ionicScrollDelegate服务来使用它,然后使用它提供的方法。

以下示例显示了包含 20 个对象的可滚动列表。

HTML 代码

<div class = "list">
   <div class = "item">Item 1</div>
   <div class = "item">Item 2</div>
   <div class = "item">Item 3</div>
   <div class = "item">Item 4</div>
   <div class = "item">Item 5</div>
   <div class = "item">Item 6</div>
   <div class = "item">Item 7</div>
   <div class = "item">Item 8</div>
   <div class = "item">Item 9</div>
   <div class = "item">Item 10</div>
   <div class = "item">Item 11</div>
   <div class = "item">Item 12</div>
   <div class = "item">Item 13</div>
   <div class = "item">Item 14</div>
   <div class = "item">Item 15</div>
   <div class = "item">Item 16</div>
   <div class = "item">Item 17</div>
   <div class = "item">Item 18</div>
   <div class = "item">Item 19</div>
   <div class = "item">Item 20</div>
</div>

<button class = "button" ng-click = "scrollTop()">Scroll to Top!</button>

控制器代码

.controller('DashCtrl', function($scope, $ionicScrollDelegate) {

   $scope.scrollTop = function() {
      $ionicScrollDelegate.scrollTop();
   };
})   

上面的代码将产生以下屏幕 -

Ionic Javascript 滚动底部

当我们点击按钮时,滚动条将移动到顶部。

Ionic Javascript 滚动顶部

现在,我们将介绍所有$ionicScrollDelegate方法。

委托方法

方法 参数 类型 细节
滚动顶部(参数) 应该动画 布尔值 滚动应该是动画的。
滚动底部(参数) 应该动画 布尔值 滚动应该是动画的。
滚动到(参数1,参数2,参数3) 左、上、shouldAnimate 数字,数字,整数 前两个参数确定 x 轴和 y 轴偏移的值。
滚动(参数1,参数2,参数3) 左、上、shouldAnimate 数字,数字,整数 前两个参数确定 x 轴和 y 轴偏移的值。
ZoomTo(参数1,参数2,参数3,参数4) 水平、动画、originLeft、originTop 数字、布尔值、数字、数字 level用于确定缩放到的级别。originLeftoriginRight坐标应发生缩放的位置。
ZoomBy(参数1, 参数2, 参数3, 参数4) 因素、动画、originLeft、originTop 数字、布尔值、数字、数字 因子用于确定缩放的因子。originLeftoriginRight坐标应发生缩放的位置。
获取滚动位置() / / 返回具有两个数字作为属性的对象:leftright。这些数字分别表示用户从左侧和顶部滚动的距离。
锚点滚动(参数1) 应该动画 布尔值 它将滚动到与 window.loaction.hash 具有相同 id 的元素。如果该元素不存在,则会滚动到顶部。
冻结滚动(参数1) 应该冻结 布尔值 用于禁用特定滚动的滚动。
freezeAllScrolls(参数1) 应该冻结 布尔值 用于禁用应用程序中所有卷轴的滚动。
getScrollViews() / 目的 返回滚动视图对象。
$getByHandle(参数1) 处理 细绳 用于将方法连接到具有相同句柄的特定滚动视图。 $ionicScrollDelegate。$getByHandle('my-handle').scrollTop();