2015-01-09 9 views
6

Sto convertendo un plug-in jQuery in una direttiva angolare, ma ancora non funziona correttamente o: non funziona affatto.Girare jQuery in Angular, barra laterale fissa non funziona (?)

This is the behavior I want to achieve

Here is a jsfiddle also

Ricordate che tutto quello che voglio ottenere con questo, è il comportamento nella barra laterale sinistra dove dice 'appiccicoso' ovunque.

L'ho fatto con jQuery (sono nuovo di Angular) e ho bisogno di farlo funzionare con Angular. Per favore, vai a vedere lo Plunkr Example, quel comportamento è quello che voglio. Grazie in anticipo se qualcuno di voi si prende il tempo per aiutarmi.

un'occhiata al codice 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 
      }); 
     }; 
    }); 
}); 

ed ecco la mia direttiva angolare:

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

mia direttiva è bravo a tal punto che una volta che si fa scorrere, the console.log presenta.

+1

La mia aspettativa era che uno di quei collegamenti sarebbe stata la versione funzionante di jQuery e uno sarebbe stato il vostro (ma non funzionante) codice angolare tentato. Sembrano entrambi lo stesso collegamento con il codice angolare e non è del tutto chiaro cosa si suppone stia facendo. Probabilmente otterrai un aiuto migliore/più se è chiaro di cosa hai bisogno (e un jsfiddle/plunkr del codice jQuery funzionante probabilmente andrà molto lontano). – Jack

+0

@Jack L'ho fatto in questo modo, ma non so perché l'ultimo cambiamento che ho fatto non è mai stato salvato. [guarda questo, l'ho fatto di nuovo] (http://plnkr.co/edit/xRXOqzaXxg6hVXDhOfV2?p=preview) c'è la funzione jQuery e in basso nelle note nello stesso file script.js vedrai il codice per Angular Direttiva. per favore nota che il comportamento che voglio raggiungere è quello nella barra laterale di sinistra dove dice 'STICKY'everywhere. – TheUnnamed

+1

@MarkRenton Quando dici: "è necessario che funzioni con Angular", vuoi dire che devi averlo a funzionare senza jQuery? Se jQuery è ancora in fase di caricamento, puoi utilizzarlo insieme a quello angolare. Quindi metti lo stesso codice che hai tra l'istruzione jQuery ready nella tua direttiva http://jsbin.com/puhapasaka/3/edit?js – hitautodestruct

risposta

1

Ho già in funzione i miei amici. Questa è la direttiva che funziona correttamente

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