Проблема с выводом изображений из массива
Есть некоторое кол-во изображений, приблизительно 400 на 600 px, но размер точный их заранее не известен. Надо в одном div разместить маленькие превьюшки, при клике на которые , в другом div будет выводится изображение картинки на которой кликнули в натуральную величину.
function getImages()
{
var I = [];
for ( var i = 0; i < 10; i++ )
{
var myImage = new Image();
myImage.src = "../img/pict" + (i+1) + ".jpg";
myImage.ind = i+1;
I.push(myImage);
}
return I;
}
function onPhotoClick()
{
var photo = document.getElementById("photo");
photo.src = "../img/pict" + this.ind + ".jpg";
}
window.onload = function()
{
var phContainer = document.getElementById('photoContainer');
var Images = getImages();
for (var i =0; i < 10; i++)
{
var newImg = document.createElement('newImg')
newImg = Images[i];
newImg.width = Images[i].width / 5;
newImg.height = Images[i].height / 5;
phContainer.appendChild(newImg);
newImg.onclick = onPhotoClick;
}
}
<body> <h1 align = "center"> Фотоальбом </h1> <div align = "center" id = "photoContainer"> </div><br/> <div align = "center"> <img src = "../img/pict1.jpg" id = "photo"> </div> </body> В Firefox и Chrome при первом запуске выводится маленькая картинка фотографии с номером один ну и соответственно в реальном размере в другом div. И на этом все заканчивается. Если страницу перезагрузить , то все начинает работать. В IE наоборот , с начала работает, но криво, превьюшки не все создает. А если перезагрузить страницу , то выводится маленькая картинка первой фотки и ее большая копия и все дальше никаких реакций. Помогите разобраться. Javascript еще только осваиваю . |
bakmaks,
странная конструкция ... Цитата:
может так попробовать
function getImages()
{
var I = [];
for ( var i = 0; i < 10; i++ )
{
var myImage = new Image();
myImage.src = "../img/pict" + (i+1) + ".jpg";
I.push(myImage);
}
return I;
}
function onPhotoClick()
{
var photo = document.getElementById("photo");
photo.src = this.src;
}
window.onload = function()
{
var phContainer = document.getElementById('photoContainer');
var Images = getImages();
for (var i =0; i < 10; i++)
{
var newImg = new image()
newImg.src = Images[i].src;
newImg.width = Images[i].width / 5;
newImg.height = Images[i].height / 5;
phContainer.appendChild(newImg);
newImg.onclick = onPhotoClick;
}
}
|
Моя ошибка. Менял имена переменных, что бы удобнее было код читать, и случайно заменил и название элемента. Должно было быть так
var newImg = document.createElement('img')
|
Но результат от этого не изменился.
|
Цитата:
|
Проблема обнаружилась на стадии создания массива изображений I[]. Вставил console.log
function getImages()
{
var I = [];
for ( var i = 0; i < 10; i++ )
{
var myImage = new Image();
myImage.src = "../img/pict" + (i+1) + ".jpg";
console.log('myImage['+(i+1)+'].width =' + myImage.width);
myImage.ind = i+1;
I.push(myImage);
}
return I;
}
вот что пишет myImage[1].width =426 myImage[2].width =0 myImage[3].width =0 myImage[4].width =0 и т. д. вплоть до десятого элемента. После перезагрузки страницы в браузере в ручную, выдает все что положено. myImage[1].width =426 myImage[2].width =425 myImage[3].width =425 myImage[4].width =432 myImage[5].width =513 и т. д. Все начинает работать. Это в Лисе и в Хроме и после последующих перезагрузок тоже все работает. В IE всё происходит с точностью до наоборот. При первой загрузке выдается массив с правильными значениями (и то не всегда все значения не нулевые) и превьюшки с ненулевыми значениями видны и при клике по ним появляется большая картинка, а при перезагрузке первое значение нормальное , остальные по нулям. Ну и соответственно одна превьюшка. Остальных не видно. После последующих перезагрузок ничего не меняется. |
bakmaks,
пока картинка незагрузилась откуда взять ширину ? |
Первая картинка как-то загружается и у нее появляется и ширина и высота. Почему у последующих нет? И почему в IE происходит все наоборот. Если в функции windows.onload() убрать
newImg.width = Images[i].width / 5; newImg.height = Images[i].height / 5; то все начинает работать во всех браузерах. Только вместо превью, картинки соответственно появляются в полный размер.
window.onload = function()
{
var phContainer = document.getElementById('photoContainer');
var Images = getImages();
for (var i =0; i < 10; i++)
{
var newImg = document.createElement('img')
newImg = Images[i];
//newImg.width = Images[i].width / 5;
//newImg.height = Images[i].height / 5;
phContainer.appendChild(newImg);
newImg.onclick = onPhotoClick;
}
}
А вот это так и не меняется. myImage[1].width =426 myImage[2].width =0 myImage[3].width =0 myImage[4].width =0 и т. д. вплоть до десятого элемента. После перезагрузки страницы в браузере в ручную, выдает все что положено. myImage[1].width =426 myImage[2].width =425 myImage[3].width =425 myImage[4].width =432 myImage[5].width =513 |
bakmaks,
выкиньте строки 7, 8 - сделайте как я вам показал -- а строки 9, 10 поставьте в функцию в onload превью. попробуйте написать такой код. |
bakmaks,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<script>
function getImages()
{
var I = [];
for ( var i = 0; i < 5; i++ )
{
var myImage = new Image();
myImage.src = "http://ru.lookatcode.com/show/9648057958996398/img" + (i+1) + "-lg.jpg";
I.push(myImage);
}
return I;
}
function onPhotoClick()
{
var photo = document.getElementById("photo");
photo.src = this.src;
}
window.onload = function()
{
var phContainer = document.getElementById('photoContainer');
var Images = getImages();
for (var i =0; i < 5; i++)
{
var newImg = new Image()
newImg.onload = function(){
this.width = this.width / 5;
this.height = 50;
}
newImg.src = Images[i].src;
newImg.onclick = onPhotoClick;
phContainer.appendChild(newImg);
}
}
</script>
</head>
<body>
<div id="photoContainer"></div>
<img id="photo" src="http://ru.lookatcode.com/show/9648057958996398/img1-lg.jpg"></img>
</body>
</html>
|
| Часовой пояс GMT +3, время: 01:29. |