停止动力滚动ontouchstart ngTouch AngularJS

时间:2014-06-16 11:43:10

标签: javascript ios angularjs cordova

我有一个带-webkit-overflow-scrolling的div:触摸其中的项目列表。

我正在使用Angular ngTouch,它可以处理所有ng-clicks作为phonegap App上的点击事件。

然而,当我滚动我的列表,并且ios本机动量滚动开始时,我希望能够通过点击停止动态滚动,就像你在本机ios应用程序上做的那样。

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

如何使用水龙头停止动量(本机)滚动,而不会触发另一个实际的点击事件......

希望我的问题很明确......

1 个答案:

答案 0 :(得分:1)

最近我在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();
}

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

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