Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让Jquery Scroll插件与AngularJS一起工作-不闪烁_Javascript_Jquery_Angularjs_Scrollto - Fatal编程技术网

Javascript 如何让Jquery Scroll插件与AngularJS一起工作-不闪烁

Javascript 如何让Jquery Scroll插件与AngularJS一起工作-不闪烁,javascript,jquery,angularjs,scrollto,Javascript,Jquery,Angularjs,Scrollto,我正在尝试将Jquery的scrollTo插件与AngularJS结合起来。我想这样做的原因是,如果使用相应的URL,我想自动滚动到网站的特定部分。到目前为止,这是可行的,但并不完美。在动画开始之前,如果单击链接,会出现短暂的闪烁 我认为这个问题可以通过以下方法解决: event.preventDefault(); 但我不知道如何将preventDefault函数的调用与AngularJS代码结合起来。。。我是AngularJS的新手,所以也许有一个简单的解决方案,我只是还不知道。我尝试了几种

我正在尝试将Jquery的scrollTo插件与AngularJS结合起来。我想这样做的原因是,如果使用相应的URL,我想自动滚动到网站的特定部分。到目前为止,这是可行的,但并不完美。在动画开始之前,如果单击链接,会出现短暂的闪烁

我认为这个问题可以通过以下方法解决:

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个小时的锁定期结束后,为我自己的问题写一个答案。