Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очистка памяти, отмена загрузки картинки, отмена события. (https://javascript.ru/forum/misc/51067-ochistka-pamyati-otmena-zagruzki-kartinki-otmena-sobytiya.html)

zhurchik 23.10.2014 11:41

Очистка памяти, отмена загрузки картинки, отмена события.
 
Приветствую Вас Уважаемые форумчане.
У меня собственно 3 вопроса к Вам профессионалам)
1. К примеру, я создаю объект createElement("div"), добавляю в него текст, атрибуты и вывожу в общий поток ...appendChild(createdElement), но потом мне он уже не нужен будет. Нужно ли мне удалять ссылку на объект? И как это сделать, в голову приходит только такой код createdElement = {}

2. Я пишу галерею и в ней имеются стрелочки для переключения картинок, если пользователь не дождался загрузки картинки и нажал далее, как мне отменить загрузку предыдущей картинки? Сами же картинки загружаются через объект image, а именно:
var img = document.createElement('img')
img.src = Адрес картинки
Может быть есть что-то наподобие abort()?

3. На одном из блоков у меня висят 2 обработчика первый onclick, а второй onbdlclick так вот, как сделать так, чтобы когда срабатывает второй обработчик первый не срабатывал?

Буду благодарен за любую помощь!

ksa 23.10.2014 11:47

Цитата:

Сообщение от zhurchik
К примеру, я создаю объект createElement("div"), добавляю в него текст, атрибуты и вывожу в общий поток ...appendChild(createdElement), но потом мне он уже не нужен будет. Нужно ли мне удалять ссылку на объект? И как это сделать, в голову приходит только такой код createdElement = {}

Если все это происходит у тебя в функции, все исчезнет по окончании ее работы...

zhurchik 23.10.2014 11:50

ksa,
Кстати, хотел подчеркнуть то, что все это происходит в моем собственном объекте, но подумал, что пост слишком длинный получится!)

ksa 23.10.2014 11:56

Цитата:

Сообщение от zhurchik
все это происходит в моем собственном объекте

Может всетаки в методе объекта?
Метод отработает - все исчезнет...

ksa 23.10.2014 11:57

Цитата:

Сообщение от ksa
в голову приходит только такой код createdElement = {}

Так будет ссылка на пустой объект...

ksa 23.10.2014 11:58

Цитата:

Сообщение от zhurchik
но подумал, что пост слишком длинный получится

Лучше всего сразу использовать тестовые примеры... Они малы и сразу все понятно.

zhurchik 23.10.2014 12:15

Цитата:

Сообщение от ksa (Сообщение 337072)
Может всетаки в методе объекта?
Метод отработает - все исчезнет...

Да, методе, я думал и так понятно.
А как система поймет, что метод отработал? Ведь другие методы этого объекта продолжают работать.

kostyanet 23.10.2014 12:15

Цитата:

Сообщение от zhurchik
Нужно ли мне удалять ссылку на объект?

Не надо делать таких ссылок. var elem = document.createElement()... elem.style... метод закрылся, elem сдох.

Цитата:

var img = document.createElement('img')
img.src = Адрес картинки
Пользователь нажал не дожидаясь, значит var img = document.createElement('img'); img.src = Адрес новой картинки вот и весь аборт.

3. Уберите щелчок.

kostyanet 23.10.2014 12:17

Цитата:

Сообщение от zhurchik
А как система поймет, что метод отработал?

Одуреть, а {} на что?

danik.js 23.10.2014 12:22

Цитата:

Сообщение от kostyanet
img.src = Адрес новой картинки вот и весь аборт.

Насколько я знаю не будет никакого аборта. Есть даже такой код для прелоада картинок:
var image = new Image();
['img1.png', 'img2.png'].forEach(function(src) {
     image.src = src;
});

kostyanet 23.10.2014 12:26

В смысле старую что ли покажет? Покажет новую, ну, когда загрузится. То есть они все полезут, но останется-то последняя. Так что вот и аборт. Кроме того как отменить заголовок который уже ушел? Закрыть браузер или послать новый.

Народ такой фигней не страдает, от кого ТС заразился? Кладите, клиент жирный нынче, не то что некоторые серверы.

danik.js 23.10.2014 12:30

Цитата:

Сообщение от kostyanet
Так что вот и аборт

Нет никакого аборта. Вот в xhr есть xhr.abort(). А у картинки нету. Поставишь новый src - а старый все равно грузиться будет.
Цитата:

Сообщение от kostyanet
Кроме того как отменить заголовок который уже ушел?

Ушел ну и хуй с ним. Просто закрываем соединение. Почему-то в xhr нет такой проблемы )

zhurchik 23.10.2014 12:45

Цитата:

Сообщение от kostyanet (Сообщение 337077)
Пользователь нажал не дожидаясь, значит var img = document.createElement('img'); img.src = Адрес новой картинки вот и весь аборт.

Ааа, у меня на данном этапе с каждым кликом на стрелочку "далее" объект img пересоздается. ПОлучается нужно один раз создать
var img = document.createElement('img'); а потом просто в атрибут src подставлять новый адрес?

zhurchik 23.10.2014 12:47

Цитата:

Сообщение от danik.js
Насколько я знаю не будет никакого аборта. Есть даже такой код для прелоада картинок:

Получается, что картинка в любом случае догружаться будет в фоновом режиме?

ksa 23.10.2014 13:33

Цитата:

Сообщение от zhurchik
А как система поймет, что метод отработал?

Встретит return или "окончательный" символ } :)

kostyanet 23.10.2014 13:46

Цитата:

Сообщение от danik.js
старый все равно грузиться будет

Будет, в кеш, ну и х й с ним.

kostyanet 23.10.2014 13:48

Цитата:

Сообщение от zhurchik
ПОлучается нужно один раз создать
var img = document.createElement('img'); а потом просто в атрибут src подставлять новый адрес?

Один раз сработает, а по второму кругу в Хроме пойдет последня картинка, ибо этот хитрожопый браузер не генерит onload если оно уже в кеше. А на пустом объекте - после загрузки туда из кеша - генерит.

Блин, не про то написал. Так у вас так и сделано - канонично что называется. То есть когда новый src втыкается - хренакс и старой картинки не видно, пока новая загружается. Поэтому делают через буфер - через new Image().


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