Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.02.2017, 03:12
Интересующийся
Отправить личное сообщение для sendik Посмотреть профиль Найти все сообщения от sendik
 
Регистрация: 25.02.2017
Сообщений: 13

Ошибка в слайдере
С превьюшками под слайдером такая проблема: когда доходит до конца слайдера - две следующие не показывает. В чем ошибка понимаю: в массиве больше нет картинок, нечего показывать. Не понимаю, как исправить. Может, у кого есть идеи?
HTML
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>slider</title>
	<link rel="stylesheet" href="style.css">
</head>
<body>
	<div class="mainPreview">
		<img src="img/1.jpg" class="imgPrv" onclick="openSlider(0)">
		<img src="img/2.jpg" class="imgPrv" onclick="openSlider(1)">
		<img src="img/3.jpg" class="imgPrv" onclick="openSlider(2)">
		<img src="img/4.jpg" class="imgPrv" onclick="openSlider(3)">
		<img src="img/5.jpg" class="imgPrv" onclick="openSlider(4)">
		<img src="img/6.jpg" class="imgPrv" onclick="openSlider(5)">
		<img src="img/7.jpg" class="imgPrv" onclick="openSlider(6)">
		<img src="img/8.jpg" class="imgPrv" onclick="openSlider(7)">
		<img src="img/9.jpg" class="imgPrv" onclick="openSlider(8)">
	</div>
	<div id="modalSlider">
		<span id="close" onclick="document.getElementById('modalSlider').style.display='none'"> &times </span>
		<img class="modalImage" id="img01">
		<div class="previews">
			<img class="prevMini" id="prev1" onclick="plusSlidePrev(-2)"> <!-- -2 -->
			<img class="prevMini" id="prev2" onclick="plusSlidePrev(-1)"> <!-- -1 -->
			<span class="prev3"><img class="prevMini" id="prev3"></span> <!-- 0 -->
			<img class="prevMini" id="prev4" onclick="plusSlidePrev(+1)"> <!-- 1 --> 
			<img class="prevMini" id="prev5" onclick="plusSlidePrev(+2)"> <!-- 2 -->
		</div>
		<span class="prev" onclick="prevSlide(0)">&#10094</span>
		<span class="next" onclick="nextSlide(0)">&#10095</span>
	</div>

	<script src="js.js"></script>
</body>
</html>


JS
var imgMassive = ["img/1.jpg","img/2.jpg", "img/3.jpg", "img/4.jpg", "img/5.jpg", "img/6.jpg", "img/7.jpg", "img/8.jpg", "img/9.jpg"],
	index = 0,
	doc = document,
	modal = doc.getElementById('modalSlider'),
	modalImg = doc.getElementById('img01'),
	slides = imgMassive,
	prev1 = doc.getElementById('prev1'),
	prev2 = doc.getElementById('prev2'),
	prev3 = doc.getElementById('prev3'),
	prev4 = doc.getElementById('prev4'),
	prev5 = doc.getElementById('prev5');
function openSlider(funcImg) {
	modal.style.display = 'block';
	modalImg.src = imgMassive[funcImg];
	index += funcImg;	
	prev();
}
function nextSlide(n) {
	index++;
	if (index >= slides.length) {
		index = 0 ;	
	}
	index+=n;
	modalImg.src = imgMassive[index];
	prev();
}
function prevSlide(n) {
	index--;
	if (index < 0) {
		index = slides.length-1;
	}
	index-=n;
	modalImg.src = imgMassive[index];
	prev();
}

function prev() {
	prev1.src = imgMassive[index-2];
	prev2.src = imgMassive[index-1];
	prev3.src = imgMassive[index];
	prev4.src = imgMassive[index+1];
	prev5.src = imgMassive[index+2];


}
function plusSlidePrev(el) {
	switch(el){
		case 1:
		nextSlide(0);
		break;
		case 2:
		nextSlide(1);
		break;
		case -1:
		prevSlide(0);
		break;
		case -2:
		prevSlide(1);
		break;
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 27.02.2017, 09:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

sendik, сделайте функции
1 функция устанавливает индекс
2 ф-я изменяет индекс
3 ф-я лимитирует число
4 ф-я устанавливает картинку согласно числу
может логику увидите
Ответить с цитированием
  #3 (permalink)  
Старый 27.02.2017, 09:43
Интересующийся
Отправить личное сообщение для sendik Посмотреть профиль Найти все сообщения от sendik
 
Регистрация: 25.02.2017
Сообщений: 13

Сообщение от рони Посмотреть сообщение
sendik, сделайте функции
1 функция устанавливает индекс
2 ф-я изменяет индекс
3 ф-я лимитирует число
4 ф-я устанавливает картинку согласно числу
может логику увидите
не совсем понял. Можете пример показать?
Ответить с цитированием
  #4 (permalink)  
Старый 27.02.2017, 09:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от sendik
Можете пример показать?
попробуйте осилить
В чем ошибка
Ответить с цитированием
  #5 (permalink)  
Старый 27.02.2017, 09:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

sendik,
попробуйте освоить addeventlistener вместо onclick
Ответить с цитированием
  #6 (permalink)  
Старый 27.02.2017, 10:06
Интересующийся
Отправить личное сообщение для sendik Посмотреть профиль Найти все сообщения от sendik
 
Регистрация: 25.02.2017
Сообщений: 13

Вы конечно простите за мое нубство. я в js новичек.
Не понимаю функцию, которую вы скинули и не догоняю, как смена присвоения события поможет решить проблему
Ответить с цитированием
  #7 (permalink)  
Старый 27.02.2017, 10:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

sendik,
addeventlistener это для развития
Ответить с цитированием
  #8 (permalink)  
Старый 27.02.2017, 10:28
Интересующийся
Отправить личное сообщение для sendik Посмотреть профиль Найти все сообщения от sendik
 
Регистрация: 25.02.2017
Сообщений: 13

Понял, спасибо.
Можете еще раз, более доступно объяснить про функции?
Ответить с цитированием
  #9 (permalink)  
Старый 27.02.2017, 10:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

sendik,
function next() {
  index++;
  index = limit(index);
  show()
}
function prev() {
  index--;
  index = limit(index);
  show()
}

function setIndex(x) {
  index = x;
  index = limit(index);
  show();
}
function addIndex(x) {
  index += x;
  index = limit(index);
  show();
}

function limit(num) {
  if (num >= imgMassive.length) {
    num %= imgMassive.length ;
  }
if (num < 0) {
    num = imgMassive.length - (-num % imgMassive.length) ;
  }
  return num
}
function show()
{
   prev1.src = imgMassive[limit(index-2)];
   prev2.src = imgMassive[limit(index-1)];
   prev3.src = imgMassive[index];
   prev4.src = imgMassive[limit(index+1)];
   prev5.src = imgMassive[limit(index+2)];
   modal.style.display = 'block';
}

Последний раз редактировалось рони, 27.02.2017 в 11:17.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка js Script error in line 0 Bozercov Opera, Safari и др. 0 06.11.2012 18:35
firebug пишет ошибка invalid range in character class Dim@ Общие вопросы Javascript 5 10.05.2012 16:52
Ошибка обработки Javascript в браузере Firefox/Mozilla kismedia Firefox/Mozilla 3 13.10.2011 07:14
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07
IE: неизвестная ошибка выполнения _Kpot_ Internet Explorer 1 03.04.2008 11:00