javascript - 停止动量滚动 ontouchstart ngTouch AngularJS

标签 javascript ios angularjs cordova

我有一个带有 -webkit-overflow-scrolling:touch 的 div,里面有一个项目列表。

我正在使用 Angular ngTouch,它将我所有的 ng-clicks 处理为 phonegap 应用程序上的点击事件。

但是,当我滚动我的列表时,ios 原生动量滚动开始,我希望也能够通过点击停止动量滚动,就像您在原生 ios 应用程序上所做的那样。

发生的是另一个点击事件被触发。所以我的问题是:

如何在不触发另一个实际点击事件的情况下通过点击停止动量( native )滚动...

希望我的问题很清楚...

最佳答案

最近我在我的 angular-ionic-typeScript 项目中遇到了同样的问题。 这是我如何解决它的:

我创建了一个自定义指令:

angular.module('directive.scrolldetector', [])
    .directive('scrollDetector', function ($window) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            scope.$on('$destroy', () => {
                element.off("scroll");
            });

            element.on('scroll', function () {
                scope.$evalAsync(function () {
                    scope.$eval(attrs.scrollDetector);
                });
            });
        }
    }
});

现在您可以像这样检测 onScrollEvent:

<ion-content scroll-detector="onScroll()">
...
</ion-content>

当您滚动时,onScroll() 函数将持续触发。在这个函数中你应该保存一个时间戳:

onScroll = () => {
    lastScrollTimestamp = (new Date()).getTime();
}

最后一步是检查 ion-context 中的每个 ng-click 是否有我们的 lastScrollTimestamp:

onClick = () => {
     if( lastScrollTimestamp + 300 > (new Date()).getTime()) { //at least 300ms there was no scrolling
          //do your stuff
     }
}

关于javascript - 停止动量滚动 ontouchstart ngTouch AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24242926/

相关文章:

javascript - react 导航以控制下方面板中的内容

ios - 如何在没有 Google Drive 的情况下直接从 Google Drive 下载大文件无法扫描此文件是否有病毒消息

javascript - 当数组项具有相应的数组值时,如何合并数组项?

javascript - 使用 <a> 标签将隐藏的 div 作为 Popup 加载

ios - 这些日期字符串的格式化程序字符串是什么?

ios - 什么决定了 App Store 中应用程序的大小?

javascript - 给定一个时区字符串,我如何在 JS 中将日期对象设置为该 TZ

javascript - 具有特定范围的angularjs部分模板

javascript - 如何使用 angularjs 查找嵌套的 json 对象?

javascript - 如何使数据柱始终出现在经典的 Google 折线图上