老帖子,我知道。
我们让它在生产中使用 cycle。Cycle2 不是,现在也不是我们的选择。不幸的是,它涉及修改循环的内部数据。幸运的是,修复很简单。
当循环插件初始化时,它会为每个幻灯片的 DOM 对象添加两个属性 cycleW和cycleH,分别是每张幻灯片的初始宽度和高度。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(){
// first time around, save original width & height for ratios and complicated preloading
$(".slideshow").each(function(i,elt){
var originalWidth = $(elt).data("originalWidth"); // check existence of our ratio cache
if (typeof originalWidth == "undefined") {
var containerWidth = $(elt).parent().first().width(); // auto scale to container width.
var containerHeight = $(elt).parent().first().height();
$(elt).data("originalWidth",containerWidth);
$(elt).data("originalHeight",containerHeight);
}
});
// fix slideshows to their container width
$(".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); // maintain original ratio
$(elt).css("width", containerWidth+"px").css("height",height+"px"); // container actual dimensions. height might get reset again below
$(elt).children("div").css("width", containerWidth+"px"); // reset each slide width
// (fails once slide moves out, because the cycle plugin will use a cached value)
$(elt).children("div").children().css("width", containerWidth+"px"); // fix direct children (images or divs - images should have height auto).
// recompute max height based on inside slide, not just photos.
// some slideshows have variable height slides.
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);
}
// fix internal cycle dimension cache (cycleW and cycleH on each slide)
$(elt).children("div").each(function(){
this.cycleW = containerWidth;
this.cycleH = maxHeight;
});
});
});