3

У меня есть этот код для слайдера изображений и следующего преда и автоматического изменением Функции изображения

scope.next = function() { 
    scope.currentIndex < scope.images.length - 1 ? scope.currentIndex++ : scope.currentIndex = 0; 
}; 

scope.prev = function() { 
    scope.currentIndex > 0 ? scope.currentIndex-- : scope.currentIndex = scope.images.length - 1; 
}; 

scope.$watch('currentIndex', function() { 
    scope.images.forEach(function (image) { 
    image.visible = false; 
    }); 

    scope.images[scope.currentIndex].visible = true; 
}); 

var timer; 
var sliderFunc = function() { 
    timer = $timeout(function() { 
     scope.next(); 
     timer = $timeout(sliderFunc, 5000); 
    }, 5000); 
}; 

sliderFunc(); 

scope.$on('$destroy', function() { 
    $timeout.cancel(timer); 
}); 

и в шаблоне слайдера У меня есть стрелки ссылаются на следующую и предыдущую функцию

<div class="arrows"> 
    <a href="#" ng-click="prev()"> 
     <img src="tasavir/omgh/left-arrow.png" /> 
    </a> 
    <a href="#" ng-click="next()"> 
     <img src="tasavir/omgh/right-arrow.png" /> 
    </a> 
    </div> 

Я просто хочу добавить прозрачную функцию $ timeout, когда пользователь нажимает на следующую или предыдущую бит и каждый раз, когда пользователь нажимает на следующую или предыдущую дату, таймер был ясен и менял изображение через 5 секунд позже.

это полный документ о image slider

Я создаю JSFiddle для этого please look at this

+2

Почему вы используете тайм-аут в тайм-аут? Может быть, вы используете $ interval? –

+0

, пожалуйста, сделайте это в JSFiddle https://jsfiddle.net/hemedani/8cLw6wch/15/ –

ответ

1

Привет @Roman и @Pankaj баки для огромной порции ... Fix с этим кодом:

 scope.next = function() {     
      $interval.cancel(timer); 
      scope.changeImage(); // just add this line 
      timer = $interval(function() { 
      scope.changeImage(); 
      }, 5000);     
    }; 

в this версии @Roman отредактирован.

The Final version

Tanx парень ...

2

Вы могли бы сделать, установив тайм-аут от $scope.next функции путем проверки флага.

Markup

<div class="arrows"> 
    <a href="#" ng-click="prev()"> 
     <img src="tasavir/omgh/left-arrow.png" /> 
    </a> 
    <a href="#" ng-click="next(true)"> 
     <img src="tasavir/omgh/right-arrow.png" /> 
    </a> 
</div> 

Код

var timer; 
var sliderFunc = function() { 
    timer = $timeout(function() { 
     scope.next(false); 
    }, 5000); 
}; 

scope.next = function(setTimeoutToNext){ 
    scope.currentIndex < scope.images.length - 1 ? scope.currentIndex++ : scope.currentIndex = 0; 
    if(setTimeoutToNext) 
     $timeout.cancel(timer); //here it will clear the timeout 
} 

Working Fiddle

+0

Привет, к сожалению, заметили проблему, я создал JSFiddle для этого, пожалуйста, взгляните на это и зафиксируйте в этом tanx https: // jsfiddle.net/hemedani/8cLw6wch/14/ –

+0

@SydAmir посмотреть на edit..Now it fixed Я написал другую строку вместо '$ timeout.cancel (timer)' –

3

Это моя третья попытка: https://jsfiddle.net/koljada/8cLw6wch/22/

  var timer = $interval(function() { 
       scope.changeImage(); 
     }, 5000);    
     scope.next = function() {     
       $interval.cancel(timer); 
       timer = $interval(function() { 
       scope.changeImage(); 
       }, 5000);     
     }; 
    scope.changeImage = function() {     
      scope.currentIndex < scope.images.length - 1 ? scope.currentIndex++ : scope.currentIndex = 0; 
     }; 

Надеюсь, это поможет вам.

+0

tnx, но вы отменили таймер и не изменили изображение автоматический при использовании следующего btn –

+0

Я вас не понимаю. Когда я нажал на следующий бит, изображение меняет один раз и интервал отменяется. –

+0

Возможно, вам нужно это поведение: https://jsfiddle.net/koljada/8cLw6wch/20/ –