Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вынести функцию (https://javascript.ru/forum/misc/48435-vynesti-funkciyu.html)

djonA 03.07.2014 17:51

Вынести функцию
 
Подскажите необходимо задать автоматом размеры всем картинкам товаров на сайте.

Делаю так:
<img onload="var img=new Image(); img.src=this.src; this.width=img.width;this.height=img.height" src="url kartinki" alt="text" title="text1'" >


Нормально выводит ширину и высоту картинки.

Подскажите только как вывести вот это для всех картинок в отдельную функцию:
onload="var img=new Image(); img.src=this.src; this.width=img.width;this.height=img.height"


что бы не вставлять во все картинки на сайте?

Sweet 03.07.2014 18:22

Взрыв мозга! Что ты вообще делаешь?!:blink: Твой код ведь эквивалентен этому:
<img onload="this.width=this.width;this.height=this.height" src="url kartinki" alt="text" title="text1'" >

Зачем это вообще нужно? Картинки и так по умолчанию нужного размера!

Aetae 03.07.2014 18:25

Зачем, лол, картинка и так автоматически получает свои размеры.
<img onload="alert([this.width,this.height])" src="http://javascript.ru/forum/images/smilies/smile.gif" alt="text" title="text1'" >

Цитата:

Сообщение от Sweet (Сообщение 319349)
Зачем это вообще нужно?

Может ему атрибуты понадобились зачем-то?
<img onload="alert(outerHTML); width=width;height=height; alert(outerHTML)" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif">

djonA 03.07.2014 18:33

Мне нужно передавать фактический размер картинок товаров, что бы быстрея загружались все картинки товаров на странице

Aetae 03.07.2014 18:46

djonA, а ты юморист: img onload происходит тогда, когда картинка уже загрузилась. Никакого вообще прироста ни в скорости загрузки(которого и так быть не может на самом деле), ни в скорости отрисовки страницы(тут - да), соответственно, не будет.
Размеры картинок должны быть заранее проставлены на этапе создания страницы. Это должен сразу делать движок вашено сайта, а не js, причём раз и навсегда.

djonA 03.07.2014 18:47

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

Sweet 03.07.2014 18:51

Цитата:

Сообщение от djonA
Мне нужно передавать фактический размер картинок товаров, что бы быстрея загружались все картинки товаров на странице

Если я тебя правильно понял, ты считаешь, что если после загрузки установить размеры картинок, то они быстрее загрузятся в прошлом? Но ведь тогда, ты и размеры им установишь раньше, сократив таким образом ещё больше время загрузки в прошлом. И так вплоть до мнговенной загрузки!
А ещё вот смотри, есть равенство: 4 * 0 = 5 * 0. Делим левую и правую часть на ноль, и получаем: 4 = 5. Клёво?

Aetae 03.07.2014 18:58

Цитата:

Сообщение от djonA (Сообщение 319354)
т.е мне нужно на стадии передачи в шаблон уже передавать размеры изображения?

Я не знаю что ты там используешь для своего сайта, может монструозную cms, может статические html странички, как я тебе отвечу?
Размеры картинок должны заносится в базу\код сразу в момент добавления их тобой на сайт, тем или иным методом.

foo 04.07.2014 00:53

Я не совсем понял, что Вы хотите, но чтобы закешировать картинки, можно сделать типа этого:
Код:

getImage = function(address){
        var img=new Image()
        img.src=address
        return img
        }
addresses="image1.jpeg image2.jpeg image3.jpeg".split(" ")
images=[]
addresses.forEach(function(address){images.push(getImage(address))})
put=function(){
images.forEach(function(img){document.body.appendChild(img)})
}
onload=put

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

foo 04.07.2014 01:05

Цитата:

Сообщение от Aetae
соответственно, не будет

Если просто отрисовка в вакууме -- то не будет. Если же надо контролировать последовательность, может быть профит. Например, некомильфо будет, если на онклик повешен показ изображения, а изображение это еще не загружено.


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