20.11.2014, 17:57
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Smike
|
Рони решил, что я безнадежен и сделал сам =)))))
|
вы проделали хорошую работу просто мне так проще
по пункту 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>
|
|
20.11.2014, 23:01
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
То есть на словах нельзя передать, непременно требуется носом ткнуть, а значит написать куда ткнуть. Ну, может в этом есть та самая сермяжная правда. Если бы на словах все понимали, кто б тогда вообще писал.
проиграйте
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') - сосет.
|
|
20.11.2014, 23:11
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Кстати, насчет left-arrow.png Есть такая вот фишка
transform:scaleX(-1)
которая из левой кнопки делает точно такую же - но правую. То есть нуна ровно 1 картинка, что в случае base64 весьма актуально.
Да, не во всех браузерах, но во всех которыми современные люди пользуются, а на динозавров кладите. Тем не менее у меня в бланшете браузер под названием Интернет показал сука две левых кнопки, когда я зашел проверить как оно там.
|
|
20.11.2014, 23:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
kostyanet,
вроде и оптимизировал и всё хорошо ... но грусно с вами ... да и защиту от дурака бы поставили, раз решили 1 клик на все ... типа if(!e.target.href) return;
|
|
20.11.2014, 23:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Poznakomlus,
человек именно хотел повелосипедить но не дали
|
|
20.11.2014, 23:58
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
|
|
20.11.2014, 23:58
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
С вами рони похоже все потеряно, потому что тема прорезалась между несколько раз, вы демонстрировали мелкий прогресс, а понимать на словах не хотели.
Дело не в этом глупом коде, а в том что я в отличии от вас - старпер и все-таки научился принимать новое и проверять советы, а вы - молодой человек, уже все давным-давно решили и усугубляете своим примером жизнь тем, кому еще решать, а они уже тоже, типа, все решили, все им давно известно. Это нашефсе, национальное, кстати.
Так вот, фишка в том если ссылки живые, то ответ на самый первый вопрос звучит так
http://learn.javascript.ru/play/AHKQf
потому что это ж ссылки - делай им фокус и браузер сам все за вас сделает. Подсветит в фокусе, погасит не в фокусе.
Но живые ссылки как-то опасно выглядят. Одно неровное движение скрипта и юзер ухуярил на просмотр картинки в целом. Ну там можно поставить защиту типа target="_blank", конечно.
Ну и второе, как раз живые ссылки на именно картинки, случай в практике редкий. Как правило мы имеем href ведущий на страницу, а картинки надо или вычислять из src тумбов, или заранее куда-то постить адреса полного размера чтобы взять и показать.
ЗЫ Нахера там был какой-то массив я так и не понял. Из него кагбе подразумевалось делались линки что ли? Потому что если надо было юзать сам массив, то нахера там линки.
Последний раз редактировалось kostyanet, 21.11.2014 в 00:01.
|
|
21.11.2014, 00:04
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
kostyanet,
снова не понял ничего что вы написали, обидно
впрочем как обычно.
|
|
21.11.2014, 00:09
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
kostyanet,
error как выскакивал так и выскакивает, ещё и красное пропадает с кнопок.
|
|
|
|