Javascript 如何让Jquery Scroll插件与AngularJS一起工作-不闪烁
我正在尝试将Jquery的scrollTo插件与AngularJS结合起来。我想这样做的原因是,如果使用相应的URL,我想自动滚动到网站的特定部分。到目前为止,这是可行的,但并不完美。在动画开始之前,如果单击链接,会出现短暂的闪烁 我认为这个问题可以通过以下方法解决:Javascript 如何让Jquery Scroll插件与AngularJS一起工作-不闪烁,javascript,jquery,angularjs,scrollto,Javascript,Jquery,Angularjs,Scrollto,我正在尝试将Jquery的scrollTo插件与AngularJS结合起来。我想这样做的原因是,如果使用相应的URL,我想自动滚动到网站的特定部分。到目前为止,这是可行的,但并不完美。在动画开始之前,如果单击链接,会出现短暂的闪烁 我认为这个问题可以通过以下方法解决: event.preventDefault(); 但我不知道如何将preventDefault函数的调用与AngularJS代码结合起来。。。我是AngularJS的新手,所以也许有一个简单的解决方案,我只是还不知道。我尝试了几种
event.preventDefault();
但我不知道如何将preventDefault函数的调用与AngularJS代码结合起来。。。我是AngularJS的新手,所以也许有一个简单的解决方案,我只是还不知道。我尝试了几种在网上找到的解决方案,但没有成功
您可以在此处找到当前解决方案的摘要:
它无法运行,因为我无法包含缓和插件
提前感谢ngClick的整个来源非常简单 实际上:
ng.directive('ngClick',['$parse',function($parse){
return function(scope, element, attr) {
var fn = $parse(attr['ngClick']);
element.on('click', function(event) {
scope.$apply(function() {
fn(scope, {$event:event});
});
});
};
}]);
因此,您可以非常轻松地创建自己的:
yourModule.directive('superClick',['$parse',function($parse){
return function(scope, element, attr) {
var fn = $parse(attr['superClick']);
element.on('click', function(event) {
event.preventDefault(); // Magic stuff
scope.$apply(function() {
fn(scope, {$event:event});
});
});
};
}]);
看看这条类似的线。 我也遇到过类似的挑战。我最终使用search属性来进行滚动-这样我可以直接从URL访问目标元素。最后,我在rootScope上使用了一个手表来更改$location.search以触发滚动 闪烁是由页面重新加载引起的-要禁用“闪烁”,请在路由中设置
reloadOnSearch:false
下面是滚动的代码:
.run(function($location, $rootScope) {
$rootScope.$on('$viewContentLoaded', function() {
$rootScope.$watch(function() { return $location.search() }, function(search) {
var scrollPos = 0
if (search.hasOwnProperty('scroll')) {
var $target = $('#' + search.scroll);
var scrollPos = $target.offset().top;
}
$("body,html").animate({scrollTop: scrollPos}, "slow");
});
});
})
现在,您可以使用干净的锚定标记,而无需以下指令:
请在演示环境中提供一个示例,例如JSFIDLE。必须剖析一个实时站点的代码是不理想的,这意味着你得到的答案会更少(如果有的话)。好的,谢谢你的提示。我将使用JSFIDLE。我自己找到了一个解决方案:谢谢你的回答。我把这个解决方案用得很好。我认为这是相似的,但在我的情况下不起作用……然后是关于event.preventDefault()的原始假设代码>作为解决方案是错误的,我想是的,你是对的。关于event.preventDefault()的假设;这是错误的。解决方案如下所示:。我会在8个小时的锁定期结束后,为我自己的问题写一个答案。