2014-09-04 12 views
5

Mam dyrektywy jak poniżej:kątowe scrollstart i scrollstop nie ogień w dyrektywie, przewijać robi

.directive('scrollPosition', function($window) { 
    return { 
    scope: { 
     scroll: '=scrollPosition' 
    }, 
    link: function(scope, element, attrs) { 
     var windowEl = angular.element($window); 

     var scrollhandler = function() { 
     console.log("scrolling") 
     } 

     var starthandler = function() { 
     console.log("scrolling start") 
     } 

     var stophandler = function() { 
     console.log("scrolling end") 
     } 

     windowEl.on('scroll', scope.$apply.bind(scope, scrollhandler)); 
     windowEl.on('scrollstart', scope.$apply.bind(scope, starthandler)); 
     windowEl.on('scrollstop', scope.$apply.bind(scope, stophandler)); 
    } 
    }; 
}); 

Z HTML:

<div id="imageHolder" style="opacity: {{scroll}}" scroll-position="scroll"> 

Jedynym wydarzeniem, które wystrzeliwuje jest 'scroll' zdarzenie. Potrzebuję dwóch pozostałych zdarzeń, a nie tego, ponieważ pracuję na urządzeniach mobilnych, a zdarzenia przewijania nie uruchamiają się, dopóki przewijanie nie zatrzyma się na urządzeniu mobilnym (zobacz tutaj http://andyshora.com/mobile-scroll-event-problems.html)

Potrzebuję zrobić coś niestandardowego na początku i na końcu.

Każdy pomysł, co robię źle?

+0

Czy możesz mi pomóc zrozumieć, gdzie jesteśmy świadkami „scrollstart” i " zdarzenia "przewijania"? Nigdy o nich nie słyszałem. Czy są to wydarzenia jQuery? – Antiga

+0

Tak, na dokumentach jqueryLite w kanciastych jest napisane "włączone". Nie jestem pewien, czy te wydarzenia są dostępne, rozejrzałem się i nie znalazłem informacji (stąd jestem tutaj). Zakładam, że technicznie musi być w Angularu sposób, żeby je wykryć. –

+5

To jest dosłownie jedyna rzecz, którą mogę znaleźć w dowolnym miejscu zdarzenia "scrollstart": http://api.jquerymobile.com/scrollstart/ To zdarzenie dotyczy konkretnie jQuery Mobile (całkowicie innej biblioteki). Wydaje się, że nie jest on zawarty w jQuery (lub, przez rozszerzenie, jqLite, który jest wbudowany w kąt). – Antiga

Odpowiedz

1

Jeśli chcesz użyć pojęcia bengro z użytkownikiem za pomocą zegara, aby określić, kiedy zwój zakończyła mógłby zrobić coś takiego:

angular.module('App').directive('scroll',function(){ 
var timer = null; 
return{ 
    scope:{ 
    }, 
    link: function (scope, element) { 

var stophandler = function() { 
    console.log("scrolling end") 
    } 

    var starthandler = function() { 
    console.log("scrolling start") 
    } 

    angular.element(element).bind('scroll', function() { 

     scope.$apply.bind(scope, starthandler) 

     clearTimeout(timer); 

     timer = setTimeout(function() { 
      scope.$apply.bind(scope, stophandler) 
     }, 1500); 

    }); 
    } 
}; 
});