2017-02-19 27 views
0

У меня есть var в моем $scope, и мне нужно уменьшить его при прокрутке вверх и увеличении при прокрутке вниз. Как я могу это сделать? Должен ли я использовать свиток js? Есть ли способ не изобретать велосипед?Угловое изменение var на прокрутке

+1

Обеспечить jsfiddle/plunker или, по крайней мере, фрагмент кода. –

ответ

0

Ваш вопрос не ясен, но, если я правильно понимаю вы хотите увеличить/уменьшить счетчик на основе направления прокрутки.

, как вы можете к нему, нажав на «свитка» (JQuery) события, как:

angular.element($window).on('scroll', function(event) { 
    // Do something here. 
}); 

Лучше вы можете написать пользовательскую директиву, которая бы это и испускать пользовательское событие, а затем вы может слушать это событие в вашем контроллере и действовать на него.

Примечание. Вы также можете отменить событие прокрутки.

P.S. : Пожалуйста, всегда предоставляйте фрагмент кода или jsfiddle/codepen, чтобы другие могли лучше понять ваш вопрос.

angular.module('app', []) 
 
    .controller('MainController', function($rootScope, $scope) { 
 
    var changeBy = 5; 
 
    $scope.scrollCounter = 0; 
 

 
    // Tap into custom 'scrollHappened' event. 
 
    $rootScope.$on('scrollHappened', function(event, scrollUpHappened) { 
 

 
     // If the scroll direction is 'down'. 
 
     if (scrollUpHappened) { 
 
     $scope.scrollCounter += changeBy; 
 
     } else { // Scroll direction is 'up'. 
 
     $scope.scrollCounter -= changeBy; 
 
     } 
 
    }); 
 
    }) 
 
    .directive('scrollCounter', function($rootScope, $window) { 
 
    return { 
 
     restrict: 'A', 
 
     link: function() { 
 
     var lastScrollPos = 0; 
 

 
     // Add a scroll event on $window object. 
 
     angular.element($window).on('scroll', function(event) { 
 
     console.log(angular.element(event.target)) 
 
      var scrollPos = angular.element(event.target).scrollTop(); 
 

 
      // Emit custom 'scrollHappened' event. 
 
      $rootScope.$emit('scrollHappened', (scrollPos > lastScrollPos)); 
 

 
      // As all this is happening outside of the angular world 
 
      // wrap the update logic inside $apply, so that update will 
 
      // be visible to the angular. 
 
      $rootScope.$apply(function() { 
 
      lastScrollPos = scrollPos; 
 
      }); 
 
     }); 
 
     } 
 
    } 
 
    })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script> 
 

 
<div data-ng-app="app" data-ng-controller="MainController"> 
 

 
    <div scroll-counter="" style="height: 400px"> 
 
    <span>Current scroll counter = {{ scrollCounter }}</span> 
 
    <br/><br/> 
 
    <span>Current scroll counter = {{ scrollCounter }}</span> 
 
    <br/><br/> 
 
    <span>Current scroll counter = {{ scrollCounter }}</span> 
 
    <br/><br/> 
 
    <span>Current scroll counter = {{ scrollCounter }}</span> 
 
    <br/><br/> 
 
    <span>Current scroll counter = {{ scrollCounter }}</span> 
 
    <br/><br/> 
 
    <span>Current scroll counter = {{ scrollCounter }}</span> 
 
    <br/><br/> 
 
    </div> 
 

 
</div>

0

Используйте javascript window.scrollTo функцию.

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<style> 
 
body { 
 
    width: 5000px; 
 
    height: 5000px; 
 
} 
 
</style> 
 
</head> 
 
<body> 
 

 
<p>Click the button to scroll</p> 
 

 
<button onclick="scrollWin()">Click me to scroll</button><br><br> 
 

 
<script> 
 
function scrollWin() { 
 
    window.scrollTo(0, 1000); 
 
} 
 
</script> 
 

 
</body> 
 
</html>

+0

Извините, я не сказал, но мне нужно увеличить/уменьшить его на фиксированное значение. Например, если у меня есть '$ scope.var = 10' и' $ scope.changevalue = 5', тогда мне нужно иметь 15/5 в прокрутке вниз/вверх в качестве результата. – Cheephs

+0

, так что вы проголосовали за него ???? –

+0

нет, я не !!!! – Cheephs