Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Узнаю высоту и ширину картинки, не получается достать переменые из функции (https://javascript.ru/forum/jquery/47445-uznayu-vysotu-i-shirinu-kartinki-ne-poluchaetsya-dostat-peremenye-iz-funkcii.html)

VitAl2013 24.05.2014 15:25

Узнаю высоту и ширину картинки, не получается достать переменые из функции
 
var pic_real_width_0, pic_real_height_0;
    var img = $(this).children('img:eq(0)');
    $("<img/>") 
        .attr("src", $(img).attr("src"))
        .load(function() {
            pic_real_width_0 = this.width; console.log('pic_real_width [0] = '+pic_real_width_0);  
            pic_real_height_0 = this.height; console.log('pic_real_height [0]= '+pic_real_height_0);
        });
console.log('pic_real_width [0] = '+pic_real_width_0);


Подскажите почему не работает - не вынимает значения выше функции? Как сделать чтоб заработало? Может функцией сохранить левый параметр на странице, а потом его считать? (изврат, но что делать)

рони 24.05.2014 15:40

VitAl2013,
на всякий случай
строка 9 сработает раньше строки 5
да и строки 4 и 5 лучше поменять местами

VitAl2013 24.05.2014 16:15

так и нормально что 9 позднее 5. В 5 происходит загрузка изображение, в 6 и 7 образмеривание и вывод в консоль не покидая функции, а 9 по задумке затем выводит в консоль значение уже за пределами функции. (вот если наоборот 5 (загрузка) произойдёт позже 9, то вот... надо подумать - может тут собака порылась. А если поменять 4 и 5 местами то src присвоиться после загрузки - нечего будет загружать - пустая коробка будет создана и загружена, и только потом произойдёт смена src - коробка поймёт что в себя грузить.

рони 24.05.2014 16:17

Цитата:

Сообщение от VitAl2013
src присвоиться после загрузки

подскажите что у вас грузится?

исправил
строка 9 сработает раньше строки 5
5 строка может и не сработать совсем

VitAl2013 24.05.2014 16:34

Спасибо за помощь. Нашёл элегантное решение в виде методов:
(function($){
    var
    props = ['Width', 'Height'],
    prop;

    while (prop = props.pop()) {
    (function (natural, prop) {
      $.fn[natural] = (natural in new Image()) ? 
      function () {
      return this[0][natural];
      } : 
      function () {
      var 
      node = this[0],
      img,
      value;

      if (node.tagName.toLowerCase() === 'img') {
        img = new Image();
        img.src = node.src,
        value = img[prop];
      }
      return value;
      };
    }('natural' + prop, prop.toLowerCase()));
    }
  }(jQuery));

Используется потом так:
nWidth = $('img#example').naturalWidth(),
nHeight = $('img#example').naturalHeight();

Уже опробовал - работает. Взял отсюда: http://www.jacklmoore.com/notes/natu...lheight-in-ie/


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