Mise à jour
Mise à jour de la base de données, veuillez patienter...
Site original : Sam & Max: Python, Django, Git et du cul
Petit snippet que j’utilise dans mes apps angular. Ça permet de définir un comportement quand l’utilisateur scrolle au-dessus d’un élément. Typiquement, augmenter la valeur d’un champ, faire défiler un carousel, etc. Il faut, bien entendu, éviter que la page scrolle elle-même.
app.directive('wheelable', function() { "use strict"; /* On définit sur quels attributs on va mettre les callbacks */ var directive = { scope: { 'onWheelUp': '&onwheelup', 'onWheelDown': '&onwheeldown' } }; /* On limite la directive aux attributs */ directive.restrict = 'A'; /* Le code qu'active la directive quand on la pose sur l'élément */ directive.link = function($scope, element, attributes) { /* On attache un callback à tous les événements de scrolling */ element.bind('mousewheel wheel', function(e) { /* On vérifie si l'utilisateur scroll up ou down */ if (e.originalEvent) { e = e.originalEvent; } var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY; var isScrollingUp = (e.detail || delta > 0); /* On appelle le bon callback utilisateur */ if (isScrollingUp){ $scope.$apply($scope.onWheelUp()); } else { $scope.$apply($scope.onWheelDown()); } /* On évite que la page scrolle */ e.preventDefault(); }); }; return directive; });
Comme pour toutes les directives qui impliquent des callbacks, il faut définir des fonctions et les attacher à votre scope dans un controleur (ou un service attaché au controleur) :
app.controller('FooCtrl', function($scope) { "use strict"; $scope.votreCallBackPourQuandCaScrollDown = function(){ // faire un truc par exemple moi je l'utilise pour changer // la valeur de l'élément. }; $scope.votreCallBackPourQuandCaScrollDown = function(){ // faire un autre truc }; });
La directive s’utilise en mettant l’attribut wheelable
sur l’élément qu’on veut rendre scrollable. Ensuite on déclare dans les attributs onwheeldown
et onwheelup
le code à exécuter, et zou :
<div ng-controller="FooCtrl"> ... <input type="text" wheelable onwheeldown="votreCallBackPourQuandCaScrollDown()" onwheelup="votreCallBackPourQuandCaScrollUp()" > ... </div>