Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: onload в opera
 
 автор: sidPR   (14.04.2007 в 02:07)   письмо автору
 
 

помогите в IE and FF все гуд а вот опера не понимает когда я ставлю onload на Img

   
 
 автор: sidPR   (14.04.2007 в 02:09)   письмо автору
 
   для: sidPR   (14.04.2007 в 02:07)
 


<div class='load_img' id='load_22'>Загрузка модели...</div>
<img style="display:none" id='img_22' src="11042007_1442540.jpg" onload="alert('test');img_load('22');">
<script>
ob_load = document.getElementById('load_'+id);
    ob_load.style.display='none';
    ob_con = document.getElementById('img_'+id);
    ob_con.style.display='block';
</script>

   
 
 автор: yuk   (14.04.2007 в 10:32)   письмо автору
 
   для: sidPR   (14.04.2007 в 02:09)
 

В одной книжке прочитал следующее:

У объекта Image также есть обработчик событий onLoad. Это событие вызывается, когда браузер выводит на дисплей изображение. Обратите внимание, что данное событие происходит не в процессе загрузки изображения клиенту, а в течение вывода на дисплей этого изображения.

Соответственно, если поставить <img style="display:block"> - то все работает и в Опере. Если верить книге, то проблема получается вовсе не в Опере, а наоборот, в IE и FF.

   
 
 автор: sidPR   (14.04.2007 в 12:27)   письмо автору
 
   для: yuk   (14.04.2007 в 10:32)
 

Так как быть ? я чет не понял

   
 
 автор: yuk   (14.04.2007 в 12:33)   письмо автору
 
   для: sidPR   (14.04.2007 в 12:27)
 

А какой результат ожидается? А то в вашем скрипте как-будто чего-то недостает, или что-то лишнее.

   
 
 автор: sidPR   (14.04.2007 в 12:35)   письмо автору
 
   для: yuk   (14.04.2007 в 12:33)
 



<style>
.load_img{
background-color: #DDE4E5;
BORDER: #000000 1px dotted;
PADDING:10px;
color:#9CA8B0;
width:80%;
FONT-WEIGHT: bold; 
FONT-SIZE: 12px;
FONT-FAMILY: Arial, Helvetica, sans-serif;
}

</style>

<table width='251' border='1' cellspacing='0' cellpadding='0' style='border-collapse: collapse;'>
<tr>
<td align="center" height="376" valign="middle">
<div class='load_img' id='load_22'>Загрузка модели...</div>
<img style="display:none" id='img_22' src="11042007_1442540.jpg" onload="alert('test');img_load('22');">
</td>
</tr>
</table>




<script>
function img_load(id){
    alert("ok");
    ob_load = document.getElementById('load_'+id);
    ob_load.style.display='none';
    ob_con = document.getElementById('img_'+id);
    ob_con.style.display='block';
    alert("ok");
}
</script>

   
 
 автор: yuk   (14.04.2007 в 13:07)   письмо автору
 
   для: sidPR   (14.04.2007 в 12:35)
 

Прикол в том, что в Опере событие onload для <img> происходит тогда, когда картинка выводится на экран, а не при загрузке в память. Для создания такого эффекта можно воспользоваться прозрачностью (opacity). Изображение будет выводиться на экран, только будет полностью прозрачным. Только свойство это работает вроде только в IE=>7, Opera=>9 и т.д. Вобщем, в последних версиях браузеров.
Если делать с прозрачностью, то можно так:

<img style="opacity:0.0" id='img_22' src="11042007_1442540.jpg" onload="alert('test');img_load('22');"> 

<script> 
function img_load(id){ 
    alert("ok"); 
    ob_load = document.getElementById('load_'+id); 
    ob_load.style.display='none'; 
    ob_con = document.getElementById('img_'+id); 
    ob_con.style.opacity='1.0'; 
    alert("ok"); 

</script>

   
 
 автор: sidPR   (14.04.2007 в 13:10)   письмо автору
 
   для: yuk   (14.04.2007 в 13:07)
 

короче проще говоря лучше обойтись без прилоудера на img... ибо не всезде правильно может работать и вообще работать

   
 
 автор: yuk   (14.04.2007 в 13:29)   письмо автору
 
   для: sidPR   (14.04.2007 в 13:10)
 

Вот дела. Очень часто для отображения чего-либо использовал visibility, а не display, а тут вовсе не обратил внимания. Просто ставишь

<img style="visibility:hidden" id='img_22' src="11042007_1442540.jpg" onload="alert('test');img_load('22');">

<script> 
function img_load(id){ 
    alert("ok"); 
    ob_load = document.getElementById('load_'+id); 
    ob_load.style.display='none'; 
    ob_con = document.getElementById('img_'+id); 
    ob_con.style.visibility='visible'; 
    alert("ok"); 

</script>

и все везде работает

   
 
 автор: sidPR   (14.04.2007 в 13:44)   письмо автору
 
   для: yuk   (14.04.2007 в 13:29)
 

а у меня onload в опере вообще не фурычить алерт даже не выходит

   
 
 автор: yuk   (14.04.2007 в 13:54)   письмо автору
 
   для: sidPR   (14.04.2007 в 13:44)
 

перенеси скрипт в <head>, все будет ОК

   
 
 автор: sidPR   (14.04.2007 в 23:50)   письмо автору
 
   для: yuk   (14.04.2007 в 13:54)
 

а такой метод во всех браузерах будет нормально воспринят?

   
 
 автор: sidPR   (15.04.2007 в 20:29)   письмо автору
 
   для: sidPR   (14.04.2007 в 23:50)
 

А если я сам при нажатии на какой либо объект меняю src="" как можно отследить загрузку Img ? тоесть при нажатии на объект должен появлятся мой див а потом опять картинка как она вся загрузится (появится) ?

   
 
 автор: yuk   (15.04.2007 в 22:57)   письмо автору
 
   для: sidPR   (15.04.2007 в 20:29)
 

Да, метод должен работать везде. Во всяком случае в IE, Opera, FF - работает отлично. Как я понял, с переносом скрипта в head все получилось?
А для смены src думаю можно сделать приблизительно так:

function new_img(id,img_name){    
    alert("Начало смены изображения");
    ob_con = document.getElementById('img_'+id);
    ob_con.style.visibility='hidden';
    ob_load = document.getElementById('load_'+id);
    ob_load.style.display='block';        
    ob_con.src="#";
    ob_con.src=img_name;    
    alert("Окончание смены изображения");
}

<td valign="top">
    <a href="#" onclick="new_img('22','img1.jpg')">Рисунок_1</a><br>
    <a href="#" onclick="new_img('22','img2.jpg')">Рисунок_2</a>
</td>

Ну, разумеется, скрипт тоже размещаешь в head.
Немножко пронаблюдал различия работы этой штуки. Во всех браузерах, что есть у меня в наличии, при смене изображения метод onload вызывается сразу после смены src, а в Опере - после завершения работы скрипта. С чем это связано - затрудняюсь ответить, но при таком решении - результат одинаковый. (если поубирать alert-ы, разумеется). Но это следует учесть, если в скрипт будет что-нибудь дописываться.

   
 
 автор: sidPR   (15.04.2007 в 23:10)   письмо автору
 
   для: yuk   (15.04.2007 в 22:57)
 


function img_load(id){ 
    ob_load = document.getElementById('load_'+id);  
    ob_load.style.display='none';  
    ob_con = document.getElementById('img_'+id);  
    ob_con.style.visibility='visible';  
}  
function color(id, name, color, namber, txt){
    if(name && name != 0){
    obj = document.getElementById('img_'+id);
    obj_t = document.getElementById(txt+"t");
    obj_c =  document.getElementById(id+"c");
    obj_n =  document.getElementById(id+"n");
    obj.src = "photo/profile/"+name;
    obj_n.innerHTML = namber;
    if(t)
    document.getElementById(t+"t").style.color = "#9CA8B0";
    obj_c.style.backgroundColor = color;
    obj_t.style.color = "#FFFFFF";
    }
}


я вот хотел в самой функции color встроить чтото типо запуска функции img_load .. может есть в JS чтото чем можно в скрипте мол указать пока не загрузицо или не появится не менять src ... =\

   
 
 автор: yuk   (16.04.2007 в 12:35)   письмо автору
 
   для: sidPR   (15.04.2007 в 23:10)
 

Запустить можно, просто указав img_load(id);
Или сменить src, при этом выполнится метод onload и вызовет эту ф-цию.
Или просто переписать всю функцию в нужное место.

А это я что-то не пойму:

может есть в JS чтото чем можно в скрипте мол указать пока не загрузицо или не появится не менять src ... =\

   
 
 автор: sidPR   (16.04.2007 в 14:37)   письмо автору
 
   для: yuk   (16.04.2007 в 12:35)
 

ааа понял я думал что Onload действует только при рефреше страници зугрузки ее тоесть а после уже не срабатывает... разобрался спасибо

   
 
 автор: sidPR   (16.04.2007 в 14:40)   письмо автору
 
   для: sidPR   (16.04.2007 в 14:37)
 

Ток у меня одра проблема если я нажимаю по одному объекту 2 раза подрят типо котоырй уже загружался этим методом у меня див не пропадает с загрузкой и картинка не появляется... только если я нажму на другой а потом вернусь :(

   
 
 автор: yuk   (16.04.2007 в 15:56)   письмо автору
 
   для: sidPR   (16.04.2007 в 14:40)
 

Это в Опере? У меня в ней была такая беда, для чего я и сделал в функции

    ob_con.src="#"; 
    ob_con.src=img_name;

Это решает проблему в Опере, и не мешает остальным. А ты наверное убрал ob_con.src="#"; как лишнее.

   
 
 автор: sidPR   (16.04.2007 в 16:50)   письмо автору
 
   для: yuk   (16.04.2007 в 15:56)
 

Да точно... странность какаето -=\

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования