我正在尝试使用jQuery来检测许多图像的方向。一旦检测到,我想添加一个类来表明这一点,即.landscape
。
下面的代码似乎只是评估它遇到的第一个图像,然后将其应用于所有后续图像。例如,如果第一个图像是横向图像,则它将应用于包括纵向或正方形图像在内的所有图像。
我滥用.each()
语句吗?
谢谢。
HTML
<div class="carousel-cell">
<img src="domain.com" data-width="100" data-height="200" />
</div>
<div class="carousel-cell">
<img src="domain.com" data-width="200" data-height="100" />
</div>
<div class="carousel-cell">
<img src="domain.com" data-width="100" data-height="100" />
</div>
JQUERY
// Detect image orientation
$('.carousel-cell').each(function () {
"use strict";
var img = $('img');
if (img.attr('data-width') > img.attr('data-height')){
// Landscape
img.removeClass().addClass('landscape');
} else if (img.attr('data-width') < img.attr('data-height')){
// Portrait
img.removeClass().addClass('portrait');
} else {
// Equal (Square)
img.removeClass().addClass('square');
}
});
答案 0 :(得分:1)
在每个循环中,您选择的是$("img")
,即页面上的每个<img>
。
您需要限制搜索以使用img
来在当前元素中找到$(this).find("img")
。
// Detect image orientation
$('.carousel-cell').each(function() {
"use strict";
var $img = $(this).find('img');
var w = parseInt($img.attr("data-width"));
var h = parseInt($img.attr("data-height"));
$img.removeClass();
if (w > h) {
$img.addClass('landscape');
} else if (w < h) {
$img.addClass('portrait');
} else {
$img.addClass('square');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span><strong>Right click on image > Inspect Element</strong> to see classes.</span>
<div class="carousel-cell">
<img src="domain.com" data-width="100" data-height="200" />
</div>
<div class="carousel-cell">
<img src="domain.com" data-width="200" data-height="100" />
</div>
<div class="carousel-cell">
<img src="domain.com" data-width="100" data-height="100" />
</div>
编辑:根据您对怪异行为的评论,我怀疑这仅仅是因为您没有将宽度和高度解析为整数,因此>
和{{ 1}}比较将按字母顺序进行。例如,<
小于 "1000"
,因为"800"
。我添加了"1" < "8"
来解决此问题。
答案 1 :(得分:0)
您应该在其中使用$(this),然后使用.find image
标签。
$(function(){
// Detect image orientation
$('.carousel-cell').each(function () {
"use strict";
var img = $(this).find("img");
var imgWidth = $(img).attr('data-width');
var imgHeight = $(img).attr('data-height');
var className = imgWidth > imgHeight
? "landscape"
: imgWidth < imgHeight
? "portrait"
: "square";
$(img).removeClass().addClass(className);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="carousel-cell">
<img src="domain.com" data-width="100" data-height="200" />
</div>
<div class="carousel-cell">
<img src="domain.com" data-width="200" data-height="100" />
</div>
<div class="carousel-cell">
<img src="domain.com" data-width="100" data-height="100" />
</div>