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 Scroll Start

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

Ionic Javascript Scroll End

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

滚动属性

属性 类型 详情
direction字符串 可能的滚动方向。默认值为y
delegate-handle字符串 用于使用$ionicScrollDelegate识别滚动。
locking布尔值 用于一次锁定一个方向的滚动。默认值为true。
paging布尔值 用于确定是否将分页与滚动一起使用。
on-refresh表达式 下拉刷新时调用。
on-scroll表达式 滚动时调用。
scrollbar-x布尔值 是否显示水平滚动条。默认值为true。
scrollbar-y字符串 是否显示垂直滚动条。默认值为true。
zooming布尔值 用于应用捏合缩放。
min-zoom整数 最小缩放值。
max-zoom整数 最大缩放值。
scrollbar-x布尔值 用于启用回弹。iOS上的默认值为true,Android上的默认值为false。

无限滚动

无限滚动用于在滚动超过页面底部时触发某些行为。以下示例显示了其工作原理。在我们的控制器中,我们创建了一个函数来向列表添加项目。当滚动超过加载的最后一个元素的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表达式 滚动到底部时应调用的内容。
distance字符串 触发on-infinite表达式所需的底部距离。
spinner字符串 加载时应显示哪个加载指示器
immediate-check布尔值 屏幕加载时是否应调用“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 Scroll Bottom

点击按钮时,滚动将移动到顶部。

Ionic Javascript Scroll Top

现在,我们将遍历所有$ionicScrollDelegate方法。

委托方法

方法 参数 类型 详情
scrollTop(参数)shouldAnimate 布尔值 滚动是否应具有动画效果。
scrollBottom(参数)shouldAnimate 布尔值 滚动是否应具有动画效果。
scrollTo(参数1, 参数2, 参数3)left, top, shouldAnimate 数字, 数字, 整数 前两个参数确定x和y轴偏移的值。
scrollBy(参数1, 参数2, 参数3)left, top, shouldAnimate 数字, 数字, 整数 前两个参数确定x和y轴偏移的值。
zoomTo(参数1, 参数2, 参数3, 参数4)level, animate, originLeft, originTop 数字, 布尔值, 数字, 数字 level用于确定要缩放到的级别。originLeftoriginRight是缩放应该发生的位置坐标。
zoomBy(参数1, 参数2, 参数3, 参数4)factor, animate, originLeft, originTop 数字, 布尔值, 数字, 数字 factor用于确定要缩放的倍数。originLeftoriginRight是缩放应该发生的位置坐标。
getScrollPosition()/ / 返回一个具有两个数字属性的对象:leftright。这些数字分别表示用户从左侧和顶部滚动的距离。
anchorScroll(参数1)shouldAnimate 布尔值 它将滚动到与window.loaction.hash相同的id的元素。如果此元素不存在,它将滚动到顶部。
freezeScroll(参数1)shouldFreeze 布尔值 用于禁用特定滚动的滚动。
freezeAllScrolls(参数1)shouldFreeze 布尔值 用于禁用应用程序中所有滚动的滚动。
getScrollViews()/ 对象 返回scrollView对象。
$getByHandle(参数1)handle 字符串 用于将方法连接到具有相同句柄的特定滚动视图。$ionicScrollDelegate. $getByHandle('my-handle').scrollTop();
广告