为什么这个高度匹配功能不能正常工作
Why is this height matching function not working properly?
我正在使用这个函数
$(document).ready(function(){
$('.listing .listingContent').height($('.listingImage1 img').height() + 50);
});
这样我就可以在两个绝对位置的可切换图像下面有文本。在页面加载上,.listingImage1 img
是480像素高,.listing .listingContent
是483像素高,而不是应该的530像素。我认为这与.listingImage1 img
的自动高度有关,但我不能诚实地计算出来,与3px无关。
当我调整窗口大小时,由于的功能几乎相同,.listing .listingContent
变成了530px
$(window).resize(function(){
$('.listing .listingContent').height($('.listingImage1 img').height() + 50);
});
所以我不明白。即使代码相同,它也不会在代码笔中复制。我把它上传到这里,刷新一两次显示行为。
使用相同的标记有更好的方法吗?我不能使用我在网上找到的很多方法,因为图像是由CMS生成的,所以它必须是两个img元素。不过我可以把它们放在任何地方。我在想也许我可以以某种方式使用附加,但后来淡出效果消失了。
<article class="listing">
<ul class="listingContent">
<li class="listingImage1">
<img src="http://i.imgur.com/H3OjxUy.png" />
</li>
<li class="listingImage2">
<img src="http://i.imgur.com/sjptNd9.png" />
</li>
<li class="listingTitle">
foo
</li>
<li class="listingPrice">
foo
</li>
</ul>
</article>
JavaScript
$(document).ready(function() {
$(".listing").mouseenter(function() {
$(this).find(".listingImage2,.listingImage1").fadeToggle();
}).mouseleave(function() {
$(this).find(".listingImage2,.listingImage1").fadeToggle();
});
});
$(document).ready(function(){
$('.listing .listingContent').height($('.listingImage1 img').height() + 50);
});
$(window).resize(function(){
$('.listing .listingContent').height($('.listingImage1 img').height() + 50);
});
.listing {
padding-bottom: 1em;
img {
max-width: 100%;
height: auto;
}
.listingContent {
position: relative;
li {
position: absolute;
}
.listingImages1, .listingImages2 {
top: 0px;
left: 0px;
right: 0px;
}
.listingTitle {bottom: 25px;}
.listingPrice {bottom: 0px;}
.listingTitle, .listingPrice {
top: auto;
}
.listingImage2 {
display: none;
}
}
}
http://codepen.io/anon/pen/LVeGqO
Chrome中的图像尚未完全加载。相反,将代码(仍在doc.ready中)更改为在图像的onload:中激发
$(document).ready(function(){
//It will only run when the browser has the image's loaded height
$('.listingImage1 img').load(function() {
$('.listing .listingContent').height($('.listingImage1 img').height() + 50);
})
});
EDIT:修复了load
函数语法的错误
查看.outerHeight()
。在您的情况下,.height()
可能不会返回您要查找的内容。您可能需要填充和边距,甚至可能需要边界,这就是outerHeight()
发挥作用的地方。
如果可以的话,根据所用图像的尺寸,给图像一个高度和宽度——这样,浏览器将能够计算图像的大小,从而计算周围块的大小。
最后,在极少数情况下,您可能会发现,如果在加载页面时对视图进行了某些修改,例如会影响页面的几何图形,那么确定高度的脚本可能运行得太早。如果是这种情况,您可以将调用封装在设置为1ms延迟的setTimeout()
调用中。这将导致浏览器在完成初始渲染后,在下一轮中渲染元素。
setTimeout(function(){
// place code here
// make sure any variables used are in scope at this point
}, 1);
请注意,在这种情况下,不同的系统和浏览器可能会表现得非常不同,因为渲染将取决于系统和页面在其中渲染的浏览器的性能。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作