Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Простейший слайдер (https://javascript.ru/forum/events/51809-prostejjshijj-slajjder.html)

Smike 20.11.2014 15:00

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

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

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

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

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

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

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

рони 20.11.2014 15:54

Smike,
если картинку меняите зачем таскать остальные параметры

kostyanet 20.11.2014 16:17

container.style.backgroundImage=

Чтобы работали кнопки произвольного доступа им надо просто втыкать подсветку по индексу. Ну то есть это css

Smike 20.11.2014 16:22

Цитата:

Сообщение от kostyanet (Сообщение 341956)
container.style.backgroundImage=

Чтобы работали кнопки произвольного доступа им надо просто втыкать подсветку по индексу. Ну то есть это css

то есть что-то вроде этого?
if (bg === 'array[0]') { rule[0].classList.add('active');}

Smike 20.11.2014 16:22

Цитата:

Сообщение от рони (Сообщение 341949)
Smike,
если картинку меняите зачем таскать остальные параметры

извини, не понял, что ты имеешь ввиду :(

kostyanet 20.11.2014 16:25

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

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

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

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

Потому что нажали буттон 8 - значит пред 8-1, а след - 8+1. Все заранее известно. Соответственно нажали буттон след - в котором сейчас 8, значит пред - 8-1, след - 8+1 и форевер.

kostyanet 20.11.2014 16:27

Цитата:

Сообщение от Smike
извини, не понял, что ты имеешь ввиду

Не надо постоянно втыкивать уже втыкнутые атрибуты - центр, позишн, хренишн и тпшн. У вас 1 атрибут - image - его и меняйте. Ну, если задача требует на каждом кадре менять позишн-хренишн, но вроде не заметно.

kostyanet 20.11.2014 16:29

Цитата:

Сообщение от Smike (Сообщение 341958)
то есть что-то вроде этого?
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);

рони 20.11.2014 16:36

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>

Smike 20.11.2014 17:39

Цитата:

Сообщение от рони (Сообщение 341966)
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>


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

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

рони 20.11.2014 17:57

Цитата:

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

:stop: вы проделали хорошую работу просто мне так проще
по пункту 2 - путь сохранить нельзя, можно только значения
но для сокращения кода можно так ... строки 88 и 116 ниже
<!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,
            imgSet = function(link) {
                container.style.backgroundImage = "url(" + link + ")";
            };

        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) {
            var link = this.href;
            imgSet(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>

kostyanet 20.11.2014 23:01

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

проиграйте

http://learn.javascript.ru/play/wE82ub

Текст действующего вещества (под нетронутую тряхомудию в исходнике)

window.onload = function() {

	var image = document.getElementById("container"),
		next = document.getElementById("next"),
		prev = document.getElementById("previous"),
		image_list = document.querySelectorAll(".rule"),
		last;

	for(var i=0;i<image_list.length;i++)
		image_list[i].dataset.index=i;
	next.dataset.index=0;

	function render_image(e)
	{
		var index = parseInt(e.target.getAttribute('data-index'));
		var length=image_list.length;
		prev.dataset.index=(index-1 in image_list)?index-1:length-1;
		next.dataset.index=(index+1 in image_list)?index+1:0;

		var img = new Image();
		img.onload=function(){
			image.style.backgroundImage='url(\''+this.src+'\')';
		};
		img.src=e.target.href;

		e.target.classList.toggle('active');
		if(last!=null)
			last.classList.toggle('active');
		last=e.target;

		e.stopPropagation();
		e.preventDefault()
		return false;
	}

	document.querySelector(".nav").addEventListener('click',render_image,true);
	next.addEventListener('click',function(){image_list[this.dataset.index].click();});
	prev.addEventListener('click',function(){image_list[this.dataset.index].click();});
	next.click();
}


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

Все тупо сделано на индексации, которая, собственно, рулит, а хрень типа if(name='next') - сосет.

kostyanet 20.11.2014 23:11

Кстати, насчет left-arrow.png Есть такая вот фишка

transform:scaleX(-1)

которая из левой кнопки делает точно такую же - но правую. То есть нуна ровно 1 картинка, что в случае base64 весьма актуально.

Да, не во всех браузерах, но во всех которыми современные люди пользуются, а на динозавров кладите. Тем не менее у меня в бланшете браузер под названием Интернет показал сука две левых кнопки, когда я зашел проверить как оно там.

Vlasenko Fedor 20.11.2014 23:39

kostyanet,
обкатанное решение http://sandbox.scriptiny.com/tinyslider2/
чтоб не велосипедить

рони 20.11.2014 23:48

kostyanet,
вроде и оптимизировал и всё хорошо ... но грусно с вами ... да и защиту от дурака бы поставили, раз решили 1 клик на все ... типа if(!e.target.href) return;

рони 20.11.2014 23:51

Poznakomlus,
человек именно хотел повелосипедить но не дали :cray:

Vlasenko Fedor 20.11.2014 23:58

Цитата:

Сообщение от рони (Сообщение 342073)
Poznakomlus,
человек именно хотел повелосипедить но не дали :cray:

Путь открыт начало http://codepen.io/MartinSchulz/pen/RNwyaE :haha:

kostyanet 20.11.2014 23:58

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

Дело не в этом глупом коде, а в том что я в отличии от вас - старпер и все-таки научился принимать новое и проверять советы, а вы - молодой человек, уже все давным-давно решили и усугубляете своим примером жизнь тем, кому еще решать, а они уже тоже, типа, все решили, все им давно известно. Это нашефсе, национальное, кстати.

Так вот, фишка в том если ссылки живые, то ответ на самый первый вопрос звучит так

http://learn.javascript.ru/play/AHKQf

потому что это ж ссылки - делай им фокус и браузер сам все за вас сделает. Подсветит в фокусе, погасит не в фокусе.

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

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

ЗЫ Нахера там был какой-то массив я так и не понял. Из него кагбе подразумевалось делались линки что ли? Потому что если надо было юзать сам массив, то нахера там линки.

рони 21.11.2014 00:04

kostyanet,
снова не понял ничего что вы написали, обидно :lol:
впрочем как обычно.

рони 21.11.2014 00:09

kostyanet,
error как выскакивал так и выскакивает, ещё и красное пропадает с кнопок.

Smike 21.11.2014 12:49

Рони, я единственное не понял в примере, который вы скинули.
вот строка кода в функции setImage:
"old && old.classList.remove("active");"
откуда мы берем значение в переменной old (чтобы понять, в какой именно кнопке необходимо убрать красное свечение)?

ЗЫ. всем остальным. я не скрываю, что плохо знаю js. если бы моей задачей было просто прикрутить слайдер на какой-нибудь говносайт, я бы за полминуты нашел пример, сделанный на jquery.

я пишу на этом форуме, чтобы научиться. не думаю, что здесь есть люди, которые хорошо изучили js за пару месяцев (если это их первый язык программирования)

kostyanet 23.11.2014 10:30

Нет там old, поскольку нет new. Последний щелкнутый элемент это стек глубиной вложения 1. Его можно расширить заменив переменную на массив: втыкать спереди, вытыкать сзади, получится типа хронология.

Ваш велосипед не имеет смысла потому что у вас href занят. Каким членом вы теперь откроете страницу по ссылке с картинки?

А чтобы беспонту крутить картинки js вообще не нужен - для этого давно юзают CSS3

рони 23.11.2014 10:48

Цитата:

Сообщение от Smike
откуда мы берем значение в переменной old

Цитата:

Сообщение от kostyanet
Последний щелкнутый элемент

остальное в сообщении kostyanet, недоступно для моего понимания
old = this; в этой строке храним нажатый
так как первый раз old пуст делаем проверку, чтоб неполучить ошибку.
if(old) {old.classList.remove("active")};
ну и конечно в коде бессмысленно болтается массив со ссылками.

kostyanet 23.11.2014 11:06

Цитата:

Сообщение от рони
недоступно для моего понимания

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

рони 23.11.2014 11:11

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;
	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(".nav li"),
             old,
             i = 0,
             j = sliderRules.length - 1,
             imgSet = function(link) {
                 container.style.backgroundImage = "url(" + link + ")";
             };

         function slideMove() {
             i += "next" == this.id ? 1 : -1;
             i == array.length && (i = 0);
             0 > i && (i = array.length - 1);
             sliderRules[i].click()
         };

         button.addEventListener("click", slideMove, false);
         previous.addEventListener("click", slideMove, false);

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

         function setImage(e) {
             i = +this.dataset.indx;
             var link = array[i];
             var img = new Image();
             img.onload = function() {
                 imgSet(link);
             };
             img.src = link;
             img.complete && img.onload();
             old && old.classList.remove("active");
             old = this;
             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></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
	</div>

</body>
</html>

kostyanet 23.11.2014 11:18

Цитата:

Сообщение от рони
old = this; в этой строке храним нажатый

Да потому что поддались соблазну искорежить flow в угоду ЧСВ.

говнокод где надо думать что к чему, хотя думать тут не о чем:


old && old.classList.remove("active");
old = this;
old.classList.add("active");


код, где думать не о чем, поскольку все самоочевидно:

this.classList.add("active");
if(old)
  old.classList.remove("active");
old=this;


все потому что по-нашему нельзя чтобы все было просто и понятно - нация не оценит; по-нашему надо все простое и понятное превратить в замудреное гавно, чтоб оно плющило и таращило, чтобы такие как ТС задавали "глупые" вопросы что такое и откуда old.

Поэтому у вас дохуя очков, а у меня нихуя - вы протагонист национальной традиции.

рони 23.11.2014 11:50

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;
	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(".nav li"),
     
  
             j = sliderRules.length - 1,
             imgSet = function(link) {
                 container.style.backgroundImage = "url(" + link + ")";
             };
         container.addEventListener("click", newX, false);
         for (; j > -1; j--) {
             var sliderRule = sliderRules[j];
             sliderRule.dataset.indx = j;
         };
         sliderRule.classList.add("active");
         sliderRule.click();
         function newX(e) {
             var elem = e.target;
             var i = +elem.dataset.indx;
             if (isNaN(i)) return;
             var next = i + 1;
             next == array.length && (next = 0);
             var prev = i - 1;
             0 > prev && (prev = array.length - 1);
             button.dataset.indx = next;
             previous.dataset.indx = prev;
             document.querySelector('.active').classList.remove("active");
             sliderRules[i].classList.add("active")
             var link = array[i];
             var img = new Image();
             img.onload = function() {
                 imgSet(link);
             };
             img.src = link;
             img.complete && img.onload();
             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></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
	</div>

</body>
</html>

kostyanet 24.11.2014 08:03

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

Буквально вчера было - http://stackoverflow.com/questions/2...y-key-of-table - самый популярный ответ вовсе не самый ответ, а ответ с тремя баллами - самый ответ.

Ну вот, я думаю Рони бы ошивался там в подвале со своими баянами, как и я со своими баянами. Потому что все делается вообще не так и так никто не делает как мы тут обсуждаем. Нормальные люди берут JQ, плугин и нахер им думать о баянах.

Smike 24.11.2014 15:56

Огромное спасибо за помощь, Рони, я правда ценю то, что вы потратили свое время.

Увидимся в следующих темах)

ЗЫ. думал, что на прогерских форумах не ругаются так. =)))

kostyanet 25.11.2014 12:52

Это все баттхерт, я в нете трещу уже лет 20, навидался. Роне он в ноги поклонится, так принято, а сделает как проще, поскольку не враг сам себе. Ну, если только интеллигент, тогда сделает как враг себе.


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