Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2013, 00:55
Интересующийся
Отправить личное сообщение для IgorArhangel Посмотреть профиль Найти все сообщения от IgorArhangel
 
Регистрация: 14.01.2013
Сообщений: 29

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


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

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

Последний раз редактировалось IgorArhangel, 21.01.2013 в 11:56.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2013, 11:26
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

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

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

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


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

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

Разбирайтесь, пишите вопросы.
Ответить с цитированием
  #3 (permalink)  
Старый 14.01.2013, 11:31
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

Последний раз редактировалось tsigel, 14.01.2013 в 12:46.
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2013, 13:36
Интересующийся
Отправить личное сообщение для IgorArhangel Посмотреть профиль Найти все сообщения от IgorArhangel
 
Регистрация: 14.01.2013
Сообщений: 29

Слайдер работает, но не совсем правильно
Кое что сделал. Но все же работает еще не так...
Загвоздка именно на 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/

Последний раз редактировалось IgorArhangel, 17.01.2013 в 13:49. Причина: не указал образец
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2013, 15:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<!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;

Последний раз редактировалось Deff, 17.01.2013 в 15:48.
Ответить с цитированием
  #6 (permalink)  
Старый 17.01.2013, 17:22
Интересующийся
Отправить личное сообщение для IgorArhangel Посмотреть профиль Найти все сообщения от IgorArhangel
 
Регистрация: 14.01.2013
Сообщений: 29

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

у меня же получается полная ерунда.
Ответить с цитированием
  #7 (permalink)  
Старый 17.01.2013, 17:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 17.01.2013 в 17:29.
Ответить с цитированием
  #8 (permalink)  
Старый 17.01.2013, 17:54
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

Самый простой вариант:
<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, 18.01.2013 в 10:19.
Ответить с цитированием
  #9 (permalink)  
Старый 17.01.2013, 18:04
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

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

Последний раз редактировалось tsigel, 17.01.2013 в 18:06.
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2013, 16:23
Интересующийся
Отправить личное сообщение для IgorArhangel Посмотреть профиль Найти все сообщения от IgorArhangel
 
Регистрация: 14.01.2013
Сообщений: 29

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка слайд шоу CJ Flashy Slide Show 1.1.3 vadimos_gre Элементы интерфейса 0 29.10.2012 15:38
Слайд шоу, видеозаписи 123456789igor Общие вопросы Javascript 1 27.08.2012 16:03
Простой слайд картинок jQuery cssme jQuery 1 11.05.2011 17:41
Как сделать слайд шоу mdiimas jQuery 6 27.08.2010 20:40
проблема со слайд шоу, помогите пожалуйста. Ketch_Ozzy Общие вопросы Javascript 5 15.05.2009 23:34