我有一个函数可以根据某些条件调整图像大小,并希望它能够单独计算.z
类中的所有元素,然后返回它们。
使用.each
通过函数运行所有图像,但为所有图像返回相同的尺寸。不确定我搞砸了......
测试网站在这里:
(还必须在图像完全调整大小之前完成淡入淡出处理,但这将是另一个问题)
JavaScript的:
jQuery(function($) {
$('.z').respond();
});
(function($){
$.fn.respond = function() {
/* initialize function on window load and resize */
$(document).ready(function() {
dimensions();
});
$(window).load(function() {
dimensions();
});
$(window).resize(function() {
dimensions();
});
/* declare affected elements */
var pic = this
/* set image's height or width depending on the browser window's size */
function dimensions() {
return pic.each(function() {
/* declare variables */
var browserWidth = $(window).width();
var imgRatio = pic.width() / pic.height()
var availableHeight = ($(window).height() - $('header').height() - $('footer').height() - 80)
var browserRatio = browserWidth / availableHeight
/* image sizing logic */
if (browserRatio >= imgRatio) {
if (browserWidth > 640) {
/* if the browser is landscape and bigger than mobile, set the image's height to fill the available space */
pic.height(availableHeight).width('auto');
//$('body').css('background', 'blue');
} else {
/* it's mobile */
pic.width(browserWidth - 40).height('auto');
//$('body').css('background', 'red');
}
} else {
/* if the browser is portrait, set the image's width to fill the page */
pic.width(browserWidth - 40).height('auto');
//$('body').css('background', 'green');
}
/* horizontally center content */
pic.css('margin-left', (browserWidth - pic.width())/2);
});
};
};
})( jQuery );
答案 0 :(得分:1)
你正在使用pic.each()
并且在jquery对象“pic”选择的每个元素上应该调用的函数内部,你也在使用“pic”。请尝试使用this
代替:
return pic.each(function() {
/* declare variables */
var browserWidth = $(window).width();
var imgRatio = $(this).width() / $(this).height()
答案 1 :(得分:0)
function dimensions() {
return pic.each(function() {
/* declare variables */
var browserWidth = $(window).width();
var imgRatio = $(this).width() / $(this).height()
var availableHeight = ($(window).height() - $('header').height() - $('footer').height() - 80)
var browserRatio = browserWidth / availableHeight
/* image sizing logic */
if (browserRatio >= imgRatio) {
if (browserWidth > 640) {
/* if the browser is landscape and bigger than mobile, set the image's height to fill the available space */
$(this).height(availableHeight).width('auto');
//$('body').css('background', 'blue');
} else {
/* it's mobile */
$(this).width(browserWidth - 40).height('auto');
//$('body').css('background', 'red');
}
} else {
/* if the browser is portrait, set the image's width to fill the page */
$(this).width(browserWidth - 40).height('auto');
//$('body').css('background', 'green');
}
/* horizontally center content */
$(this).css('margin-left', (browserWidth - $(this).width())/2);
});
};