Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Переход на следующий слайд (https://javascript.ru/forum/dom-window/70086-perekhod-na-sleduyushhijj-slajjd.html)

Янковиц 09.08.2017 09:56

Переход на следующий слайд
 
Добрый день, есть верстка для галереи:
<div class="slides">
  <div class="slide 1th"></div>
  <div class="slide 2th"></div>
  <div class="slide 3th"></div>
</div>
<div class="nav">
  <div class="btn-group">
    <div class="btn active"></div>
    <div class="btn"></div>
    <div class="btn"></div>
  </div>
</div>


Как сделать автоматический запуск слайдов?
Делаю так - эмулирую нажатие на кнопку навигации:
setInterval(function(){
	jQuery('.btn').trigger('click');
}, 6000);

Как сделать эмуляцию клика на следующий пункт навигации? Спасибо.

ksa 09.08.2017 10:26

Цитата:

Сообщение от Янковиц
Как сделать эмуляцию клика на следующий пункт навигации?

Если я правильно понял, "текущая" кнопка навигации та, что с классом active?
Если так, то:
- ищем кнопку с классом active
- берем следующую за ней и кликаем
- если следующей нет, берем первую и кликаем на ней

Янковиц 09.08.2017 10:30

Цитата:

Сообщение от ksa (Сообщение 461052)
Если я правильно понял, "текущая" кнопка навигации та, что с классом active?

Да, все верно. Только как это сделать?

Вернее второй и третий пункты?

Янковиц 09.08.2017 10:46

Дохожу до последнего, и останавливается:(
setInterval(function(){
	var elem = jQuery('.btn-group .active').next();
	if ( jQuery(elem).is(':last') ) {
		jQuery('.btn-group .btn').trigger('click');
	} else {
		jQuery(elem).trigger('click');
	}
}, 6000);

j0hnik 09.08.2017 10:48

var i = 0
	setInterval(function(){
	$('.btn').eq(i).trigger('click');
	i++;
	if(i==2) i = 0;
}, 6000);


как то так

Янковиц 09.08.2017 10:49

Дело в том, что заведомо неизвестно, сколько будет слайдов.

j0hnik 09.08.2017 10:50

var i = 0
	setInterval(function(){
	$('.btn').eq(i).trigger('click');
	i++;
	if(i== $('.slide').length-1) i = 0;
}, 6000);

тогда так

Янковиц 09.08.2017 10:55

Первый слайд меняется только со второй попытки. Обновляет у него класс active, и только потом переходит на второй.

ksa 09.08.2017 10:56

Цитата:

Сообщение от Янковиц
Дохожу до последнего, и останавливается
jQuery('.btn-group .btn').trigger('click');

Замени на
jQuery('.btn-group .btn:first-child').trigger('click');

Янковиц 09.08.2017 10:56

Кроме того, у меня пять слайдов, а с 4 прыгает на первую.

Янковиц 09.08.2017 10:59

Все равно застопорился. Консоль не выдает ошибок :(

Янковиц 09.08.2017 11:03

Большое спасибо всем, кто помог.
Финальный рабочий вариант:
setInterval(function(){
	var elem = jQuery('.btn-group .active').next();
	if ( jQuery(elem).is(':last-child') ) {
		jQuery('.btn-group .btn:first-child').trigger('click');
	} else {
		jQuery(elem).trigger('click');
	}
}, 6000);

j0hnik 09.08.2017 11:10

var i = 0
	setInterval(function(){
	i++;
	$('.btn').eq(i).trigger('click');
	if(i== $('.slide').length-1) i = -1;
}, 6000);

ksa 09.08.2017 11:11

Цитата:

Сообщение от Янковиц
у меня пять слайдов, а с 4 прыгает на первую

Так у тебя такой алгоритм... :)

Вот про что я писал ранее

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
ul > li {
	display: none;
}
ul > li.on {
	display: list-item;
}
</style>
<script type='text/javascript'>
$(function(){
	setInterval(function(){
		var o=$('ul > .on').next();
		$('ul > .on').removeClass('on');
		if (o.length==0) {
			$('ul > li:first-child').addClass('on');
		} else {
			o.addClass('on');
		};
	},2000);
});
</script>
</head>
<body>
<ul>
	<li class='on'>0</li>
	<li>1</li>
	<li>2</li>
	<li>3</li>
</ul>
</body>
</html>

ksa 09.08.2017 11:15

j0hnik, заводить переменную кагбэ "избыточно" в этом ДОМ-варианте. Т.к. все уже есть для решения задачи. ;)

j0hnik 09.08.2017 11:19

:p


Часовой пояс GMT +3, время: 14:00.