Я создаю скрипт jQuery для определения размеров и размещения элементов изображения при загрузке или изменении размера страницы. Я использую Bootstrap для моего макета. Я использую фиксированную высоту с CSS. Помимо разработки, я не буду контролировать размер или пропорции изображений.Итерации через изображения (jQuery) для динамического определения размера/позиционирования (CSS)
Я построил небольшой скрипт локально, который получает математику и if
заявления для изображений разных размеров и пропорций. Теперь мне нужно его обернуть (я думаю) в цикле jQuery each()
.
Я пробовал один цикл, обернутый вокруг основного скрипта, который нацеливает каждый элемент на класс .listing-box
. Затем я попытался добавить еще один (вложенный) цикл, чтобы нацелить фактическое изображение внутри. В итоге я получаю первые вычисления, применяемые ко всем последующим изображениям. Я не знаю, как правильно реализовать each()
.
HTML
<div class="row">
<div class="col-sm-3">
<a href="#">
<div class="listing-box">
<div class="listing">
<img src="http://placehold.it/600x400" alt="thumbnail" class="thumb">
</div>
</div>
</a>
</div>
</div>
CSS
.listing-box {
width: 100%;
height: 220px;
position: relative;
overflow: hidden;
}
.thumb {
overflow: hidden;
}
JQuery
$(window).on('resize load', function() {
// get .listing-box width and height
var boxWidth = $(".listing-box").width();
var boxHeight = $(".listing-box").height();
var boxAspect = (boxWidth/boxHeight);
// get .thumb width and height
var imgWidth = $(".thumb").width();
var imgHeight = $(".thumb").height();
var imgAspect = (imgWidth/imgHeight);
// set some empty variables
var newWidth,
newHeight,
mTop,
mLeft;
if (imgAspect < 1) {
// image is VERTICAL
// assign values
newWidth = boxWidth;
newHeight = newWidth * imgHeight/imgWidth;
mTop = (newHeight - boxHeight)/2;
// use new values for inline css
$(".thumb").css({
width: newWidth + "px",
height: newHeight + "px",
marginTop: "-" + mTop + "px"
});
} else {
// image is HORIZONTAL
if (imgAspect > boxAspect) {
// image is more wider than taller
// assign values
newHeight = boxHeight;
newWidth = newHeight * imgWidth/imgHeight;
mLeft = (newWidth - boxWidth)/2;
// use new values for inline css
$(".thumb").css({
width: newWidth + "px",
height: newHeight + "px",
marginLeft: "-" + mLeft + "px"
});
} else {
// image is more taller than wider
// assign values
newWidth = boxWidth;
newHeight = newWidth * imgHeight/imgWidth;
mTop = (newHeight - boxHeight)/2;
// use new values for inline css
$(".thumb").css({
width: newWidth + "px",
height: newHeight + "px",
marginTop: "-" + mTop + "px"
});
}
}
});
Я знаю, что для этого есть плагины, но я бы хотел попробовать это без каких-либо проблем. Я просто зациклился.
Пожалуйста, покажите свою попытку 'each()'. – isherwood
@isherwood Я должен был упомянуть ... Я оставил комментарии в разделе JavaScript JSBin (несколько изображений), где я поместил свои попытки 'each()'. – Jeannie