Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2014, 00:40
Новичок на форуме
Отправить личное сообщение для schnitzer Посмотреть профиль Найти все сообщения от schnitzer
 
Регистрация: 19.10.2010
Сообщений: 8

Ajax и jQuery с индикатором загрузки, после загрузки контента
Ajax и jQuery с индикатором загрузки, после загрузки контента
Всем привет!
Задача. На странице есть меню. По нажатию на элемент меню – сначала исчезает вся прочая информация с разными id. Потом появляется индикатор загрузки, и загружается контент в подготовленный блок из отдельного файла html. Новая информация отображается только после полной загрузки контента, находящегося в отдельном файле.
Для отображения контента, находящегося на странице, после его полной загрузки, посоветовали следующее:
Код:
<script type="text/javascript">            
function init() {
if (arguments.callee.done) return;
arguments.callee.done = true;
$('#content').fadeIn (1000);
};
window.onload = init;
</script>
(#content {display:none;})
Но вопрос в подгружаемой информация из другого файла, так что это не подходит.
Сейчас код выглядит так:

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title>тестирование</title>
    <script type="text/javascript" src='http://code.jquery.com/jquery-latest.min.js'></script>
    <style type="text/css">
        p#menu_element {
            text-decoration: underline;
            cursor: pointer;
        }

        img#preloader {
            display: none;
        }
    </style>

</head>

<body>
    <p id="menu_element">Элемент меню</p>

    <p id="el1">Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
    <p id="el2">Nunc dictum, lacus ut malesuada pharetra, lacus tortor dapibus magna, eu porttitor nisl enim et magna.</p>
    <p id="el3">Morbi congue odio ac lacus lobortis, sed tempor lorem porttitor. </p>

    <img id="preloader" src="loading.gif" alt="preloader" />

    <div id="container"></div>

    <script type="text/javascript">
        $(document).ready(function () {
            $('#menu_element').click(function () {
                $('#el1, #el2, #el3').fadeOut(200);
                $('#preloader').fadeIn(150);
                $('#container').load('loadpage.html');
            });
        });
    </script>

</body>

</html>
Код отдельного файла loadpage.html:

Код:
<div id="new_content">
    <img src="picbig.png" alt="img" width="640" height="980" />
</div>
Я хочу добавить #new_content {display:none;}, и в скрипте после полной загрузки добавить #preloader fadeOut(240), а #new_content fadeIn(500), но не знаю как.
P. S. Полный чайник, если можно, напишите поподробней. И, хотелось бы, на jQuery, JS совсем не знаю, так что исходный код предпочтительно кардинально не менять.

Заранее спасибо!!
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2014, 01:23
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В функцию .load() вторым аргументом передай функцию, в которой скрвай прелоадер.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2014, 14:57
Новичок на форуме
Отправить личное сообщение для schnitzer Посмотреть профиль Найти все сообщения от schnitzer
 
Регистрация: 19.10.2010
Сообщений: 8

Не помогает
Код:
<script type="text/javascript">

        $('#menu_element').click(function () {
            $('#el1, #el2, #el3').fadeOut(200);
            $('#preloader').fadeIn(150);

            $('#container').load('loadpage.html', function () {
                $('#preloader').hide();
                $('#new_content').show();
            });   
        });

    </script>
Все равно вижу процесс загрузки картинок
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2014, 15:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А.. Про картинки не дочитал в вопросе.
Ну тогда нужно сразу после вставки html кода обойти созданные картинки, повесить на каждую обоработчик события load. Некоторые из картинок могут быть закэшированными, они отобразятся сразу и у них уже не произойдет событие load. Об этом сигнализирует свойство .complete. Мимо таких проходим мимо. Когда все картинки загрузятся - отображаем див.
И кстати тут метод .load() для подгрузки html не пойдет. Используй $.ajax или $.get
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2014, 15:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну а вобще, лучше отображать див сразу, а процесс загрузки каждой картинки отображать прям на ней. Это и в реализации будет проще.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 18.03.2014, 18:02
Новичок на форуме
Отправить личное сообщение для schnitzer Посмотреть профиль Найти все сообщения от schnitzer
 
Регистрация: 19.10.2010
Сообщений: 8

Код:
<script type="text/javascript">
        $('#menu_element').click(function () {
            $.ajax({
                url: "loadpage.html",
                cache: false,
                success: function (html) { $("#container").html(html); }
            });
        });
    </script>
Тоже самое, не получается, чего только не перепробовал...
Помогите!!
Ответить с цитированием
  #7 (permalink)  
Старый 18.03.2014, 18:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от schnitzer
чего только не перепробовал
Читать ответы на свои вопросы пробовал? Цитирую:
Сообщение от danik.js
нужно сразу после вставки html кода обойти созданные картинки, повесить на каждую обоработчик события load. Некоторые из картинок могут быть закэшированными, они отобразятся сразу и у них уже не произойдет событие load. Об этом сигнализирует свойство .complete. Мимо таких проходим мимо. Когда все картинки загрузятся - отображаем див.
Сообщение от danik.js
Ну а вобще, лучше отображать див сразу, а процесс загрузки каждой картинки отображать прям на ней. Это и в реализации будет проще.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
resize div после ajax запроса Mukhtar AJAX и COMET 6 01.12.2013 00:39
Не работает ajax в паре с jquery DedMa3ajjj AJAX и COMET 1 01.09.2013 14:15
Как загрузить и заставить работать скрипт после загрузки frame? Chifu Общие вопросы Javascript 3 13.04.2013 14:18
После события checked запустить ajax, выходит: Сначала ajax потом checked??? Андрей Лебедев Элементы интерфейса 0 09.02.2013 13:07