旧帖,我知道。
我们已经在生产中使用循环运行了。Cycle2对我们而言不是一个选项,因为它涉及修改循环的内部数据。幸运的是,修复方法很简单。
当循环插件初始化时,它会将cycleW和cycleH两个属性添加到每个幻灯片的DOM对象中,分别具有每个幻灯片的初始宽度和高度。无论窗口的尺寸如何,Cycle都使用这些属性来对每个幻灯片进行动画处理。
当窗口被调整大小时,您需要手动清除cycleW和cycleH或将它们设置为预定值。
示例(假设您的幻灯片容器为.slideshow):
$(".slideshow").children("div").each(function(){
this.cycleW = $(this).width();
this.cycleH = $(this).height();
});
我们在生产环境中已经很好地运行了。
HTML看起来像这样:
<div class="slideshow">
<div class="slide"><img src=".." width="100%" height="auto"/></div>
<div class="slide"><p>Copy copy copy no photo on slide </p></div>
<div class="slide"><img src=".." width="100%" height="auto"/></div>
<div class="slide"><p>Copy copy copy no photo on slide </p></div>
...
</div>
现在是窗口调整函数。这是我们的版本。您可能需要根据自己的需求进行自定义。基本上,我们为幻灯片中固定图像的情况存储初始比率。有时我们会有可变高度的幻灯片。此代码解决了两种情况。然后,它将每个幻灯片DOM元素的内部cycleW和cycleH值重置为适合其父容器。
$(window).resize(function(){
$(".slideshow").each(function(i,elt){
var originalWidth = $(elt).data("originalWidth");
if (typeof originalWidth == "undefined") {
var containerWidth = $(elt).parent().first().width();
var containerHeight = $(elt).parent().first().height();
$(elt).data("originalWidth",containerWidth);
$(elt).data("originalHeight",containerHeight);
}
});
$(".slideshow").each(function(i,elt){
var containerWidth = $(elt).parent().first().width();
var originalWidth = $(elt).data("originalWidth")*1;
var originalHeight = $(elt).data("originalHeight")*1;
var height = Math.floor(originalHeight*containerWidth/originalWidth);
$(elt).css("width", containerWidth+"px").css("height",height+"px");
$(elt).children("div").css("width", containerWidth+"px");
$(elt).children("div").children().css("width", containerWidth+"px");
var maxHeight = 0;
var panelArray = $(elt).children("div");
for (var i = 0; i < panelArray.length; i++) {
var height = $(panelArray[i]).height();
if (height > maxHeight) maxHeight = height;
}
if (maxHeight > 0) {
$(elt).height(maxHeight);
}
$(elt).children("div").each(function(){
this.cycleW = containerWidth;
this.cycleH = maxHeight;
});
});
});