Проблема с выводом изображений из массива
Есть некоторое кол-во изображений, приблизительно 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:39. |