Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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转换为角度固定的边栏不起作用(?)_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 将jQuery转换为角度固定的边栏不起作用(?)

Javascript 将jQuery转换为角度固定的边栏不起作用(?),javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我正在将jQuery插件转换为Angular指令,但仍然无法正常工作,或者:根本无法工作 请记住,我想要实现的只是左侧边栏上的行为,其中到处都写着“粘性” 我是用jQuery实现的(我是Angular的新手),我需要让它使用Angular。请去看看,那种行为,就是我想要的。如果你们中的一些人花时间帮助我,请提前感谢 看看jQuery代码: $(function() { var offset = $("#sidebar").offset(); var topPadding =

我正在将jQuery插件转换为Angular指令,但仍然无法正常工作,或者:根本无法工作

请记住,我想要实现的只是左侧边栏上的行为,其中到处都写着“粘性”

我是用jQuery实现的(我是Angular的新手),我需要让它使用Angular。请去看看,那种行为,就是我想要的。如果你们中的一些人花时间帮助我,请提前感谢

看看jQuery代码:

$(function() {
    var offset = $("#sidebar").offset();
    var topPadding = 85;
    $(window).scroll(function() {
        if ($(window).scrollTop() > offset.top) {
            $("#sidebar").stop().animate({
                marginTop: $(window).scrollTop() - offset.top + topPadding
            });
        } else {
            $("#sidebar").stop().animate({
                marginTop: 50
            });
        };
    });
});
这是我的角度指示:

angular.module('capilleira.clickAndGambleWebApp.directives', [])
  .directive('sticky', function ($window) {
    return {
      restrict: 'A',
      controller: ($scope)
      link: function (scope, element, attrs) {
        var raw = element[0],
            offset = element.offset(),
            topPadding = 85;

        angular.element($window).bind('scroll', function () {
          console.log('SCROOOOOOOOOOOOOLLLL');
          if ($window.scrollTop > offset.top) {
            raw.stop().animate({
              marginTop: $window.scrollTop() - offset.top + topPadding
            });
          }
        });
      }
    }
  });

我的指令很好,一旦你滚动,console.log就会显示出来。

我的朋友们已经在使用它了。这是正常工作的指令

angular.module('capilleira.clickAndGambleWebApp.directives', [])
.directive('sticky', function($document) {
  return {
    restrict: 'A',
    link: function(scope, element, attrs) {
      angular.element(document).ready(function() {
        var offset = element.offset(),
            topPadding = 85;
        $document.scroll(function() {
          if ($document.scrollTop() > offset.top) {
            element.stop().animate({
              marginTop: $document.scrollTop() - offset.top + topPadding
            });
          } else {
            element.stop().animate({
              marginTop: 0
            });
          };
        });
      });
    }
  };
});

我的期望是,其中一个链接将是工作的jQuery版本,另一个链接将是您尝试的(但不工作的)angular代码。它们似乎都与角度代码有着相同的联系,而且还不完全清楚它应该做什么。如果你清楚自己需要什么,你可能会得到更好/更多的帮助(而jQuery代码的jsfiddle/plunkr可能会对你有很大帮助)。@Jack我按照你说的方式做了,但我不知道为什么我做的最后一次更改从未保存。在同一个script.js文件中的notes上有jQuery函数和下面的函数,您将看到Angular指令的代码。请注意,我想要实现的行为是左侧边栏上的行为,其中到处都是“STICKY”。@MarkRenton当你说“需要让它与Angular一起工作”时,你的意思是需要让它在没有jQuery的情况下工作?如果仍在加载jQuery,则可以将其与angular一起使用。因此,只需在指令raw中的jqueryready语句之间插入相同的代码,即原生Javascript dom元素,我相信stop()和animate()需要jQuery包装的元素才能工作。此外,if子句if($window.scrollTop>offset.top)=>if($window.scrollTop()>offset.top)中缺少()