Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > онлоад наступает раньше


Автор: Pokoinik 24.10.2007, 11:44
короче суть проблемы делаю предзагрузку изображений,
и почему то онлоад срабатывает до загрузки всех картинок
Код

<script type="text/javascript">
//<![CDATA[
function getAbsolutePos(el) {
    var r = { x: el.offsetLeft, y: el.offsetTop };
    if (el.offsetParent) {
        var tmp = getAbsolutePos(el.offsetParent);
        r.x += tmp.x;
        r.y += tmp.y;
    }
    return r;
}
// загружаем картинки
    var images = new Array();
    images[0] = new Image(176, 94);
    images[0].src = '/images/bpic1_r.jpg';
    images[1] = new Image(176, 94);
    images[1].src = '/images/bpic2_r.jpg';
    images[2] = new Image(176, 94);
    images[2].src = '/images/bpic3_r.jpg';
    images[3] = new Image(176, 94);
    images[3].src = '/images/bpic4_r.jpg';
    images[4] = new Image(176, 94);
    images[4].src = '/images/bpic5_r.jpg';
    images[5] = new Image(176, 94);
    images[5].src = '/images/bpic1.jpg';
    images[6] = new Image(176, 94);
    images[6].src = '/images/bpic2.jpg';
    images[7] = new Image(176, 94);
    images[7].src = '/images/bpic3.jpg';
    images[8] = new Image(176, 94);
    images[8].src = '/images/bpic4.jpg';
    images[9] = new Image(176, 94);
    images[9].src = '/images/bpic5.jpg';
// функция, котороя срабатывает по онлоад
    function init() {
// ставим картинки на место
        for(var i=1;i<6;i++) {
            var img = document.getElementById('botproj'+i);
            img.src = images[i+4].src;
        }
/*
А теперь фишка,
если убрать следующий алерт, работает везде, кроме шестого осла (в седьмом пашет),
да и сами картинки появляются уже после того как выпадает алерт
*/
        alert('Stop!');
        var botproj1 = getAbsolutePos(document.getElementById('botproj1'));
        var botproj2 = getAbsolutePos(document.getElementById('botproj2'));
        var botproj3 = getAbsolutePos(document.getElementById('botproj3'));
        var botproj4 = getAbsolutePos(document.getElementById('botproj4'));
        var botproj5 = getAbsolutePos(document.getElementById('botproj5'));
        $('<img onmouseout="$(\'#botproj11\').fadeOut(800);" src="/images/bpic1_r.jpg" id="botproj11" style="width:176;height:94px;position:absolute;z-index:100;top:'+botproj1.y+'px;left:'+botproj1.x+'px;" />').hide().appendTo('#botproj111');
        $('<img onmouseout="$(\'#botproj22\').fadeOut(800);" src="/images/bpic2_r.jpg" id="botproj22" style="width:176;height:94px;position:absolute;z-index:100;top:'+botproj2.y+'px;left:'+botproj2.x+'px;" />').hide().appendTo('#botproj222');
        $('<img onmouseout="$(\'#botproj33\').fadeOut(800);" src="/images/bpic3_r.jpg" id="botproj33" style="width:176;height:94px;position:absolute;z-index:100;top:'+botproj3.y+'px;left:'+botproj3.x+'px;" />').hide().appendTo('#botproj333');
        $('<img onmouseout="$(\'#botproj44\').fadeOut(800);" src="/images/bpic4_r.jpg" id="botproj44" style="width:176;height:94px;position:absolute;z-index:100;top:'+botproj4.y+'px;left:'+botproj4.x+'px;" />').hide().appendTo('#botproj444');
        $('<img onmouseout="$(\'#botproj55\').fadeOut(800);" src="/images/bpic5_r.jpg" id="botproj55" style="width:176;height:94px;position:absolute;z-index:100;top:'+botproj5.y+'px;left:'+botproj5.x+'px;" />').hide().appendTo('#botproj555');
    }
//    $(document).ready(function() {
        
//    });
//]]>
</script>

полный код:
ccf-belarus.org

Автор: vasac 24.10.2007, 20:39
И правильно. Он срабатывает после загрузки всех статично вставленных в HTML ресурсов.
Динамически созданные <IMG>, <script> и т.п. на onLoad не влияют

Автор: Pokoinik 25.10.2007, 09:24
vasac, а как узнать загрузились картинки или нет?

Автор: vasac 25.10.2007, 09:50
Повесить на них onLoad.
Либо проверять через время width или hight

Автор: Pokoinik 25.10.2007, 10:17
Цитата(vasac @  25.10.2007,  09:50 Найти цитируемый пост)
Повесить на них onLoad.

не совсем понял, можешь показать пример?

Автор: vasac 25.10.2007, 10:58
Если у вас фиксированный список картинок, думаю лучше сделать их обычным HTML, только в скрытом диве. Тогда и onload будет работать после их загрузки (я так думаю...).

Автор: ksnk 25.10.2007, 16:05
Цитата(Pokoinik @  25.10.2007,  10:17 Найти цитируемый пост)
Цитата(vasac @  25.10.2007,  09:50 )
Повесить на них onLoad.
не совсем понял, можешь показать пример? 

http://forum.vingrad.ru/forum/topic-171734.html#

Автор: Starikan 25.10.2007, 16:20
Посмотри на файл подгрузки JavaScript кода и на системные разрешения вариантов разных элементов кодов

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)