Jquery AngularJS ScrollTop on Click指令。如何阻止内部单击触发外部指令单击。

Jquery AngularJS ScrollTop on Click指令。如何阻止内部单击触发外部指令单击。,jquery,angularjs,angularjs-directive,scrolltop,Jquery,Angularjs,Angularjs Directive,Scrolltop,我构建了一个指令,在延迟后将一个部分滚动到视图中,这是为了补偿打开的部分动画,然后添加了功能,如果用户试图手动滚动屏幕,则停止滚动 angular.module("scrollOnClick", []) .directive('scrollOnClick', function() { return { restrict: 'A', link: function(scope, $elm, $window) { $elm.on('cli

我构建了一个指令,在延迟后将一个部分滚动到视图中,这是为了补偿打开的部分动画,然后添加了功能,如果用户试图手动滚动屏幕,则停止滚动

angular.module("scrollOnClick", [])
.directive('scrollOnClick', function() {
    return {
        restrict: 'A',
        link: function(scope, $elm, $window) {
            $elm.on('click', function() {
                var $viewport = $('html, body');

                $viewport.bind("scroll mousedown DOMMouseScroll mousewheel keydown", function(){
                     $viewport.stop()
                });     

        setTimeout(function () {   
            var winH = window.innerHeight
            var oSet = (winH / 2) - 222
            $viewport.animate({scrollTop: $elm.offset().top - oSet}, "easing", function(){
                $viewport.unbind("scroll mousedown DOMMouseScroll mousewheel keydown");
            }); return false;
        }, 201);
      });
   }
  }
});
我的问题是我有一个按钮里面的部分,我不希望它触发一个滚动动画。你知道怎么阻止它吗

试试看:

$elm.on('click', function(event) {
   if (event.target == this){ //run code only when the clicked target is the current element.
    //your code

   }
}
另一个解决方案是添加以下代码:

$elm.find("button").on('click',function(event){
   return false;//prevent default and stop propagation.
   //or event.stopPropagation();
});

//your code 
$elm.on('click', function() {

要使用带有选择器的
.find
,您可能需要包括jQuery

try
returnfalse当处理按钮的点击事件时,我不确定我是否确切知道您的意思。如果你的字面意思是ng click=“return=false;”,那是行不通的。我在这一部分还有几个div,我确实希望可以单击。这只是我不想触发的按钮…@user3161466:然后修改你的代码以检查
事件。target
是否是button@user3161466:我又添加了1个解决方案,看起来像是一个很好的解决方案,也许我实现错了。var$button=$(“.cmpButton”);如果(event.target!=$button){@user3161466:如果您不想完全停止事件传播,只需要在该
特定情况下绕过事件,则第一种解决方案更好。