1. 程式人生 > >ionic 監聽頁面滾動,點選停止滾動

ionic 監聽頁面滾動,點選停止滾動

原文出處:https://www.cnblogs.com/lee-xiumei/p/7449021.html

類似今日頭條,頁面上有很多card,點選每個card跳轉該card的詳情頁面。這裡有一個問題,當我滾動頁面時,會先後觸發touchstart、touchmove、touchend,但是當touchend後,頁面仍會因為慣性而繼續滾動。這個時候,我想點選頁面停止滾動,而不是跳轉到某個card的詳情頁面。

原理很簡單:設定一個狀態,初始值為true,頁面滾動時變為false,頁面停止滾動,則恢復為true,只有這個值為true時,才能觸發跳轉事件,即進入card詳情頁面。

這裡需要用到ionic的一個屬性——ionic.scroll.isScrolling。關於這個屬性,可以使用on-scroll來測試:

html: ion-content scroll="true" on-scroll="onScroll()"></ion-content>

js: $scope.onScroll = function() {

  console.log(ionic.scroll.isScrolling);  //可以看到,即使是手指離開螢幕,頁面在慣性滾動時,值仍為true

};

 

程式碼:

$scope.canGoDetailCard = true;  //一開始預設能跳轉進card詳情頁;

 

//監聽touch事件

window.addEventListener('touchstart', function() {

  if (ionic.scroll.isScrolling) {  //判斷頁面是否正在滾動

    $scope.canGoDetailCard = false;  // 如果正在滾動,則點選跳轉card詳情頁失效

    ionic.scroll.isScrolling = false;  //同時停止滾動;

  } else {

    $scope.canGoDetailCard = true; //沒有滾動時,跳轉進入card詳情頁

  }

});

 

$scope.goDetailCard = function() {

  if (!$scope.canGoDetailCard) return; // 如果$scope.canGoDetailCard = false, 則返回

  $state.go('card');  //進入card詳情頁

};