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


Автор: Sinneren 2.12.2010, 10:49
Имеется html файл, в котором три блока. При наведении на меню в 1 блоке, изменяется css второго блока и добавляется туда 2 меню. При наведении на меню 2 блока, добавляется содержимое 3 блока через html подстановкой текста из переменных. 

Весь скрипт расположен в:
Код

$(document).ready(function(){});


Внутри описаны переменные, работаю со старой версией, макетной, поэтому извините за ненаглядность. на серваке уже переделанный шаблон и переменные заполнены увесистым текстом(600 символов в среднем).
Код

    var txta11 = "<h1>111</h1><p><br>Одним из самых популярных материалов на сегодняшний день</p>";
    var txta12 = "<h1>Текст</h1>";
    var txta13 = "<h1>Текст333</h1>";
    var txta21 = "<h1>222111</h1>";
    var txta22 = "<h1>222222</h1>";
    var txta23 = "<h1>222333</h1>";
    var txta31 = "<h1>333111</h1>";
    var txta32 = "<h1>333222</h1>";
    var txta33 = "<h1>333333</h1>";


Тут пример события при наведении на ссылку 1 блока.в нём задаю безымянную функцию, в которой подставляю данные во второй блок и инициализирую функции для 3 блока. Далее под #inform и #risunok подразумеваются DIV'ы.
Код

    $("#a1").hover(
    function(){
        $("#risunok").html("<img src='img/slash.png'>"+
        "<ul class='second_menu'><li><a href=# id=\"a11\">Металлочерепица</a></li>"+
        "<li><a href=# id=\"a12\">Профнастил кровельный</a></li>"+
        "<li><a href=# id=\"a13\">Фальцевая кровля</a></li>"+
        "</ul>");
        hovera11();
        hovera12();
        hovera13();
    });


А теперь описываю эти функции для 3 блока
Код

    function hovera11(){
        $("#a11").hover(function(){
            $("#inform").html(txta11);
        });
    }
    function hovera12(){
        $("#a12").hover(function(){
            $("#inform").html(txta12);
        });
    }
    function hovera13(){
        $("#a13").hover(function(){
            $("#inform").html(txta13);
        });
    }


в первом блоке 3 ссылки. во 2 от 3 - 10. и количество вложений соответственно возрастает + как я уже писал выше увесистые переменные. 
пробовал,конечно, делать одной функцие для 3 блока через обращение $(".second_menu a") и подстановкой в переменную ID this.attr("id"), но работать это не захотело. вообще если хоть одну функцию для 3 блока убрать, то не работает. 
пробывал загружать из текстового файла-та же беда, не работает.

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

Автор: CruorVult 2.12.2010, 11:15
Цитата(Sinneren @  2.12.2010,  10:49 Найти цитируемый пост)
как решить проблему?

Подгружать блоки ajax-ом.

Автор: Sinneren 3.12.2010, 10:08
Да не похоже. не подгружает он их.
положил содержимое переменных в файлы. поставил имена файлов как ID ссылок. Добавил событие клика и прикрутил функцию.
Код

$("#a1").hover(
    function(){
        $("#a3,#a2").css("background","none");
        $("#a1").css("background","url(img/cursor.png) no-repeat 100% 0");
        $("#risunok").css("background","none");
        $("#risunok").html("<img src='img/slash.png'>"+
        "<ul class='second_menu'><li><a href=# id=\"a11\" onclick=\"ahover();\">Металлочерепица</a></li>"+
        "<li><a href=# id=\"a12\" onclick=\"ahover();\">Профнастил кровельный</a></li>"+
        "<li><a href=# id=\"a13\" onclick=\"ahover();\">Фальцевая кровля</a></li>"+
        "</ul>");
    
    });

Сама функция, которая грузит через JQuery.load. Вернее должна.но не грузит ничего. 
такие сложности с циклом и записи через docement....... потому что тупо даже в сплывающем списке не выходит ни attr, ни getAttribute, поэтому в функцию не отправить this и по ней не определить id вышеописанными способами.
Код

    function ahover(){
        for(i=0;i<=document.getElementsByTagName("a").length;i++){
            $("#inform").load('ajax/'+document.getElementsByTagName("a").item(i).getAttribute("id")+'.htm');
                }
        }


Добавлено через 8 минут и 17 секунд
Такой метод, без JQuery:
Код

function showContent(link) {  
   
         var cont = document.getElementById('inform');  
          
         var http = createRequestObject();  
         if( http )   
         {  
             http.open('get', link);  
             http.onreadystatechange = function ()   
             {  
                 if(http.readyState == 4)   
                 {  
                     cont.innerHTML = http.responseText;  
                 }  
             }  
             http.send(null);      
         }  
     }  
   
     // создание ajax объекта  
     function createRequestObject()   
     {  
         try { return new XMLHttpRequest() }  
         catch(e)   
         {  
             try { return new ActiveXObject('Msxml2.XMLHTTP') }  
             catch(e)   
             {  
                 try { return new ActiveXObject('Microsoft.XMLHTTP') }  
                 catch(e) { return null; }  
             }  
         }  
     }  


+

Код

    $("#a1").hover(
    function(){
        $("#a3,#a2").css("background","none");
        $("#a1").css("background","url(img/cursor.png) no-repeat 100% 0");
        $("#risunok").css("background","none");
        $("#risunok").html("<img src='img/slash.png'>"+
        "<ul class='second_menu'><li><a href=# id=\"a11\" onclick=\"showContent('ajax/a11.html')\">Металлочерепица</a></li>"+
        "<li><a href=# id=\"a12\" onclick=\"showContent('ajax/a12.html')\">Профнастил кровельный</a></li>"+
        "<li><a href=# id=\"a13\" onclick=\"showContent('ajax/a13.html')\">Фальцевая кровля</a></li>"+
        "</ul>");
    
    });


Не работает тоже.

Автор: CruorVult 3.12.2010, 11:01
Зачем для всех ссылок сразу грузить? Нужно только для выбраной, при наведении:
Код

<a href=# id=\"a12\" onclick=\"ahover('a12');\">Профнастил кровельный</a>

Код

function ahover(s){       
            $("#inform").load('ajax/'+s+'.htm');                
       




Автор: Sinneren 3.12.2010, 11:37
Всё равно не работает... не пойму где ошибся.
Прилепляю архив со всеми кишками. Если не трудно, гляньте, пожалуйста.

Автор: CruorVult 3.12.2010, 11:56
Цитата(Sinneren @  3.12.2010,  11:37 Найти цитируемый пост)
Прилепляю архив со всеми кишками

не могу скачать, вернее могу но не файл. залейте куда-то.

Автор: Sinneren 3.12.2010, 12:17
Цитата(CruorVult @ 3.12.2010,  11:56)
залейте куда-то.

http://zalil.ru/30070574

Автор: CruorVult 3.12.2010, 12:41
метод ahover вынисите из $(document).ready и будет счастье smile 

Автор: Sinneren 3.12.2010, 15:21
Цитата(CruorVult @ 3.12.2010,  12:41)
метод ahover вынисите из $(document).ready и будет счастье smile

Странно. но по нулям. Всё также глухо. 

Автор: CruorVult 3.12.2010, 15:31
какая ошибка? 
В опере через консоль ошибок можно посмотреть.

Добавлено @ 15:33
там вы еще кавычку пропустили
Код

$("#a1").hover(
    function(){
        $("#a3,#a2").css("background","none");
        $("#a1").css("background","url(img/cursor.png) no-repeat 100% 0");
        $("#risunok").css("background","none");
        $("#risunok").html("<img src='img/slash.png'>"+
        "<ul class='second_menu'><li><a href='#' id=\"a11\" onclick=\"ahover('a11');\">Металлочерепица</a></li>"+
        "<li><a href='#' id=\"a12\" onclick=\"ahover('a12');\">Профнастил кровельный</a></li>"+
        "<li><a href='#' id=\"a13\" onclick=\"ahover('a13');\">Фальцевая кровля</a></li>"+
        "</ul>");
    
    });

Автор: Sinneren 3.12.2010, 16:52
про кавычку знал исправил. 
не понос так золотуха.
оказывается работает в FF,Opera,IE. не работает в Хроме. 
на наличие тормозов еще тоже не проверял smile 
для JS <!--[if lt IE 7]><script type=text/javascript src=""></script> <![endif]-->  такой вариант прокатит, как исключение?

Автор: CruorVult 3.12.2010, 20:13
Sinneren, говорю, посмотрите ошибку!
Опера->Инструменты->Дополнительно->Консоль ошибок.

Автор: Sinneren 4.12.2010, 11:41
ошибки только с css и не связаны с этим блоком. в скриптах ни одной ошибки не находит.

Автор: CruorVult 4.12.2010, 12:37
Тогда не знаю! Я только вынес ahover из $(document).ready и у меня всё заработало.

Добавлено через 1 минуту и 10 секунд
Может вы что-то в скрипте меняли перед этим. Попробуйте скачать то, что вылаживали и сделать то, что  я сказал.

Автор: Sinneren 4.12.2010, 18:20
именно так и сделал. у вас в хроме заработало? 

Автор: Sinneren 6.12.2010, 11:18
Вынес всё в такие функции, теперь всё работает отлично. Спасибо. 

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