скрипт галереи
помогите: при клике на изображение оно не загружается с первого раза. а в ie8 вообще не загружается(
<script language="JavaScript">
function viewPicture(imgUrl) {
//debugger;
var divLay = document.createElement("div");//создаем мегаслой со всем содержимым
divLay.setAttribute("id", "gallery");
document.body.appendChild(divLay);//добавили в body
var imgTitle = imgUrl.firstChild.title;
var divImg = document.createElement("div");//создаем див для картинки
divImg.setAttribute("id","imgcont");
divImg.innerHTML = "<a href=''>закрыть</a><p>картинка, на ней "+imgTitle+"</p>";
divLay.appendChild(divImg)// div#imgcont поместили в div#gallery
var objImgL = document.createElement("img");//создали объект картинку
objImgL.setAttribute("src","img/lightbox-ico-loading.gif"); // адрес картинки загрузки
objImgL.setAttribute("style","margin-top: 200px");
divImg.appendChild(objImgL); // определили ее в див divImg
var objImg = document.createElement("img");//создали объект картинку
objImg.setAttribute("src",imgUrl); //установили ее адрес
objImg.setAttribute("style","visibility: hidden");
divImg.appendChild(objImg); // определили ее в див divImg
alert (divImg.firstChild);
alert (objImg.height);
alert (objImg.width);
/*if (objImg.width > 0) { */
var heightImg = objImg.height; //изменяем высоту картинки
if (heightImg > 600) { //если картинка больше по высоте 600px, меняем ее высоту на 600, а ширину пропорционально
objImg.width = objImg.width*(600/objImg.height);
objImg.height = 600;
}
var widthImg = objImg.width; //изменяем ширину картинки
if (widthImg > 1000) { //если картинка больше 1000px, меняем ее высоту на 1000, а ширину пропорционально
objImg.height = objImg.height*(1000/objImg.width);
objImg.width = 1000;
}
//если картинка уже загрузилась
if (objImg.width > 0){
widthImg = objImg.width + 20; //узнаем ширину картинки, которая будет показана, увеличиваем на 20px
}
else {
widthImg = 900;
}
divImg.appendChild(objImg); //добавляем ее в див для картинки
setTimeout( function() { divImg.removeChild(objImgL) } , 950) //удалили картинку из DOM
setTimeout( function() { objImg.setAttribute("style","visibility:visible") } , 1000)
divImg.style.width = widthImg+'px'; // Устанавливаем ширину диву, в котором картинка в зависимости от ее новой ширины
/* }
else {
alert (objImg.width);
alert ('картинка еще не загрузилась');
}*/
divLay.onclick = function () {
//divLay.setAttribute("style", "display:none;"); //скрываем слой при клике на нем
document.body.removeChild(divLay); //NB! удаляет элемент из DOM
}
}
</script>
Код:
<div id="thumb_block" class="thumb_block"> |
а зачем setAttribute? Попробуй свойства назначить. И вообще может можно сделать меньше кода, если почаще innerHTML использовать?
|
Цитата:
|
B~Vladi,
они друг друга не заменяют, а прекрасно дополняют. :) |
попытался сократить код... сократил... лучче не стало...
все равно не хочит с первого раза картинку открывать
function viewPicture(imgUrl) {
debugger;
hiddenImg = new Image();
hiddenImg.src = imgUrl;
var heightImg = hiddenImg.height;
if (heightImg > 600) {
hiddenImg.width = hiddenImg.width*(600/hiddenImg.height);
hiddenImg.height = 600;
}
h = hiddenImg.height;
var widthImg = hiddenImg.width;
if (widthImg > 1000) {
hiddenImg.height = hiddenImg.height*(1000/hiddenImg.width);
hiddenImg.width = 1000;
}
w = hiddenImg.width;
var divLay = document.createElement("div");
divLay.setAttribute("id", "gallery");
divLay.innerHTML = "<div id='imgcont'><a href=''>закрыть</a><p>картинка</p><img src="+imgUrl+" width="+w+" height="+h+" /></div>";
document.body.appendChild(divLay);
divLay.onclick = function () {
document.body.removeChild(divLay);
}
}
как вариант осталось сократить до нуля :)) |
о... начианет проясняться, что ты делаешь. Лучше назначь обработчик load изображения (до назначения src), в котором делай последующие действия и вставляй в dom загруженную картинку, а не еще один img
|
переделал, ввел onload. только в ie все равно не все картинки грузятся. и если каждую картинку по одному разу открыть, второй раз ресайз не работает...((
function viewPicture(imgUrl) {
//debugger;
hiddenImg = new Image();
hiddenImg.src = imgUrl;
hiddenImg.onload=function resize() {
//alert ('onload');
hiddenImgHeight = hiddenImg.height;
hiddenImgWidth = hiddenImg.width;
// alert(hiddenImgHeight+' высота');
// alert(hiddenImgWidth+' ширина');
if (hiddenImgHeight > 600) {
hiddenImg.width = hiddenImg.width*(600/hiddenImg.height);
hiddenImg.height = 600;
}
if (hiddenImgWidth > 1000) {
hiddenImg.height = hiddenImg.height*(1000/hiddenImg.width);
hiddenImg.width = 1000;
}
// alert(hiddenImg.width+' высота');
// alert(hiddenImg.height+' ширина');
} //hiddenImg.onload=function()
var divLay = document.createElement("div");
divLay.setAttribute("id", "gallery");
divLay.innerHTML = "<div id='imgcont'><a href=''>закрыть</a><p>картинка</p></div>";
document.body.appendChild(divLay);
document.getElementById("imgcont").appendChild(hiddenImg);
divLay.onclick = function () {
document.body.removeChild(divLay);
}
}
|
Цитата:
|
я немного недогоняю, так как начал совсем недавно изучать javascript, так, чтобы свое что-то написать... если я назначу src после onload, что тогда браузер загружать будет, чьей загрузки мы ждем?
вот еще стили:
<div id="thumb_block" class="thumb_block">
<a href="img/image-01.jpg" onclick="viewPicture(this); return false;"><img src="img/thumb-01.jpg" title="зеленый кактус" /></a>
<a href="img/image-02.jpg" onclick="viewPicture(this); return false;"><img src="img/thumb-02.jpg" title="море" /></a>
<a href="img/image-03.jpg" onclick="viewPicture(this); return false;"><img src="img/thumb-03.jpg" title="солнце" /></a>
<a href="img/image-04.jpg" onclick="viewPicture(this); return false;"><img src="img/thumb-04.jpg" title="вода" /></a>
</div>
<style>
/* CSS Document
* { -moz-box-sizing: border-box; box-sizing: border-box; } */
html { height: 100%; width: 100%; /*min-widht: 980px*/ }
body { padding: 0; margin: 0; width: 100%; height: 100%; background: #fff; font-family: Arial, sans-serif; font-size: 75%; min-widht: 980px}
DIV.conteiner { min-height:100%; height:auto !important; height:100%; margin: 0 auto -50px;}
DIV.footer, DIV.push {height:50px;}
DIV.footer { background: #006633; color: #fff; font-size: 10px; text-align: right; padding-top: 10px; padding-right: 10px}
DIV.conteiner h1 { margin-left: 60px}
div.thumb_block { margin: 50px 0 0 350px;}
/*div#overlay { height: 100%; widht: 100%; position: fixed; top: 0; left: 0; background: #0033CC; z-index: 5 }*/
div#gallery { height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 10; /*background: #006633; opacity: 0.8; filter: alpha(opacity=80); */ background: url(../img/fon.png) repeat}
div#imgcont { position: relative; z-index: 15; border: 1px solid #fff; margin: 50px auto; text-align: center; background: #006600; overflow: hidden}
div#imgcont img { margin: 0px; margin-bottom: 10px}
div#imgcont p { color: #fff; }
div#imgcont a { color: #FFFFFF;}
div#divPre { overflow: hidden; height: 0; width: 0; }
</style>
|
| Часовой пояс GMT +3, время: 12:41. |