глюк в Firefox ?
Здравствуйте такая проблема при добавлении в дерево сбиваются значения style.left и style.top (устанавливаются не те значения), самое что интересное только при первом событии клика, второе событие клика проходит правильно. в IE такой проблемы не возникает.
Другими словами при создании объекта img устанавливаются по умолчанию значения style.left и style.top как будто мы не установили im.setAttribute("style").Кроме того возможно при первом событии firefox не учитывает im.height и im.width отрывок кода: case "click": var im=document.createElement("img"); var s=g.src; im.src=s.substring(0,s.lastIndexOf('.'))+"kadr"+s.substring(s.lastIndexOf('.'),s.length); im.className="imagebig"; im.setAttribute("name","big"); im.setAttribute("style","left:"+String((988-im.width)/2)+"px;"+"top:"+String(g.offsetTop-im.height/4)+"px;"); g.parentNode.appendChild(im); goonlis(remlis); addlis("1",bigimg,im); break; |
Цитата:
im.style.left = String((988-im.width)/2)+"px"; im.style.top = String(g.offsetTop-im.height/4)+"px"; |
Цитата:
Заметил что typуface выдает "auto" в firebug ! Самое интересное что когда через firebug проходишь строки с установкой стиля - firefox нормально устанавливает позицию элемента! var xss=document.getElementsByName("big")[0]; if (window.getComputedStyle) var typeface = window.getComputedStyle(im, null).width; |
Мне кажется что к моменту запроса картинка еще не загрузилась, поэтому ее ширина и не доступна (еще). Как насчет прицепить обработчик события onload к создаваемой картинке и туда перенести нужный код?
|
Цитата:
у firefox вылетает событие load при загрузке изображений, а у IE нет. поэтому надо или image.complete, но лучше image.onload !!! решение ошибки: case "click": var s=g.src; var im=document.createElement("img"); im.src=s.substring(0,s.lastIndexOf('.'))+"kadr"+s.substring(s.lastIndexOf('.'),s.length); im.onload=function(){ im.className="imagebig"; im.setAttribute("name","big"); im.setAttribute("style","left:"+String((988-im.width)/2)+"px;"+"top:"+String(g.offsetTop-im.height/3)+"px;"); document.body.appendChild(im); goonlis(remlis); addlis("1",bigimg,im);} break;} |
Цитата:
|
Цитата:
необязательно до или после так как это событие ,его можно после или перед ставить разницы нет никакой. |
Не надо ссылаться на книги по JavaScript, 99% из них не выдерживают никакой критики. Лучше взять и попробовать
(function f(i) { var img = new Image(); img.onload = function() { alert('loaded'); if (i < 3) { f(i + 1); } }; img.src = 'http://javascript.ru/forum/images/ca_serenity/misc/logo.gif'; })(0); |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 20:52. |