2014-09-14 14 views
6

Я использую this plugin для создания масштабирования изображения и галереи, но хочу масштабировать все изображения в соответствии с контейнером (используя алгоритм соотношения).Изменение размера изображения перед загрузкой - jQuery

Вот функция соотношение:

function scaleSize(maxW, maxH, currW, currH){ 
    var ratio = currH/currW; 
    if(currW >= maxW && ratio <= 1){ 
    currW = maxW; 
    currH = currW * ratio; 
    } else if(currH >= maxH){ 
    currH = maxH; 
    currW = currH/ratio; 
    } 
    return [currW, currH]; 
} 

И это как изображения галереи загрузки:

var img = $('<img>').load(function(){ 
      img.appendTo(a); 
      image_container.html(a); 
}).attr('src', src).addClass(opts.big_image_class); 

Что я пробовал:

var newSize = scaleSize(300, 320, $(".simpleLens-big-image").width(), $(".simpleLens-big-image").height()); 
var img = $('<img>').load(function(){ 
      img.appendTo(a); 
      image_container.html(a); 
}).attr('src', src).addClass(opts.big_image_class).width(newSize[0]).height(newSize[1]); 

Но scaleSize не работает правильно, поскольку текущая ширина и высота еще не определены (изображение еще не существует в dom) ,

Спасибо за любые указатели.

+0

Где находится ваш .simpleLens-big-image? –

ответ

0

Я посмотрел в код плагина и думаю, что вы называете scaleSize() слишком рано. Изображение с классом simpleLens-big-image существует сначала после настройки var img и addClass(). Попробуйте выполнить следующие условия:

var img = $('<img>').load(function(){ 
      img.appendTo(a); 
      image_container.html(a); 
}).attr('src', src).addClass(opts.big_image_class); 
// at this point img should contain $(".simpleLens-big-image") so we can refer to img 
var newSize = scaleSize(300, 320, img[0].naturalWidth, img[0].naturalHeight()); 
img.width(newSize[0]).height(newSize[1]); 
+0

'console.log (img.width());' равно 0, я думаю, что изображение уже было загружено перед вызовом его ширины. Это проблема. – Nothing

+0

@Nothing Если вам нравится, пожалуйста, отправьте результат 'console.log (img [0] .naturalWidth)'. –

+0

Ну! вот оно! Оно работало завораживающе! Спасибо Мартин Эрнст, ты спас мой день! – Nothing

0

Попробуйте что-нибудь подобное и вызовите метод onload. Это позволит убедиться, что изображение загружается в DOM, прежде чем изменить размер

var img = $('<img>');  
img.src = src ; 
img.onload = function() { 
    // Run onload code. 
} ; 
+0

Извините за поздний ответ. Меняя 'load()' на 'onload()', он заставляет галерею перестать работать, наводя указатель мыши на каждое изображение. Надеюсь, вы не против взглянуть, https://github.com/WitTrue/jQuery-SimpleLens/blob/master/src/jquery.simpleGallery.js здесь сценарий плагина, и я его редактирую. – Nothing

Смежные вопросы