Skip to main content
1-Visitor
September 22, 2021
Solved

question about $interval.cancel

  • September 22, 2021
  • 1 reply
  • 1987 views

Hi All,

I want to achieve such an effect through $interval: when I click button A, Call function GunTongstartRotate, the model starts to rotate continuously; when I click button B,Call function GunTongstopRotate, the model stops rotating. The following is the code I wrote.

$scope.GunTongRotate = function() {
		$scope.app.params.QMJrx = $scope.app.params.QMJrx-5;
	};

$scope.GunTongstartRotate = function() {
 //store the interval promise
 $scope.app.params.QMJrx=0;
		 intervalPromise = $interval($scope.GunTongRotate, 50, 0);
 
 
	};

$scope.GunTongstopRotate = function() {
 
 if(angular.isDefined(intervalPromise)){
 $interval.cancel(intervalPromise);
 $scope.app.params.QMJrx=0;
 }
 
	};

The problem is that when I click button A multiple times, the model will turn faster and faster, and clicking button B again will not stop the model from turning. How should I solve this problem?

Best answer by sebben

Hi,

you can  check if the model is already rotating like this:

var isRotating = 0;
$scope.GunTongRotate = function() {
 $scope.app.params.QMJrx = $scope.app.params.QMJrx-5;
};
$scope.GunTongstartRotate = function() {
 //store the interval promise
 if(isRotating==0){
 $scope.app.params.QMJrx=0;
 intervalPromise = $interval($scope.GunTongRotate, 50, 0);
 isRotating = 1;
 }
};
$scope.GunTongstopRotate = function() {
 if(angular.isDefined(intervalPromise)){
 isRotating = 0;
 $interval.cancel(intervalPromise);
 $scope.app.params.QMJrx=0;
 }
};

 

1 reply

sebben14-AlexandriteAnswer
14-Alexandrite
September 22, 2021

Hi,

you can  check if the model is already rotating like this:

var isRotating = 0;
$scope.GunTongRotate = function() {
 $scope.app.params.QMJrx = $scope.app.params.QMJrx-5;
};
$scope.GunTongstartRotate = function() {
 //store the interval promise
 if(isRotating==0){
 $scope.app.params.QMJrx=0;
 intervalPromise = $interval($scope.GunTongRotate, 50, 0);
 isRotating = 1;
 }
};
$scope.GunTongstopRotate = function() {
 if(angular.isDefined(intervalPromise)){
 isRotating = 0;
 $interval.cancel(intervalPromise);
 $scope.app.params.QMJrx=0;
 }
};

 

1-Visitor
September 22, 2021

Hi sebben,

Thank you for your reply! Your idea is very clever, but unfortunately, the problem still remains that when I click the start rotation button many times, the model still spins faster and faster, and clicking the Stop button doesn't work.

14-Alexandrite
September 22, 2021

That's odd, it works for me. Did you copy and paste the code or did you edit your code?