Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.06.2017, 21:59
Аспирант
Отправить личное сообщение для Igor710 Посмотреть профиль Найти все сообщения от Igor710
 
Регистрация: 09.08.2016
Сообщений: 31

Навигатор слайдера
Доброго времени суток, в процессе изучения js пишу простой слайдер и возникла проблема с навигатором слайдера. Идея такая чтобы при нажатии на определенный элемент навигатора запускать определенное количество раз функцию next или prev, но не хватает умений, чтобы отследить текущий элемент миниатюры и запустить определенное количество раз функцию next или prev. Так же есть вопрос с параметром функции, с тем чтобы запустить ее со своим временем, насколько я догадываюсь в самом функции нужно сделать проверку на то задан ли параметр, если не задан приравнять t=1000, пробовал сделать с помощью .is(), не получилось, возможно есть какой то стандартный прием для этого, не смог догадаться.
html css
<!doctype html>
<html lang="ru">
    <head>
        <meta charset="UTF-8">
        <title>Новый проект</title>
        <link href="css/styles.css" rel="stylesheet">
		<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script src="js/scriptSL.js"></script>

    </head>
    <body>
        <div class='slider'>
        	<div class="slitem"><img src="first.jpg"  class="slitemimg"  alt=""/></div>
        	<div class="slitem"><img src="second.jpg" class="slitemimg"  alt=""/></div>
        	<div class="slitem"><img src="third.jpg"  class="slitemimg"  alt=""/></div>
        	<div class="slitem"><img src="forth.jpg"  class="slitemimg"  alt=""/></div>
        	<div class="slitem"><img src="fifth.jpg"  class="slitemimg "  alt=""/></div>
        	<div class="slbtnnext"></div>
        	<div class="slbtnprev"></div>
        	<div class="slmiall">
        	<div class="slmi" >	</div>
        	</div>
        </div> 	
        
    </body>
</html>
<style>
.slider{
	position:absolute;
	width:500px;
    left:33.3333%;
    height:300px;
    ooooverflow:hidden;
    
}
.slitem{
    position:absolute;
	
	width:inherit;
	float:left;
	
}
.slitemimg{
	width:inherit;
	
	
}
.slitem.dd{
	right:-500px;
}
.slbtnnext{
	width:20px;
	height:90px;
	position: absolute;
	right:0;
	bottom:0;
	top:0;
	cursor: pointer;
	margin:auto;
	background: grey;
}
.slbtnprev{
	width:20px;
	height:90px;
	position: absolute;
	left:0;
	bottom:0;
	top:0;
	cursor: pointer;
	margin:auto;
	background: grey;
}
.slsd{
	right:-500px;
}
.slsdl{
	left:-500px;
}
.slmi{
	
	width:10px;
	height:10px;
	background: grey;

	
	float:left;
	margin-right:3px;
}
.slmiall{
	width:500px;
	height:30px;
	position: absolute;
	
	bottom:0;
	
	margin:auto;
	margin-left: 45%;
	margin-right: 30%;
}
.slmialla{
	border:solid 1px black;
}
.slnone{
	display: none;
}
</style>

js
$(function() {
	var $slider=$('.slider');
	var $sliderwidth=$('.slider').width();
	var $sliderItem=$('.slitem');
	var $slnext=$('.slbtnnext');
	var $slprev=$('.slbtnprev');
	var $minia=$('.slmi');
	var m=[]
    var i=0;
    var n=0;
    
 
    $sliderItem.not( $sliderItem.eq(0)).addClass("slsd");
	for(n=0;n<$sliderItem.length;n++){
 	m[n] = $minia.clone(true);
    $('.slmiall').append(m[n]);
	}
	//$minia.addClass('slnone');
	m[i].addClass('slmialla');
    var isRun=false;
    
    $slnext.on('click', next = function(t){
        t=1000;
        
        
   		if(isRun){
			return
		}
		isRun=true;
		$sliderItem.eq(i-1).css('right', -$sliderwidth);
    	$sliderItem.eq(i).animate({left: -$sliderwidth}, t, function(){$sliderItem.eq(i-1).css({'right':-$sliderwidth,'left':'auto'});} );
   		m[i].removeClass('slmialla');
        i++;
    	
        $sliderItem.eq(i).animate({left: '0'}, t,function(){isRun=false});
        //$sliderItem.eq(i-1).css({'right':-$sliderwidth,'left':'auto'});
        if(i>$sliderItem.length-1){
        	i=0;
        	$sliderItem.eq(i).animate({left: '0'}, t,function(){isRun=false});
        	
        }
        	m[i].addClass('slmialla');
    });
    $slprev.on('click', function prev(t){
        t=1000;
    	if(isRun){
			return
		}
		isRun=true;
        $sliderItem.eq(i-1).css('left', -$sliderwidth);
    	$sliderItem.eq(i).animate({left: $sliderwidth}, t,function(){$sliderItem.eq(i-1).css({'right':$sliderwidth,'left':'auto'});});
    	m[i].removeClass('slmialla');
        i--;
        
         $sliderItem.eq(i).animate({left: '0'}, t,function(){isRun=false});
         if(i<0){
         	i = $sliderItem.length - 1;
         }
         m[i].addClass('slmialla');
    });



    timeSlide=next;
   // setInterval(timeSlide,2000)
});
Ответить с цитированием
  #2 (permalink)  
Старый 28.06.2017, 22:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Igor710,
заведите переменную для индекса активной картинки и меняйте только её.
функций должно быть только две, одна изменить индекс, вторая показать картинку с этим индексом.
Ответить с цитированием
  #3 (permalink)  
Старый 29.06.2017, 00:39
Аспирант
Отправить личное сообщение для Igor710 Посмотреть профиль Найти все сообщения от Igor710
 
Регистрация: 09.08.2016
Сообщений: 31

Сообщение от рони Посмотреть сообщение
Igor710,
заведите переменную для индекса активной картинки и меняйте только её.
функций должно быть только две, одна изменить индекс, вторая показать картинку с этим индексом.
Таким образом можно завести переменную активной картинки?
$('.slitem').each(function(indx){
b=$sliderItem.eq(indx);
console.log(b);
})
Я так понимаю, две функции надо повесить на клик элемента навигатора, его же для этого тоже нужно перебрать? И не совсем понятно как сделать функцию показа картинки с нужным индексом, например если индекс нужной картинки меньше текущего, то нужно выходит применить функцию prev количеством равным разности этих двух индексов?
Ответить с цитированием
  #4 (permalink)  
Старый 29.06.2017, 00:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Igor710,
https://javascript.ru/forum/jquery/6...tml#post449876
https://javascript.ru/forum/jquery/6...tml#post449355
Ошибка в слайдере
Ответить с цитированием
  #5 (permalink)  
Старый 29.06.2017, 13:33
Аспирант
Отправить личное сообщение для Igor710 Посмотреть профиль Найти все сообщения от Igor710
 
Регистрация: 09.08.2016
Сообщений: 31

Сообщение от рони Посмотреть сообщение
Igor710,
https://javascript.ru/forum/jquery/6...tml#post449876
https://javascript.ru/forum/jquery/6...tml#post449355
Ошибка в слайдере
Попытался сделать по первому примеру, основная идея работает, но проблема в моих функциях, они переключают сразу, поэтому получаем следующий от выбранного слайдера, поэтому вопрос можно ли на этих функциях это реализовать или все таки нужна какая то отдельная функция?
Ответить с цитированием
  #6 (permalink)  
Старый 29.06.2017, 17:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

slide карусель готовый вариант
Igor710,
<!doctype html>
<html lang="en">
<head>
   <meta charset="utf-8">
  <title>demo</title>

 <style type="text/css">
 *{
   padding:0;
   margin:0;
 }
 body{
    background-color: #D3D3D3
 }

 #wrapper{
   margin:50px auto;
   width:640px;
 }

 #carousel{
   display:block;
   position:relative;

 }

 li{
   list-style:none;
   display:none;
   position:absolute;
 }

 #carousel li:first-child{
   display:block;
 }

 #cl_left,#cl_right{
   width:50px;
   height:50px;
   position:absolute;
   z-index:10;
   top:150px;
   opacity:.5;
   cursor:pointer;
   background-repeat:no-repeat;
   background-size:100% 100%;
 }

 #cl_left:hover,#cl_right:hover{
   opacity:1;
 }

 #cl_left{
   left:10px;
   background-image:url(https://www.gentec-eo.com/Content/images/home/slider/left-arrow.png);
 }

 #cl_right{
   right:20px;
   background-image:url(https://www.gentec-eo.com/Content/images/home/slider/right-arrow.png);
 }

 .buttons{
   position:relative;
 }

 #thumbs-wrapper{
   position:relative;
   margin:0 auto;
   top:405px;
   text-align:center;
 }

 #thumbs-wrapper img{
   border:1px solid #FFFFFF;
   box-sizing: border-box;
   margin:4px;
   width: 65px;
   height: 40px;
   border-radius: 4px;
 }

#thumbs-wrapper .selected img{
   border:2px solid #000000;
 }
 #carousel  img{
      border-radius: 12px;
      border:2px solid #FFFFFF;
      width: 650px;
      height: 400px;
 }

 </style>
</head>

<body>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
 <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<div id="wrapper">
    <div class='buttons'>
        <div class="left" id="cl_left"></div>
        <div class='right' id="cl_right"></div>
    </div>
    <ul id="carousel">
        <li id="1jpg"><img src="http://v-leto.ru/wp-content/uploads/2015/11/indoneziya-1-e1446822043453.jpg" /></li>
        <li id="2jpg"><img src="http://cdn2.insidermonkey.com/blog/wp-content/uploads/2015/07/shutterstock_100200350.jpg" /></li>
        <li id="3jpg"><img src="http://www.breeze.ru/files/images/papua-new-guinea.jpg" /></li>
        <li id="4jpg"><img src="http://www.vedomosti.md/uploads/articles.53253.m.jpg" /></li>
        <li id="5jpg"><img src="https://d1x3cbuht6sy0f.cloudfront.net/sales/2751/5e0dd9a7_564e_4d14_be31_71965fd8e463.jpg" /></li>
        <li id="6jpg"><img src="http://www.unextour.ru/Pictures/Guide/ct1098_1608301451595599.JPG" /></li>
    </ul>
    <div id="thumbs-wrapper">
        <div id="thumbs">
            <a href="#1jpg" class="selected"><img src="http://v-leto.ru/wp-content/uploads/2015/11/indoneziya-1-e1446822043453.jpg" /></a>
            <a href="#2jpg"><img src="http://cdn2.insidermonkey.com/blog/wp-content/uploads/2015/07/shutterstock_100200350.jpg" /></a>
            <a href="#3jpg"><img src="http://www.breeze.ru/files/images/papua-new-guinea.jpg" /></a>
            <a href="#4jpg"><img src="http://www.vedomosti.md/uploads/articles.53253.m.jpg" /></a>
            <a href="#5jpg"><img src="https://d1x3cbuht6sy0f.cloudfront.net/sales/2751/5e0dd9a7_564e_4d14_be31_71965fd8e463.jpg" /></a>
            <a href="#6jpg"><img src="http://www.unextour.ru/Pictures/Guide/ct1098_1608301451595599.JPG" /></a>
        </div>
    </div>
</div>


<script>
$(function() {
    var $li = $("#carousel li"),
        len = $li.length,
        $next = $("#cl_right"),
        $prev = $("#cl_left"),
        $thumbs = $("#thumbs a"),
        direction = ["right", "left"],
        spide = 1600,
        pause = 0,
        next = 1,
        num = 0;

    function func(event) {
        $li.eq(num).stop(true, true).delay(pause).hide("slide", {
            easing: "easeInOutQuad",
            direction: direction[0]
        }, spide);
        $li.eq(next).stop(true, true).delay(pause).show("slide", {
            easing: "easeInOutQuad",
            direction: direction[1]
        }, spide)
    }

    function setNum() {
        $thumbs.removeClass("selected").eq(next).addClass("selected");
        func();
        num = next
    }
    $next.on({
        click: function() {
            next = (num + 1) % len;
            direction = ["left", "right"];
            setNum()
        }
    });
    $prev.on({
        click: function() {
            next = num - 1;
            next < 0 && (next = len - 1);
            direction = ["right", "left"];
            setNum()
        }
    });
    $thumbs.on({
        click: function(event) {
            event.preventDefault();
            next = $thumbs.index(this);
            direction = next > num ? ["left", "right"] : ["right", "left"];
            setNum()
        }
    })
});
</script>
</body>
</html>

Последний раз редактировалось рони, 29.06.2017 в 20:34.
Ответить с цитированием
  #7 (permalink)  
Старый 29.06.2017, 19:57
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Рони, слайды листаются только вторым нажатием. после первого круга листать перестает (опера) другими не пробовал.
Ответить с цитированием
  #8 (permalink)  
Старый 29.06.2017, 20:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

j0hnik,
заменил jquery - проверь
Ответить с цитированием
  #9 (permalink)  
Старый 29.06.2017, 21:16
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Рони, все ок
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное пролистывание картинок слайдера Corazon Элементы интерфейса 3 30.01.2017 22:07
Не работает автопрокрутка слайдера podsolomko95 Элементы интерфейса 0 06.04.2016 11:02
Как организовать два слайдера по принципу обложка-внутренние страницы? helgajijka jQuery 4 06.09.2015 13:52
bxslider булиты(представления) в виде слайдера Baton1777 Элементы интерфейса 9 18.07.2015 22:48
Два слайдера на странице ureech Элементы интерфейса 1 14.05.2014 15:56