【问题标题】:AngularJS ScrollTop on Click Directive. How do I stop an inner click from triggering the outer directive click.AngularJS ScrollTop on Click 指令。如何阻止内部点击触发外部指令点击。
【发布时间】:2014-02-16 08:29:29
【问题描述】:

我构建了一个指令,用于在延迟后将部分滚动到视图中,以补偿部分动画打开,然后添加功能以在用户尝试手动滚动屏幕时停止滚动。

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);
      });
   }
  }
});

我的问题是我不想让它触发 scrollTop 动画的部分中有一个按钮。任何想法是如何阻止它?

【问题讨论】:

  • 在处理按钮的点击事件时尝试return false;
  • 我不确定我完全明白你的意思。如果你的字面意思是 ng-click="return = false;"这行不通。

标签: jquery angularjs angularjs-directive scrolltop


【解决方案1】:

试试:

$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

【讨论】:

  • 我确实希望在该部分中有几个其他 div 可点击。只是按钮我不想触发而已……
  • @user3161466:然后只需修改您的代码以检查 event.target 是否是按钮
  • @user3161466:我又添加了 1 个解决方案
  • 似乎是一个很好的解决方法,也许我实施错了。var $button = $(".cmpButton"); if (event.target != $button){
  • @user3161466:如果您不想完全停止事件传播而只需要绕过 specific case 中的事件,第一个解决方案会更好。
猜你喜欢
  • 2013-04-15
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
相关资源
最近更新 更多