2015-01-09 12 views
6

Przekształcam wtyczkę jQuery w dyrektywę kątową, ale nadal nie działa poprawnie lub: nie działa wcale.Przekształcanie jQuery w kątowy, stały pasek boczny nie działa (?)

This is the behavior I want to achieve

Here is a jsfiddle also

Pamiętaj, że wszystko, co chcę osiągnąć z tym, jest zachowanie na lewym pasku bocznym, gdzie mówi się „lepkie” wszędzie.

Zrobiłem to z jQuery (jestem nowy w Angular) i potrzebuję go do pracy z Angular. Proszę iść i zobaczyć Plunkr Example, to zachowanie, którego chcę. Z góry dziękuję, jeśli niektórzy z was poświęcą mi czas, aby mi pomóc.

spojrzeć na kod 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 
      }); 
     }; 
    }); 
}); 

i tu jest moje kątowa dyrektywa:

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

moja dyrektywa jest dobry w momencie, gdy nie przewijania the console.log zjawia.

+1

Moje oczekiwanie było jednym z tych linków, które miały być działającą wersją jQuery, a jednym z nich był twój próbowany (ale nie działający) kod kątowy. Wygląda na to, że oba są tym samym łączem z kodami kątowymi i nie jest całkiem jasne, co ma robić. Prawdopodobnie uzyskasz lepszą/więcej pomoc, jeśli jest jasne, czego potrzebujesz (a jsfiddle/plunkr z działającego kodu jQuery prawdopodobnie będzie z tym dużo trudniejszy). – Jack

+0

@Jack Robiłem to w ten sposób, ale mówisz, ale nie wiem, dlaczego ostatnia zmiana, którą zrobiłem, nigdy nie została zapisana. [spójrz na to, zrobiłem to jeszcze raz] (http://plnkr.co/edit/xRXOqzaXxg6hVXDhOfV2?p=preview) tam jest funkcja jQuery, a poniżej na notatki w tym samym pliku script.js zobaczysz kod dla Angular Dyrektywa. proszę zauważyć, że zachowanie, które chcę osiągnąć, to zachowanie na lewym pasku bocznym, gdzie mówi się "STICKY" wszędzie. – TheUnnamed

+1

@MarkRenton Kiedy mówisz: "potrzebujesz mieć to działa z Angular" masz na myśli to, że potrzebujesz go działającego bez jQuery? Jeśli nadal ładuje się jQuery, możesz użyć go równolegle. Więc po prostu wstaw ten sam kod pomiędzy instrukcją ready jQuery w twoim http://jsbin.com/puhapasaka/3/edit?js – hitautodestruct

Odpowiedz

1

Mam już działa moich przyjaciół. To jest dyrektywa działająca prawidłowo

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 
      }); 
      }; 
     }); 
     }); 
    } 
    }; 
}); 
Powiązane problemy