Javascript.RU

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

Фотогалерея. Перелистывание фотографий.
Добрый день,

Проблема в следующем. При открытии фотографии в больший размер, я не могу написать код, чтобы фотографии в окне перелистывались. Как можно обойтись без глобальной переменной(var index = 0)? Как можно вычислить конкретный элемент массива (фотография, на которую мы кликнули и с нее вести отсчет по массиву фотографий) и передать ее в функцию? Нужна помощь в редактировании функции nextPhoto ()

<html>
<head>
<title>Google</title>
<link rel="stylesheet" type="text/css" href="css1.css">
<script type="text/javascript" src="photos.js"></script>
</head>
<body>

<script>
	function onPhotoClick () {
		var shadow = document.getElementById ('shadow');
		var photoWrapper = document.getElementById ('photoWrapper');
		var photo = document.getElementById ('photo');
		var img = document.getElementById('photo');
		img.onclick = nextPhoto;
		shadow.style.display = "block";
		photoWrapper.style.display = "block";
		photo.style.display = "block";
		photo.style.backgroundImage = 'url("'+this.src+'")';
	}
	
	function hidePhoto () {
		var shadow = document.getElementById ('shadow');
		var photoWrapper = document.getElementById ('photoWrapper');
		var photo = document.getElementById ('photo');
		shadow.style.display = "";
		photoWrapper.style.display = "";
		photo.style.display = "";		
	}

	window.onload = function () {
		var img = document.getElementById('photo');
		for (var i=0; i < photos.length; i++) {
			var img = document.createElement ("IMG")
			img.src = "img/china/" + photos[i];
			img.onclick = onPhotoClick;
			photoContainer.appendChild(img);
		}
		
		
		shadow.onclick = hidePhoto;		
	}

	var index = 0;

	function nextPhoto () {
		var img = document.getElementById('photo')
		index++;
		if (index >= photos.length)
			index = 0;
		img.src = "img/china/" + photos[index]
	}
	
</script>

<h1 align="center">Фотоальбом</h1>
<div align="center" id="photoContainer"></div>
<div id="shadow"></div>
<div id ="photoWrapper">
	<div class="photoLinks">
		<a href="#">Фотография</a>
		<a href="javascript:hidePhoto()" class="photoRightLink">Закрыть</a>
	</div>
	<div>
	<img id="photo">
	</div>
</div>
</body>
</html>

Заранее спасибо

Последний раз редактировалось MorgenStern, 21.10.2012 в 21:40.
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2012, 17:42
Аватар для a_l
a_l a_l вне форума
Кандидат Javascript-наук
Отправить личное сообщение для a_l Посмотреть профиль Найти все сообщения от a_l
 
Регистрация: 15.09.2011
Сообщений: 143

Если я вас правильно понял, вам поможет this:
http://javascript.ru/tutorial/object/thiskeyword
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2012, 21:35
Новичок на форуме
Отправить личное сообщение для MorgenStern Посмотреть профиль Найти все сообщения от MorgenStern
 
Регистрация: 21.10.2012
Сообщений: 4

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

Последний раз редактировалось MorgenStern, 21.10.2012 в 21:46.
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2012, 21:58
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

для оформления кода используйте bb-теги [html run] http://javascript.ru/formatting
если в window.onload уже не глобальная
для определения по чему кликнули можно использовать объект event
ну или делайте через this, как посоветовал a_l
PS: а где хотя бы пару фото для тестового примера

Последний раз редактировалось bes, 21.10.2012 в 22:00.
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2012, 22:10
Новичок на форуме
Отправить личное сообщение для MorgenStern Посмотреть профиль Найти все сообщения от MorgenStern
 
Регистрация: 21.10.2012
Сообщений: 4

Сообщение от bes Посмотреть сообщение
для оформления кода используйте bb-теги [html run] http://javascript.ru/formatting
если в window.onload уже не глобальная
для определения по чему кликнули можно использовать объект event
ну или делайте через this, как посоветовал a_l
PS: а где хотя бы пару фото для тестового примера
Спасибо за оперативный ответ. Я только недавно приступил к изучению javascript.
Дело в том, что я не понимаю, как передать конкретный элемент массива в функцию nextPhoto, с помощью this.
P.s как добавить картинки сюда?
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2012, 22:19
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

картинки добавляются как обычно в html, главное чтобы ссылка была доступна
вот ссылка на мою картинку http://javascript.ru/forum/image.php...ine=1334914235
<img src="http://javascript.ru/forum/image.php?u=19820&dateline=1334914235">

для возможности запуска добавьте run [html run]

в принципе это наверное и не надо, все картинки расположены рядом друг с другом, поэтому nextSibling (nextElementSibling) подойдёт

<img onclick="nextPhoto(this)"> this указывает на эту картинку
я бы сделал через event.target

Последний раз редактировалось bes, 21.10.2012 в 22:33.
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2012, 22:47
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

что-то типа такого
<style>
body > img {
	display: none;
}
body > img:first-child {
	display: inline;
}
</style>

<body>
1<img src="http://javascript.ru/forum/image.php?u=19820&dateline=1334914235">
2<img src="http://javascript.ru/forum/image.php?u=19820&dateline=1334914235">
3<img src="http://javascript.ru/forum/image.php?u=19820&dateline=1334914235">
4<img src="http://javascript.ru/forum/image.php?u=19820&dateline=1334914235">

<script>
window.onload = function () {
	document.body.onclick = function (e) {
		e = e || event;
		var target = e.target || e.srcElement;
		if (target.tagName == 'IMG' && target.nextElementSibling.tagName == 'IMG') {
			target.style.display = 'none';
			target.nextElementSibling.style.display = 'inline';
		}
	}
}
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 22.10.2012, 00:35
Новичок на форуме
Отправить личное сообщение для MorgenStern Посмотреть профиль Найти все сообщения от MorgenStern
 
Регистрация: 21.10.2012
Сообщений: 4

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

У меня такой вопрос, имеет ли значение, что один элемент, может иметь два события для обработки? И правильно ли это?
Ответить с цитированием
  #9 (permalink)  
Старый 22.10.2012, 10:45
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от MorgenStern
имеет ли значение, что один элемент, может иметь два события для обработки?
один элемент может реагировать на множество событий, а также иметь несколько обработчиков на одно и то же событие (но задать можно не по всякому, а через addEventListener/attachEvent), почитайте про события в учебнике на этом сайте
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Верстка фотографий Вконтакте alexey8832 Оффтопик 1 13.03.2012 18:29
Фотогалерея с древовидными комментариями. fiw Общие вопросы Javascript 5 08.09.2011 12:49
Фотогалерея. bpystep Общие вопросы Javascript 14 08.12.2010 09:20
Повторяющаяся фотогалерея. lapwing Элементы интерфейса 2 17.10.2010 15:53
скрипт для просмотра фотографий ... mTzen Элементы интерфейса 7 24.09.2009 10:32