2014-09-04 7 views
5

ich eine Richtlinie haben, wie unten:Winkel scrollstart und scrollstop nicht Feuer in der Richtlinie, rolle tut

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

Mit HTML:

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

Das einzige Ereignis, das ausgelöst wird ist die 'Scroll' Veranstaltung. Ich brauche die anderen beiden Ereignisse und nicht das, da ich gerade an mobilen und Scroll-Events fire, bis das Scrollen auf Mobile aufhört (siehe hier http://andyshora.com/mobile-scroll-event-problems.html)

Ich muss am Anfang und am Ende etwas Brauchbares machen.

Irgendeine Idee, was ich falsch mache?

+0

Können Sie mir helfen, zu verstehen, wo Sie eine „scrollstart“ sehen und " scrollstop "Ereignisse? Ich habe noch nie davon gehört. Sind sie jQuery-Ereignisse? – Antiga

+0

Ja, auf der jqueryLite Docs in eckigen es steht "on" steht zur Verfügung. Ich bin mir nicht sicher, ob diese Ereignisse verfügbar sind, ich habe mich umgesehen und keine Informationen gefunden (daher bin ich hier). Ich gehe davon aus, dass es in Angular technisch einen Weg geben muss, diese zu erkennen. –

+5

Dies ist buchstäblich das einzige, was ich bei einem "scrollstart" -Ereignis irgendwo finden kann: http://api.jquerymobile.com/scrollstart/ Dieses Ereignis ist speziell in jQuery Mobile (eine völlig andere Bibliothek). Es scheint nicht in jQuery enthalten zu sein (oder, durch Erweiterung, jqLite, das in eckig eingebaut ist). – Antiga

Antwort

1

Wenn Sie bengro die Idee der Verwendung eines Timers, um zu bestimmen, wenn die Scroll Sie etwas tun zu Ende ist zu verwenden:

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

    }); 
    } 
}; 
}); 
Verwandte Themen