Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Слайд шоу на библиотеке jQuery (https://javascript.ru/forum/jquery/34656-slajjd-shou-na-biblioteke-jquery.html)

IgorArhangel 14.01.2013 00:55

Слайд шоу на библиотеке jQuery
 
Добрый день!
Стала задача разработать слайд шоу


Есть похожий на этом сайте но проблема в том что не получается активной картинке присвоить ссылку.

Как это сделать примерно в какую сторону копать. Целые день сидел но ничегою

tsigel 14.01.2013 11:26

Если слайд шоу со стрелочками (как на сайте-примере), то все просто.

Картинки размещаете со свойствами position: absolute, так чтобы они были одна за другой.
Стрелочкам присваиваете классы prev и next (например) и по клику на стрелочку запускаете событие перемещения.

$(function() { // Эта функция выполнится при полной загрузке страницы
  var prev = $('.prev'),
  next = $('.next'); // Объявили переменные

  prev.click(function() {//клик на стрелку назад
    $('./*общий класс всех картинок*/').each(function() {//цикл по всем картинкам
       $(this).animate({'left' : '-=' + $(this).width() + 'px'}, 'slow') /*вычитаем из значения left текущей картинки её ширину*/
    })
  })
})


Пишите кнопку "вперед". Также после создания анимации будет необходимо придумать условие прекращения анимаций по достижению крайней картинки.

Так же обратите внимание, что данный скрипт рассчитан что все картинки будут иметь одинаковую ширину.

Разбирайтесь, пишите вопросы.

tsigel 14.01.2013 11:31

Учите обращение к селекторам, и анимации (т.е. эффекты jQuery типа animate, fade, slide...), по сути это минимум что необходимо знать. Пример приведенный выше - самый простой и понятный, освойте хотябы его, а потом можно будет переделывать на слайд шоу с вашей картинки.

IgorArhangel 17.01.2013 13:36

Слайдер работает, но не совсем правильно
 
Кое что сделал. Но все же работает еще не так...
Загвоздка именно на javascript
вот собственно он
(function ($) {
var hwSlideSpeed = 700;
var hwTimeOut = 3000;
var hwNeedLinks = true;
$(document).ready(function(e) {
	//$('.slide').css(
	//	{"left": '0'}).hide().eq(0).show();
	var slideNum = 0;
	var slideTime;
	slideCount = $("#slider .slide").size();
	var animSlide = function(arrow){
		clearTimeout(slideTime);
		$('.slide').eq(slideNum).fadeOut(hwSlideSpeed);
		if(arrow == "next"){
			if(slideNum == (slideCount-1)){slideNum=0;}
			else{slideNum++}
			}
		else if(arrow == "prew")
		{
			if(slideNum == 0){slideNum=slideCount-1;}
			else{slideNum-=1}
		}
		else{
			slideNum = arrow;
			}
		$('.slide').eq(slideNum).fadeIn(hwSlideSpeed, rotator);
		$(".control-slide.active").removeClass("active");
		$('.control-slide').eq(slideNum).addClass('active');
		}

	var $adderSpan = '';
	$('.slide').each(function(index) {
			$adderSpan += '<span class = "control-slide">' + index + '</span>';
		});
	$('<div class ="sli-links">' + $adderSpan +'</div>').appendTo('#slider-wrap');
	$(".control-slide:first").addClass("active");
	$('.control-slide').click(function(){
	var goToNum = parseFloat($(this).text());
	animSlide(goToNum);
	});
	var pause = false;
	var rotator = function(){
			if(!pause){slideTime = setTimeout(function(){animSlide('next')}, hwTimeOut);}
			}
	$('#slider-wrap').hover(	
		function(){clearTimeout(slideTime); pause = true;},
		function(){pause = false; rotator();
		});
	rotator();
});
})(jQuery);


HTML разметка
<div id="slider-wrap">
  <div id="slider">
    <div class="slide">
      <img src="img/1.png" width="640" height="360">
    </div>
    <div class="slide">
      <img src="img/2.png" width="640" height="360">
    </div>
    <div class="slide">
      <img src="img/3.png" width="640" height="360">
    </div>
    <div class="slide">
      <img src="img/4.png" width="640" height="360">
    </div>
  </div>
</div>


И файл стилей
Код:

#slider{ /* Оболочка слайдера */
        width:1540px;
        height:360px;
        overflow: hidden;
        position:relative;}
.slide{ /* Слайд */
        width:640px;
        height:360px;
        float:left;
        margin:0 -85px 0 0;
        }
.sli-links{ /* Кнопки смены слайдов */
        margin-top:10px;
        text-align:center;}
.sli-links .control-slide{
        margin:2px;
        display:inline-block;
        width:16px;
        height:16px;
        overflow:hidden;
        text-indent:-9999px;
        background:url(radioBg.png) center bottom no-repeat;}
.sli-links .control-slide:hover{
        cursor:pointer;
        background-position:center center;}
.sli-links .control-slide.active{
        background-position:center top;}

Сначала у меня все нормально. они выстраиваются, но когда начинается анимация происходит все не так.
У меня в каком-то месте цикл не правильно работает.
И еще мне хочется чтоб они по кругу шли. Я знаю что есть скрипт circle но не понимаю как его использовать. буду очень признателен если кто-то чего-то посоветует или подскажет

Вот то как работает
http://207693.artzozul.web.hosting-test.net/

Deff 17.01.2013 15:45

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<script src="jquery-1.7.2.min.js"></script>
</head>
<body>
<style>
#slider{ /* Оболочка слайдера */
	width:1540px;
	height:360px;
	overflow: hidden;
	position:relative;}
.slide{ /* Слайд */
	width:640px;
	height:360px!important;
	float:left;
	margin:0 -85px 0 0;
	}
.sli-links{ /* Кнопки смены слайдов */
	margin-top:10px;
	text-align:center;}
.sli-links .control-slide{
	margin:2px;
	display:inline-block;
	width:16px;
	height:16px;
	overflow:hidden;
	text-indent:-9999px;
	background:url(radioBg.png) center bottom no-repeat;}
.sli-links .control-slide:hover{
	cursor:pointer;
	background-position:center center;}
.sli-links .control-slide.active{
	background-position:center top;}
</style>
<script>
(function ($) {
var hwSlideSpeed = 700;
var hwTimeOut = 3000;
var hwNeedLinks = true;
$(document).ready(function(e) {
	//$('.slide').css(
	//	{"left": '0'}).hide().eq(0).show();
	var slideNum = 0;
	var slideTime;
	slideCount = $("#slider .slide").size();
	var animSlide = function(arrow){
		clearTimeout(slideTime);
		$('.slide').eq(slideNum).hide(hwSlideSpeed);
		if(arrow == "next"){
			if(slideNum == (slideCount-1)){slideNum=0;}
			else{slideNum++}
			}
		else if(arrow == "prew")
		{
			if(slideNum == 0){slideNum=slideCount-1;}
			else{slideNum-=1}
		}
		else{
			slideNum = arrow;
			}
		$('.slide').eq(slideNum).show(hwSlideSpeed, rotator);
		$(".control-slide.active").removeClass("active");
		$('.control-slide').eq(slideNum).addClass('active');
		}

	var $adderSpan = '';
	$('.slide').each(function(index) {
			$adderSpan += '<span class = "control-slide">' + index + '</span>';
		});
	$('<div class ="sli-links">' + $adderSpan +'</div>').appendTo('#slider-wrap');
	$(".control-slide:first").addClass("active");
	$('.control-slide').click(function(){
	var goToNum = parseFloat($(this).text());
	animSlide(goToNum);
	});
	var pause = false;
	var rotator = function(){
			if(!pause){slideTime = setTimeout(function(){animSlide('next')}, hwTimeOut);}
			}
	$('#slider-wrap').hover(	
		function(){clearTimeout(slideTime); pause = true;},
		function(){pause = false; rotator();
		});
	rotator();
});
})(jQuery);

</script>
<div id="slider-wrap">
  <div id="slider">
    <div class="slide">
      <img src="img/1.png" width="640" height="360">
    </div>
    <div class="slide">
      <img src="img/2.png" width="640" height="360">
    </div>
    <div class="slide">
      <img src="img/3.png" width="640" height="360">
    </div>
    <div class="slide">
      <img src="img/4.png" width="640" height="360">
    </div>
  </div>
</div>
</body>
</html>

IgorArhangel, fadeIn/fadeOut не подходит
нужны обычные show/hide c фиксированной высотой слайда .slide{ height:360px!important;

IgorArhangel 17.01.2013 17:22

Deff,
спс.
Но мне необходимо выстроить все картинки в ряд и по переключению они все чтоб ехали причем по кругу вот как тут

у меня же получается полная ерунда.

Deff 17.01.2013 17:27

IgorArhangel,
имхо простой метод построить одностроковую таблу и переносить с разворачиванием ячейки в начало(или в конец, зависит от направления) таблицы, сворачивая текущую;
================================================== ================
По кругу чтобы ехало, тоже аналогично, переносить слайды с разворачиванием в начало или конец блока обрамляющего слайды

tsigel 17.01.2013 17:54

Зачем делать прокрутку по кругу, если вы хотите сделать перемещение изображений не по "стрелочкам", а по кнопкам привязанным к конкретной картинке?

Самый простой вариант:
<div id="general"><!--Блок с position: relative-->
   <div id="forImages"><!--Блок с position: absolute;-->
      <div class="img1 allImgClass"></div><!--Блок с position: absolute;-->
      <div class="img2 allImgClass"></div><!--Блок с position: absolute;-->
      <div class="img3 allImgClass"></div><!--Блок с position: absolute;-->
      <div class="img4 allImgClass"></div><!--Блок с position: absolute;-->
   </div>
</div>

При такой структуре их надо расставить в ряд (скрипт):
var x = 0;
var num = 0; //Номер картинки
var margin = 5;//отступ между картинками 
$('.allImgClass').each(function () {//Цикл по всем картинкам
  $(this).css({'left': x + 'px'});
  num++;
  x = margin + ($(this).width() + margin * 2) * num;
});

Итак, у нас есть блок forImages, в котором все картинки лежат подряд. Теперь по нажатию на кнопки (1, 2, 3, 4) вам нужно лишь перечислить координаты forImages, при которых необходимая картинка была бы посередине.

Например:
$('.button2').click(function() {
   $('#forImages').css({'left': '-150px'});
})

В данном примере описываю максимально простой, а не правильный способ.

tsigel 17.01.2013 18:04

Такой вариант слайд шоу (который вы пытаетесь сделать тут) сложнее чем со стрелочками (лево / право), и для нормального его создания Вам понадобится научиться связывать элементы между собой.

Это можно сделать с помощью jQuery Data().
Пишите, по мере вопросов - поможем ;)

IgorArhangel 18.01.2013 16:23

Цитата:

Сообщение от Deff
о кругу чтобы ехало, тоже аналогично, переносить слайды с разворачиванием в начало или конец блока обрамляющего слайды

Извините конечно, может и тупой вопрос, но как переносить слайды в начало или конец?
Никак не могу понять. Было супер если бы пример сюда поставить

IgorArhangel 18.01.2013 16:46

Цитата:

Сообщение от tsigel
В данном примере описываю максимально простой, а не правильный способ.

Спасибо.
Да я понял что Вы имели ввиду. Идея классная, но прикол в том что этот слайдер еще и должен по времени сам листаться.
и еще в чем прикол что картинки которые по бокам должны быть в background, так как ширина не должна превышать 1000 pх.

Почитаю еще документацию. Если что напишу еще!

Пока что спс всем!

tsigel 18.01.2013 21:15

Данная структура не мешает использовать setTimeout или setInterval. И background-м они тоже вполне могут быть.

О переносе слайдов в начало/конец почитайте про insertAfter(), insertBefore() и appendTo() (методы jQuery)

Deff 18.01.2013 21:16

Цитата:

Сообщение от IgorArhangel
Было супер если бы пример сюда поставить

<script src="http://code.jquery.com/jquery-latest.js"></script>

<style type="text/css">
#Wrap {
 width:480px;
 position:relative;
 text:align:center;
}
#SlideWrp{
  display:inline-block;
}
#Prev,#Next {
  border:red solid 1px;
  padding:2px;
  cursor:pointer;
}
#Prev {
  float:left;
}
#Next {
  float:right;
}
div.Slide {
  //float:left;
  float:right;
  height:100px!important;
  width:200px;
  padding:6px;
  border:blue solid 1px;
}
#SlideWrp {
  height:114px; //height+border+padding;
  overflow-y:hidden;  //не расширение до $(".Slide:not('.active')").hide();
  width:430px;
}
#indexActive{
  float:right;
  margin-right:50px;
  margin-top:10px;
}
span[id^="active_Ind"]{
  float:right;
  border:blue solid 2px;
  height:3px;
  width:3px;
  margin:3px;
}
span[id^="active_Ind"].active{
  border: red solid 2px;
}
</style>



<div id="Wrap">
<span id="Prev">&larr;</span><span id="Next">&rarr;</span>

   <div id="SlideWrp">
      <div class="Slide active">1</div>
      <div class="Slide active">2</div> 
      <div class="Slide">3</div>
      <div class="Slide">4</div>
      <div class="Slide">5</div>
   </div><br />

   <div id="indexActive"></div>
</div>

<script type="text/javascript">
$(document).ready(function(){

   $(".Slide:not('.active')").hide();
   var intervalAutoId;
   var LsL=$(".Slide").length;

   $(".Slide").each(function(i){
     $(this).attr('data',i);
     $("#indexActive").prepend('<span id="active_Ind_'+i+'"></span>')
   });$("#indexActive #active_Ind_0").addClass('active');

 function setIndActive(){
     var j=$(".Slide.active:first").attr('data');
     $("#indexActive span[id^='active_Ind_']").removeClass('active');
     $("#indexActive span[id='active_Ind_"+j+"']").addClass('active');
 }

   $("#Next").click(function(){
     UserNoActSlide=false;
     $(".Slide:first").removeClass('active').hide('slow',function () {$(this).appendTo("#SlideWrp")});
     $(".Slide:eq(2)").addClass('active').show('slow');
     setIndActive();
   });

   $("#Prev").click(function(){
     UserNoActSlide=false;
     $(".Slide.active:last").removeClass('active').hide('slow');
     $(".Slide:last").prependTo("#SlideWrp").addClass('active').show('slow');
     setIndActive()
   });



// АВТОПРОКРУТКА

   var UserNoActSlide=true;
   $("#Wrap").bind('mouseenter mousemove',function(){ //Cброс автозапуска по наведению
      UserNoActSlide=false;//alert("A")
      clearInterval(intervalAutoId);
      UserNoActSlide=false;
    }).mouseleave(function(){                     //Разрешаем автозапуск по сходу курсора
      clearInterval(intervalAutoId);
      UserNoActSlide=true;
    });


     setInterval(function(){                  //Периодический тест активности и автозапуск
       if(UserNoActSlide){
         intervalAutoId=setInterval(function(){
             UserNoActSlide=false;
             $("#Next").click();
             },3000); // Интервал автопрокрутки
        }
       
     },10000);        // Интервал Теста;

});
</script>

IgorArhangel 20.01.2013 16:55

Deff,
Да это оно спасибо огромное...

Есть еще одна проблемка мне для навигации не нужны стрелочки, переход на определенную картинку должен быть при нажатии на нижние квадратики, которые находятся в блоке indexActive

подскажите что прописать в ссылку? вот в этом месте

$(".Slide").each(function(i){
     $(this).attr('data',i);
     $("#indexActive").prepend('<a href=" "><span id="active_Ind_'+i+'">'+(i+1)+'</span></a>')
   });$("#indexActive #active_Ind_0").addClass('active');

IgorArhangel 20.01.2013 17:30

Как я понял мне надо прописать функцию для клика на id="active_Ind"
Вот что я написал но оно не хочет работать

$("#indexActive span[id^='active_Ind_']").click(function(){
	var goToNum = attr('data');
	animSlide(goToNum);
	});

Deff 20.01.2013 17:47

IgorArhangel,
Чичас гляну... полчаса потерпите

IgorArhangel 20.01.2013 18:25

и еще интересно если разместить в background картинки.. они большие в ширину 700 пикселей.

ясно дело что на экран не поместятся. С помощью какой функции можно сделать чтоб ширина слайдера была 1000 пх, а отображалась одна картинка по центре а две которые по бокам на половину?

Deff 20.01.2013 18:31

IgorArhangel,
<script src="http://code.jquery.com/jquery-latest.js"></script>

<style type="text/css">
#Wrap {
 width:480px;
 position:relative;
 text:align:center;
}
#SlideWrp{
  display:inline-block;
}
#Prev,#Next {
  border:red solid 1px;
  padding:2px;
  cursor:pointer;
}
#Prev {
  float:left;
}
#Next {
  float:right;
}
div.Slide {
  //float:left;
  float:right;
  height:100px!important;
  width:200px;
  padding:6px;
  border:blue solid 1px;
}
#SlideWrp {
  height:114px; //height+border+padding;
  overflow-y:hidden;  //не расширение до $(".Slide:not('.active')").hide();
  width:430px;
}
#indexActive{
  float:right;
  margin-right:30px;
  margin-top:10px;
}
span[id^="active_Ind"]{
  cursor:pointer;
  float:right;
  border:blue solid 2px;
  height:6px;
  width:6px;
  margin:6px;
}
span[id^="active_Ind"].active{
  border: red solid 2px;
}
</style>



<div id="Wrap">
<span id="Prev">&larr;</span><span id="Next">&rarr;</span>

   <div id="SlideWrp">
      <div class="Slide active">1</div>
      <div class="Slide active">2</div> 
      <div class="Slide">3</div>
      <div class="Slide">4</div>
      <div class="Slide">5</div>
   </div><br />

   <div id="indexActive"></div>
</div>

<script type="text/javascript">
$(document).ready(function(){

   $(".Slide:not('.active')").hide();
   var intervalAutoId;
   var LsL=$(".Slide").length;

   $(".Slide").each(function(i){
     $(this).attr('data',i);
     $("#indexActive").prepend('<span id="active_Ind_'+i+'"></span>')
   });$("#indexActive #active_Ind_0").addClass('active');

 function setIndActive(){
     var j=$(".Slide.active:first").attr('data');
     $("#indexActive span[id^='active_Ind_']").removeClass('active');
     $("#indexActive span[id='active_Ind_"+j+"']").addClass('active');
 }

   $("#Next").click(function(){
     UserNoActSlide=false;
     $(".Slide:first").removeClass('active').hide('slow',function () {$(this).appendTo("#SlideWrp")});
     $(".Slide:eq(2)").addClass('active').show('slow');
     setIndActive();
   });

   $("#Prev").click(function(){
     UserNoActSlide=false;
     $(".Slide.active:last").removeClass('active').hide('slow');
     $(".Slide:last").prependTo("#SlideWrp").addClass('active').show('slow');
     setIndActive()
   });


   $("#indexActive > span[id^='active_Ind']").click(function(){
     UserNoActSlide=false;
     $("#indexActive span[id^='active_Ind_']").removeClass('active');
     $(this).addClass('active');
     var Id= '' + $(this).attr('id').substring(11);//alert(Id);
   $(".Slide").each(function(i){
     if($(this).attr('data')==Id) return false;
     $(this).appendTo("#SlideWrp");
   });

     $(".Slide.active:first").removeClass('active').hide();
     $(".Slide:eq(0)").addClass('Preactive').show('slow');

     $(".Slide.active:last").removeClass('active').hide();
     $(".Slide:eq(1)").show('slow').addClass('active');
     $(".Slide:eq(0)").show('slow').toggleClass('Preactive,active');

   });

// АВТОПРОКРУТКА

   var UserNoActSlide=true;
   $("#Wrap").bind('mouseenter mousemove',function(){ //Cброс автозапуска по наведению
      UserNoActSlide=false;//alert("A")
      clearInterval(intervalAutoId);
      UserNoActSlide=false;
    }).mouseleave(function(){                     //Разрешаем автозапуск по сходу курсора
      clearInterval(intervalAutoId);
      UserNoActSlide=true;
    });


     setInterval(function(){                  //Периодический тест активности и автозапуск
       if(UserNoActSlide){
         intervalAutoId=setInterval(function(){
             UserNoActSlide=false;
             $("#Next").click();
             },3000); // Интервал автопрокрутки
        }
       
     },10000);        // Интервал Теста;

});
</script>


Цитата:

Сообщение от IgorArhangel
и еще интересно если разместить в background
картинки.. они большие в ширину 700 пикселей.

1. Сделайте скриншот текущего слайдера и врисуйте туда картинки
2. Укажите нужные высоту и ширину картинок( пока только ширина)
Цитата:

Сообщение от IgorArhangel
С помощью какой функции можно сделать чтоб ширина слайдера была 1000 пх, а отображалась одна картинка по центре а две которые по бокам на половину?

Тож самое = скриншот - эскиз (И тут седни еще пару вещей обещал

IgorArhangel 20.01.2013 18:55

Цитата:

Сообщение от Deff
1. Сделайте скриншот текущего слайдера и врисуйте туда картинки
2. Укажите нужные высоту и ширину картинок( пока только ширина)

привожу скриншот


картинки которые не помещаются они будут но за экраном.. на картинке нарисован экран монитора... если монитор будет большой будет влазить большая часть изображения.

Огромное спасибо за помощь!!!

Deff 20.01.2013 18:58

Цитата:

Сообщение от IgorArhangel
Есть еще одна проблемка мне для навигации не нужны стрелочки,

Скройте сss

Deff 20.01.2013 19:02

Цитата:

Сообщение от IgorArhangel
и еще интересно если разместить в background картинки.. они большие в ширину 700 пикселей.

ясно дело что на экран не поместятся. С помощью какой функции можно сделать чтоб ширина слайдера была 1000 пх, а отображалась одна картинка по центре а две которые по бокам на половину?

Ширина/высота прописана в стиле слайдера - скрипт не при чем
================================================== =
Цитата:

Сообщение от IgorArhangel
картинки которые не помещаются они будут но за экраном.. на картинке нарисован экран монитора... если монитор будет большой будет влазить большая часть изображения.

Пост 19 чейчас делать не буду, это нун скрипт весь переделать, поскольку сейчас движутся две картинки, а не три(Но идея есть, возможно завтра - послезавтра

IgorArhangel 20.01.2013 19:02

Deff,
Вы прописывали для 2 картинок. Я переделал на 3 картинки но оно работает не так как надо. Желательно чтоб активная картинка была по центру.

$(".Slide.active:first").removeClass('active').hide();
     $(".Slide:eq(0)").addClass('Preactive').show('slow');

     $(".Slide.active:last").removeClass('active').hide();
	 $(".Slide:eq(2)").show('slow').addClass('active');
     $(".Slide:eq(1)").show('slow').addClass('active');
     $(".Slide:eq(0)").show('slow').toggleClass('Preactive,active');


но я хотел чтоб при прокрутке просто приезжала на центр нужная картика. А они все появляются и исчезают((

IgorArhangel 20.01.2013 19:04

Deff,
Буду очень признателен если поможете.

Подскажите книги именно чтоб по этой теме почитать.

IgorArhangel 22.01.2013 00:47

Цитата:

Сообщение от Deff
Пост 19 чейчас делать не буду, это нун скрипт весь переделать, поскольку сейчас движутся две картинки, а не три(Но идея есть, возможно завтра - послезавтра

Можете хотя бы алгоритм примерный рассказать?
Нашел в интернете кое-что но оно не подходит.

Deff 22.01.2013 01:06

IgorArhangel,
завтра вечером раскажу, может чо и сваяю(но не гарантирую

IgorArhangel 23.01.2013 23:57

Цитата:

Сообщение от Deff
завтра вечером раскажу, может чо и сваяю(но не гарантирую

Желательно конечно пораньше...
Deff,
Может подскажете что-нибудь?

IgorArhangel 24.01.2013 01:17

Может еще кто-то подобное видел или может подсказать принцип?

IgorArhangel 24.01.2013 22:43

Deff,
Не выделите немного времени?

Deff 24.01.2013 22:46

IgorArhangel,
О - я забыл про Вас - чо нидь завтра сделаю
Тут только с наклоноcтью блоков пока не думал - у Вас идеи есть?

IgorArhangel 24.01.2013 23:15

Цитата:

Сообщение от Deff
Тут только с наклоноcтью блоков пока не думал - у Вас идеи есть?

Да!
Сделать их png и наложить друг на друга.. у меня отлично получилось!!!
margin отрицательный.
Я только и сделал что выстроил их

Deff 24.01.2013 23:33

IgorArhangel,
:) Ясн - я думал ротированием

IgorArhangel 25.01.2013 15:33

Цитата:

Сообщение от Deff
Ясн - я думал ротированием

Та нет зачем трудности!
Буду ждать Вас

Deff 25.01.2013 23:07

IgorArhangel,
Седни не успею, доделывать буду завтра,
Но скрытия и упразрачнивания скорее не будет, картинки будут перекатываться,
одна позиция сменяться другой и скрываться за краем обрамляющего блока. Все это из-за требования центрального блока и возможности скрытия боковых при мелком экране.

IgorArhangel 27.01.2013 11:41

Цитата:

Сообщение от Deff
Гляньте, что отрыл => http://www.idangero.us/cs/
(Там справо радио кнопки -выбор эффекта)
Статья => http://habrahabr.ru/post/133205/

Я это уже давно видел!
Это не то что мне нужно...
Мне такие эффекты не нужны!
мне нужны тупо переключатели на все слайды

Deff 27.01.2013 14:57

IgorArhangel,
делаю... неохотно, поскольку не выспался

IgorArhangel 28.01.2013 23:28

Цитата:

Сообщение от Deff
делаю... неохотно, поскольку не выспался

Я очень вам признателен.
Если у Вас нет времение опишите логику и примерно как функции написать?

я пока что сделал просто ротатор. картинки на фоне. они меняются. мне не хватает только переключателей внизу.

Как я понял необходимо каждой картинке присвоить определенный переключатель.

А вот как реализовать пока затрудняюсь

Deff 30.01.2013 02:00

Вроде сделал, мне картинки нужны,
Выложите пару ссылок на картинки - залить можно сюда, http://uploads.ru/
поскольку margin - cущественно влияет на центрирование

IgorArhangel 31.01.2013 11:51

Вылаживаю
Тут 6 картинок png

Deff 31.01.2013 14:48

<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Слайд шоу на библиотеке jQuery</title>


<style type="text/css">
body {
  margin:0;
  padding; 0;
}

#Wrap {
  border:red solid 1px;
  width: 100%;
  overflow-x:hidden;
  height:auto;
  margin:0;
  padding; 0;
  text-align:left;
  position:relative;
}

#slideWrp {
  height:356px!important;
  overflow-x:hidden;
  display:inline-block;
  white-space:nowrap!important;
  padding:0;
  margin:0;
  border:red solid 1px;
}

.slide {
  float:left;
  height:356px!important;
  width:577px;
  margin:0 -1px 0 -1px;
  padding:0;
  border:transparent solid 1px;
}
.slide img{
  margin-left:-47px;
}

#Wrap {
 max-width: 1470px;/* max-width = 490px*3 (Три ширины слайд картинок);*/
}

#indexActive{
  float:right;
  margin-right:30px;
  margin-top:10px;
}
span[id^="active_Ind"]{
  cursor:pointer;
  float:right;
  border:blue solid 2px;
  height:6px;
  width:6px;
  margin:6px;
}
span[id^="active_Ind"].active{
  border: red solid 2px;
  float:right;
}
</style>



<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function(){

   var slideWIDTH = 490;
   var SLlength = $(".slide").length;
   $('#slideWrp').width(490*SLlength)
   var ReSlide = (SLlength - (1-SLlength%2)); //Тест на четность



function MarginSet(){
   var margLeft = parseInt(($("#Wrap").width()-ReSlide*(1+$(".slide:first").width()))/2)+'px';
   $("#slideWrp").css({'margin-left':margLeft})
}

  MarginSet();
$(window).resize(function(){
  MarginSet();
});

//===========================//

   var a=$('#slideWrp');
   var b=a.width;
   a.css({'width':b})
   $(".slide").each(function(i){
     $(this).attr('id','Slide-'+i);
     $("#indexActive").prepend('<span id="active_Ind_'+i+'"></span>')
   });$("#indexActive #active_Ind_0").addClass('active');


var  starT=true;
function ReplacSL(N){//alert(N)
         var slide=$(".slide:first");
         var W = parseInt(slide.width());
         var time = parseInt(410/Math.sqrt((N+1)))
         var marginLft = slide.css('margin-left');
         slide.animate({'margin-left':'-'+W+'px'},time,"linear",
         function(){
            slide.appendTo('#slideWrp');slide.css({'margin-left':marginLft});
            N--;if(N){ReplacSL(N);} else {starT=true;}
         });

}

function slideReplac(a,b){
     if(!starT) return;
     starT=false;
     if(a!=b){var N=b-a;
     if(+a>+b)N=b+SLlength-a;
        ReplacSL(N);
     }
}
var s =  SLlength - parseInt(ReSlide/2)
for(var i=0; i<s; i++){
$(".slide:first").appendTo('#slideWrp')
}

   $("#indexActive > span[id^='active_Ind']").click(function(){
     UserNoActSlide=false;
     var startI = +$("#indexActive > span.active").attr('id').replace('active_Ind_','');
     $("#indexActive > span.active").removeClass('active');
     $(this).addClass('active');
     var nextI = +$(this).attr('id').replace('active_Ind_','');
     slideReplac(startI,nextI)

   });

// АВТОПРОКРУТКА
   var intervalAutoId;
   var UserNoActSlide=true;
   $("#Wrap").bind('mouseenter mousemove',function(){ //Cброс автозапуска по наведению
      UserNoActSlide=false;//alert("A")
      clearInterval(intervalAutoId);
      UserNoActSlide=false;
    }).mouseleave(function(){                     //Разрешаем автозапуск по сходу курсора
      clearInterval(intervalAutoId);
      UserNoActSlide=true;
    });


     setInterval(function(){                  //Периодический тест активности и автозапуск
       if(UserNoActSlide){
         clearInterval(intervalAutoId);
         intervalAutoId=setInterval(function(){
             UserNoActSlide=false;
             var id= $("span[id^='active_Ind_'].active").attr('id');
             id = (+(id.replace('active_Ind_',''))+SLlength- 1)% SLlength;
             $('#active_Ind_'+ id).click();
             },4000); // Интервал автопрокрутки
        }
       
     },10000);        // Интервал Теста;


});
</script>
</head>

<body style="margin:0;padding:0;height:100%;width:100%;top:0;background: #FFFFFF url(http://hostjs-mybb2011.narod.ru/img/bg000000.gif) repeat-x 50%;">

      <div style="padding:40px 40px;width:90%;margin:0 auto;background-color:#fff;">



<div id="Wrap">


   <div id="slideWrp">
      <div class="slide"><img src="http://s3.uploads.ru/UnR4O.png"/></div>
      <div class="slide"><img src="http://s3.uploads.ru/xd2BS.png"/></div>
      <div class="slide"><img src="http://s3.uploads.ru/oPsTG.png"/></div>
      <div class="slide"><img src="http://s3.uploads.ru/aGCih.png"/></div>
      <div class="slide"><img src="http://s2.uploads.ru/zrZwu.png"/></div>
      <div class="slide"><img src="http://s3.uploads.ru/ej8UB.png"/></div> <!---->
   </div>

   <div id="indexActive"></div>
</div>



      </div>
</body>
</html>
<!-- //Конец страницы //-->

IgorArhangel 31.01.2013 18:12

Deff,
Спасибо огромное!
То что надо..
Немного подпилю..

Супер!!!!


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