Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как узнать, когда закончилась загрузка (https://javascript.ru/forum/offtopic/33642-kak-uznat-kogda-zakonchilas-zagruzka.html)

dmitry111 30.11.2012 18:29

Как узнать, когда закончилась загрузка
 
На странице меняется разметка (при этом сама страница не меняется)

Соответственно если в разметки присутствуют изображения, то идет запрос на сервер за ними.

Разметка в строке! То есть изменение происходит так:

var newHTML = "<div><p>..<p><div><img>..</img> и т.п.";
element.innerHTML = newHTML;


Как узнать когда сервер вернет все запрашиваемые элементы?

vadim5june 30.11.2012 18:43

наверно надо написать onload к каждой img
var newHTML = "<div><p>..<p><div><img onload=f()>..</img> и т.п.";

и функцию f которая посчитает сколько загружено

dmitry111 30.11.2012 20:53

vadim5june,

можно, но разве нельзя это сделать как нибудь проще не изменяя строку?

Gozar 30.11.2012 22:45

Цитата:

Сообщение от dmitry111
это сделать как нибудь проще

Нельзя клонировать человека. Но любая баба сделает тебе это проще, родив ребенка.

Ну повесь на строку replace, пусть он по реге изменит тебе строку.
Ну повесь на innerHTML метод, пусть он отпарсит img и привяжет onload к каждому изображению.
Ну напиши плагин, который посчитает твои картинки и сообщит, когда все они будут загружены.

Я могу ещё проще предложить.

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

dmitry111 30.11.2012 23:07

Gozar,

мда))))
все что вы предложили уже прозвучало в ответе vadim5june
Это мне не подходит.

Я имел в виду какое-нибудь событие которое бы сказало мне что загрузка в данном элементе закончена. Как у ajax
Ну нет так нет, буду решать другими способами

Клонировать кстати человека можно))

dmitry111 30.11.2012 23:17

как то логику не пойму.
JS дает возможность оперировать данными сохраненными локально, но не предоставляет возможность отследить их загрузку(если она требуется)))
и для чего спрашивается придумали storage? Для "name = Вася" и "age = 10"? :)

Atae 01.12.2012 01:20

Цитата:

Сообщение от dmitry111
можно, но разве нельзя это сделать как нибудь проще не изменяя строку?

фейспалм, сделай онлоад на контейнер куда херату всю эту суещь...

Atae 01.12.2012 01:21

Цитата:

Сообщение от Gozar
Ну повесь на строку replace, пусть он по реге изменит тебе строку.
Ну повесь на innerHTML метод, пусть он отпарсит img и привяжет onload к каждому изображению.
Ну напиши плагин, который посчитает твои картинки и сообщит, когда все они будут загружены.

фейспалм

Gozar 01.12.2012 01:52

Цитата:

Сообщение от Atae
сделай онлоад на контейнер куда херату всю эту суещь

Перестань срать в форум. Приведи пример кода.

Gozar 01.12.2012 02:05

Цитата:

Сообщение от dmitry111
JS дает возможность оперировать данными сохраненными локально, но не предоставляет возможность отследить их загрузку(если она требуется)))

И правильно что js этого не делает, эту возможность предоставляет браузер. Тебе уже сказали как можно отследить загрузку. Не нравиться придумай свой браузер.

Atae 01.12.2012 03:16

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

Atae 01.12.2012 03:22

В твоем случае действительно проще сделать

elem.innetHTML = 'картинки';

var imgs = elem.querySelectorAll('img');
var i = 0; 

[].each.call(imgs, function(img){
    img.onload = function(){ if( ++i === imgs.length ) allImgLoad.call(elem) }
});


function allImgLoad(){ /*ура*/ }



ну а я пока напишу костыль

dmitry111 01.12.2012 04:19

да не, не нужно было))) Спасибо)

я уже по другому решил

Atae 01.12.2012 06:28

как?

nerv_ 01.12.2012 12:05

Цитата:

Сообщение от Atae
оказывается лоад не всплывает

с чего это оно должен всплывать? :) При такой логике событие readystatechange объекта XMLHttpRequest должно всплывать.

Atae 01.12.2012 12:23

Цитата:

Сообщение от nerv_
с чего это оно должен всплывать?

с того что события должны всплывать

Цитата:

Сообщение от nerv_
При такой логике событие readystatechange объекта XMLHttpRequest должно всплывать.

нет по такой логике только события которые могут всплывать должны всплывать у XMLHttpRequest нет родителя чтобы всплывать, по этому оно не может всплывать и по моей логике не всплывает.)

кто то видимо решил что события должны происходить "моментально" а лоады могут происходить "не моментально" по этому это уже не всплывание и делать не надо. Зачем нам удобства.... за то логично же все... сделаем персонально для каждого элемента, и похеру что иерархически все, кому надо те фикс напишут.

под всплывать я имею ввиду не-всплывать а когда все элементы внутри какого это элемента окторые могли загрузиться - загрузились, то на нем генерируется событие "лоад" код покажу все станет ясно.

dmitry111 01.12.2012 16:57

Atae,
Цитата:

Сообщение от Atae
как?

ну не ссовсем подругому.. просто повесил onload не на все картинки на странице, а на те которые вставляются. И вместо строки с элементами стал перебирать массив с адресами картинок:


for (i = 0, len = arrIMG.length; i < len; i += 1) {
    img = document.createElement("img");
    img.src = arrIMG[i];
    img.alt = arrIMG[i];
    img.className = "img";
    frag.appendChild(img);
}

img.onload = function () {
};



Хотя так не хотел это делать.. Было бы офигенно если бы было событие которое предоставляло информацию о загрузках в конкретном элементе
Что-то вроде
elem.onload

потому как, веб страницы становятся все более модульными.. И эти модули могут работать не только с сервером, но и с локальными данными


но это ИМХО, не более)

Gozar 01.12.2012 17:08

Цитата:

Сообщение от Atae
с того что события должны всплывать

Нет, спасибо.

Цитата:

Сообщение от Atae
Зачем нам удобства

Ага, давайте придумаем себе ещё геморроя. Чур меня чурача, чтобы onload-ы начали всплывать.

nerv_ 03.12.2012 23:08

Цитата:

Сообщение от Gozar
Нельзя клонировать человека.

пока нельзя :)

dmitry111 03.12.2012 23:27

Цитата:

Сообщение от nerv_
пока нельзя

то есть корову, верблюда, кошку, быка, собаку и т.п. значит можно а человека нельзя? Как это?

Просто скорее всего это секретная информация и вряд ли какая-то страна будет распространятся на этот счет)))

Hekumok 03.12.2012 23:32

Человека не клонируют, пушо это типа неэтично...
Смотрел вроде какой-то документальный фильм: там говорилось, что во время второй мировой немцы делали попытки клонировать людей - ставили опыты над пленными


Часовой пояс GMT +3, время: 10:31.