Хотя оригинал был в пространстве имен, я собираюсь разместить этот ответ, как если бы он не был, потому что я не указал. В любом случае, я нашел решение.
Первым шагом было нахождение соотношения исходного изображения;
$(".zoomImage").each(function(index){
var bg = $(this).css('background-image');
bg = bg.replace('url(','').replace(')','').replace(/\"/gi, "");
// get image size.
var tmpImg = new Image();
tmpImg.src=bg;
$(tmpImg).one('load', function(){
orgWidth = tmpImg.width;
orgHeight = tmpImg.height;
bgImageRatios[index] = orgHeight / (orgWidth * 1.0);
});
});
Чтобы упростить жизнь, я поместил их в массив, глобальный для пространства имен. Это значит, что мне не нужно: а) постоянно находить соотношение изображения, и б) получить к нему доступ аналогично инициализации позже. Следует отметить, что этот метод потребует повторного вызова в том случае, если в экземпляр добавлены более или менее классы «.zoomImage», так как в этот момент массив будет неправильным.
Затем я поместил исходный код, который зацикливает класс, в функцию.
function zoomImage(scrollpos, screenHeight, screenWidth)
{
//console.log(screenHeight);
$(".zoomImage").each(function(index){
var offset = $(this).offset().top;
if (offset < scrollpos && scrollpos < offset + screenHeight)
{
var heroEffectPerc = 100 + 25 * (scrollpos - offset) / (screenHeight * 1.0);
if ((bgImageRatios[index] * screenWidth / screenHeight) > 1)
$(this).css("background-size", heroEffectPerc + "% auto");
else
$(this).css("background-size", "auto " + heroEffectPerc + "%");
}
});
}
Я поместил его в функцию, потому что иначе он был бы размещен в двух разных местах. (это просто грязное кодирование). Я обновил размер изображения следующим образом.
$(window).on("resize", function(){
var scrollpos = $(document).scrollTop();
var screenHeight = $(this).height();
var screenWidth = $(this).width();
pageCanvas.zoomImage(scrollpos, screenHeight, screenWidth);
});
$(document).on("scroll", function(){
var scrollpos = $(this).scrollTop();
var screenHeight = $(window).height();
var screenWidth = $(window).width();
pageCanvas.zoomImage(scrollpos, screenHeight, screenWidth);
});
Следующие источники помогли мне решить мой ответ:
Могу ли я получить ссылку на фоновое изображение div?
Как получить размер изображения с URL
Кредит принадлежит им.