Javascript.RU

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

Простейший слайдер
Всем привет. Решил запилить слайдер. он работает, но у меня вопрос именно по реализации. Код вы можете посмотреть по этой ссылке.

http://jsfiddle.net/k6gj1ksp/2/

Есть 2 вопроса:
1) Как должна быть построена логика работы программы, чтобы при перелистывании салйдера (кнопками вперед и назад) нижние кнопки загорались правильно?

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

ЗЫ как мне кажется, тут нужно менять логику работы программы полностью.

2) менее важный, но все же. здесь я в каждой функции обращаюсь к свойству background так "container.style.background". когда я сохраняю это в переменную, допустим так "var containerBackground = container.style.background" это не работает.

скажу сразу, я не прошу вас сделать работу за меня. мне просто нужно понять, как это должно делаться. Спасибо ! =)

Последний раз редактировалось Smike, 20.11.2014 в 15:11.
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2014, 15:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Smike,
если картинку меняите зачем таскать остальные параметры
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2014, 16:17
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

container.style.backgroundImage=

Чтобы работали кнопки произвольного доступа им надо просто втыкать подсветку по индексу. Ну то есть это css
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2014, 16:22
Аспирант
Отправить личное сообщение для Smike Посмотреть профиль Найти все сообщения от Smike
 
Регистрация: 01.06.2014
Сообщений: 33

Сообщение от kostyanet Посмотреть сообщение
container.style.backgroundImage=

Чтобы работали кнопки произвольного доступа им надо просто втыкать подсветку по индексу. Ну то есть это css
то есть что-то вроде этого?
if (bg === 'array[0]') { rule[0].classList.add('active');}
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2014, 16:22
Аспирант
Отправить личное сообщение для Smike Посмотреть профиль Найти все сообщения от Smike
 
Регистрация: 01.06.2014
Сообщений: 33

Сообщение от рони Посмотреть сообщение
Smike,
если картинку меняите зачем таскать остальные параметры
извини, не понял, что ты имеешь ввиду
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2014, 16:25
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

Произвольный доступ требует индексации. Каноничный код с которого все начинается, действующее вещество так сказать:

var c=parseInt(event.target.getAttribute('data-index'));

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

Потому что нажали буттон 8 - значит пред 8-1, а след - 8+1. Все заранее известно. Соответственно нажали буттон след - в котором сейчас 8, значит пред - 8-1, след - 8+1 и форевер.
Ответить с цитированием
  #7 (permalink)  
Старый 20.11.2014, 16:27
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Smike
извини, не понял, что ты имеешь ввиду
Не надо постоянно втыкивать уже втыкнутые атрибуты - центр, позишн, хренишн и тпшн. У вас 1 атрибут - image - его и меняйте. Ну, если задача требует на каждом кадре менять позишн-хренишн, но вроде не заметно.
Ответить с цитированием
  #8 (permalink)  
Старый 20.11.2014, 16:29
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Smike Посмотреть сообщение
то есть что-то вроде этого?
if (bg === 'array[0]') { rule[0].classList.add('active');}
Хрень в условии не понял, что значит равно скалярному array[0] ?

типа вот так

/* highlight page button */
item.classList.toggle(opts.active_page_class);
if(last_index!=null)
	image_list[last_index].classList.toggle(opts.active_page_class);
Ответить с цитированием
  #9 (permalink)  
Старый 20.11.2014, 16:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Smike,
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title> - jsFiddle demo</title>
  <style type='text/css'>
    * {
	margin: 0;
	padding: 0;
}
ul {
	list-style: none;
}
#container {
	position: relative;
	top: 20px;
	width: 640px;
	height: 480px;
	margin: 0 auto;
	box-shadow: 0 0 5px 5px rgba(0, 0, 0, .5);
	transition: all .2s;
    background:  no-repeat center center;

}
#previous {
	position: absolute;
	left: 10px;
	top: 50%;
	margin-top: -20px;
	opacity: .5;
	cursor: pointer;
}
#previous:hover, #next:hover {
	opacity: 1;
}
#previous:active {
	margin-top: -18px;
}
#next:active {
	margin-top: -18px;
}
#next {
	position: absolute;
	right: 10px;
	top: 50%;
	margin-top: -20px;
	opacity: .3;
	cursor: pointer;
}
.nav {
	position: absolute;
	bottom: 0;
	left: 50%;
	width: 100px;
	margin-left: -50px;
}
.nav li {
	float: left;
	margin-right: 5px;
	margin-bottom: 5px;
}
.rule {
	display: block;
	height: 10px;
	width: 10px;
	border: 2px solid #fff;
	border-radius: 50%;
}

.active {
	background-color: red;
}
  </style>



<script>
window.onload = function() {
    (function() {
        var container = document.getElementById("container"),
            button = document.getElementById("next"),
            previous = document.getElementById("previous"),
            array = ["http://www.umnet.com/pic/diy/screensaver/3845b123-a01a.jpg", "http://www.iceis.pl/640x480/640x480_-_niagarafalls640x480.jpg", "http://www.umnet.com/pic/diy/screensaver/87832121-ea64.jpg", "http://www.blackberry-wallpapers.com/uploads/allimg/110514/2-1105142029510-L.jpg"],
            sliderRules = document.querySelectorAll(".rule"),
            old,
            i = 0,
            j = sliderRules.length - 1;

        function slideMove() {


            i += this.id == "next" ? 1 : -1;
            if (i === array.length) {
                i = 0;
            }
            if (i < 0) {
                i = (array.length - 1);
            }

            sliderRules[i].click()
        }
        if (document.addEventListener) {
            button.addEventListener("click", slideMove, false);
            previous.addEventListener("click", slideMove, false);
        }

        for (; j > -1; j--) {
            var sliderRule = sliderRules[j];
            sliderRule.indx = j; // dataset
            sliderRule.addEventListener("click", setImage, false);
        }
        sliderRule.click();

        function setImage(e) {
            e = e || window.event;
            var link = this.href;
            container.style.backgroundImage = "url(" + link + ")";
            old && old.classList.remove("active");
            old = this;
            i = +this.indx;
            old.classList.add("active");
            e.preventDefault();
        }
    }());

}

</script>


</head>
<body>
  	<div id="container">
		<img src="https://www.gentec-eo.com/Content/images/home/slider/left-arrow.png" id="previous" width="40" height="40" >
		<img src="https://www.gentec-eo.com/Content/images/home/slider/right-arrow.png" id="next" width="40" height="40" >
		<ul class="nav">
			<li><a class="rule" href="http://www.umnet.com/pic/diy/screensaver/3845b123-a01a.jpg"></a></li>
			<li><a class="rule" href="http://www.iceis.pl/640x480/640x480_-_niagarafalls640x480.jpg"></a></li>
			<li><a class="rule" href="http://www.umnet.com/pic/diy/screensaver/87832121-ea64.jpg"></a></li>
			<li><a class="rule" href="http://www.blackberry-wallpapers.com/uploads/allimg/110514/2-1105142029510-L.jpg"></a></li>
		</ul>
	</div>

</body>


</html>
Ответить с цитированием
  #10 (permalink)  
Старый 20.11.2014, 17:39
Аспирант
Отправить личное сообщение для Smike Посмотреть профиль Найти все сообщения от Smike
 
Регистрация: 01.06.2014
Сообщений: 33

Сообщение от рони Посмотреть сообщение
Smike,
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title> - jsFiddle demo</title>
  <style type='text/css'>
    * {
	margin: 0;
	padding: 0;
}
ul {
	list-style: none;
}
#container {
	position: relative;
	top: 20px;
	width: 640px;
	height: 480px;
	margin: 0 auto;
	box-shadow: 0 0 5px 5px rgba(0, 0, 0, .5);
	transition: all .2s;
    background:  no-repeat center center;

}
#previous {
	position: absolute;
	left: 10px;
	top: 50%;
	margin-top: -20px;
	opacity: .5;
	cursor: pointer;
}
#previous:hover, #next:hover {
	opacity: 1;
}
#previous:active {
	margin-top: -18px;
}
#next:active {
	margin-top: -18px;
}
#next {
	position: absolute;
	right: 10px;
	top: 50%;
	margin-top: -20px;
	opacity: .3;
	cursor: pointer;
}
.nav {
	position: absolute;
	bottom: 0;
	left: 50%;
	width: 100px;
	margin-left: -50px;
}
.nav li {
	float: left;
	margin-right: 5px;
	margin-bottom: 5px;
}
.rule {
	display: block;
	height: 10px;
	width: 10px;
	border: 2px solid #fff;
	border-radius: 50%;
}

.active {
	background-color: red;
}
  </style>



<script>
window.onload = function() {
    (function() {
        var container = document.getElementById("container"),
            button = document.getElementById("next"),
            previous = document.getElementById("previous"),
            array = ["http://www.umnet.com/pic/diy/screensaver/3845b123-a01a.jpg", "http://www.iceis.pl/640x480/640x480_-_niagarafalls640x480.jpg", "http://www.umnet.com/pic/diy/screensaver/87832121-ea64.jpg", "http://www.blackberry-wallpapers.com/uploads/allimg/110514/2-1105142029510-L.jpg"],
            sliderRules = document.querySelectorAll(".rule"),
            old,
            i = 0,
            j = sliderRules.length - 1;

        function slideMove() {


            i += this.id == "next" ? 1 : -1;
            if (i === array.length) {
                i = 0;
            }
            if (i < 0) {
                i = (array.length - 1);
            }

            sliderRules[i].click()
        }
        if (document.addEventListener) {
            button.addEventListener("click", slideMove, false);
            previous.addEventListener("click", slideMove, false);
        }

        for (; j > -1; j--) {
            var sliderRule = sliderRules[j];
            sliderRule.indx = j; // dataset
            sliderRule.addEventListener("click", setImage, false);
        }
        sliderRule.click();

        function setImage(e) {
            e = e || window.event;
            var link = this.href;
            container.style.backgroundImage = "url(" + link + ")";
            old && old.classList.remove("active");
            old = this;
            i = +this.indx;
            old.classList.add("active");
            e.preventDefault();
        }
    }());

}

</script>


</head>
<body>
  	<div id="container">
		<img src="https://www.gentec-eo.com/Content/images/home/slider/left-arrow.png" id="previous" width="40" height="40" >
		<img src="https://www.gentec-eo.com/Content/images/home/slider/right-arrow.png" id="next" width="40" height="40" >
		<ul class="nav">
			<li><a class="rule" href="http://www.umnet.com/pic/diy/screensaver/3845b123-a01a.jpg"></a></li>
			<li><a class="rule" href="http://www.iceis.pl/640x480/640x480_-_niagarafalls640x480.jpg"></a></li>
			<li><a class="rule" href="http://www.umnet.com/pic/diy/screensaver/87832121-ea64.jpg"></a></li>
			<li><a class="rule" href="http://www.blackberry-wallpapers.com/uploads/allimg/110514/2-1105142029510-L.jpg"></a></li>
		</ul>
	</div>

</body>


</html>

Рони решил, что я безнадежен и сделал сам =)))))

Спасибо большое, Рони. Но перед тем, как ответить что-то осмысленное, мне нужно переварить этот код.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно сделать слайдер контента OgecuT Элементы интерфейса 2 23.07.2014 14:31
Новостной слайдер на bxslider malsyst Библиотеки/Тулкиты/Фреймворки 3 02.09.2013 10:32
Связать ползунковый слайдер и аккордеон... All_ex74 Элементы интерфейса 1 31.05.2013 13:20
Слайдер во время загрузки страницы v.v.dankiv jQuery 0 14.04.2013 11:16
jquery слайдер, анимация при переключении вкладки KiTaeZa Events/DOM/Window 1 05.09.2011 20:52