Как объединить функции слайдера по таймеру и по клику?

Есть 2 функции: одна сменяет баннеры по таймеру, другая - при клике на переключатели.

Хотелось бы объединить эти функции в одну, но не знаю, как. Сам код:
var activeIcon = '/images/circle_active.png',
			inactiveIcon = '/images/circle_inactive.png',
			interval = 5000;

		   // Функция смены баннеров по таймеру
		  function slider() {
			var current = $('.scrollbar img[src="' + activeIcon + '"]').closest('span'),
				next = (current.next().length > 0) ? current.next() : $('.scrollbar span:first-child'),
				$banner = $('.banner img'),
				background = $banner.attr('src'),
				src = next.data('src'),
				id = next.data('id');
			$('.scrollbar img').attr('src', inactiveIcon);
			next.find('img').attr('src', activeIcon);
			$('.banner').css('background', 'url(' + background + ')');
			$banner.fadeOut(100, function() {
				$(this).attr('src', src).data('id', id).fadeIn(800);
			});
		  }
		  var changeBanners = window.setInterval(slider, interval);

		  // Смена баннеров при клике на кнопку
		  $('.scrollbar').on('click', 'span', function() {
			var $this = $(this),
				$banner = $('.banner img'),
				background = $banner.attr('src'),
				src = $this.data('src'),
				id = $this.data('id');
			clearInterval(changeBanners);
			$('.scrollbar img').attr('src', inactiveIcon);
			$this.find('img').attr('src', activeIcon);
			if (src != $banner.attr('src')) {
				$('.banner').css('background', 'url(' + background + ')');
				$banner.fadeOut(100, function() {
					$(this).attr('src', src).data('id', id).fadeIn(800);
				});
			} else {
				return false;
			}
			changeBanners = window.setInterval(slider, interval);
		  });


Может кто-нибудь помочь или подкинуть идею?
  • Вопрос задан
  • 2750 просмотров
Решения вопроса 1
Проведите рефакторинг. Выделите одну функцию, которая будет отвечать за смену баннера. Передавайте этой функции необходимые для работы параметры. Вызывайте её в обоих случаях, и при смене по таймауту, и при смене по клику.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
А зачем Вам объединять разные функции?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы