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