在deck.js嵌套幻灯片的轮播

时间:2012-07-26 20:03:42

标签: css3 carousel css-transforms deck.js

我正在使用deck.js进行演示。对于一张幻灯片,我想要一个带有数字/图像的静态标题,我可以通过这个标题。这是相关的HTML:

<section class="carousel slide">
  <h2>Static Title</h2>
  <figure class="slide"><figcaption>Text for first image</figcaption><img src="images/first_image.png" alt=""></figure>
  <figure class="slide"><figcaption>Text for second image</figcaption><img src="images/second_image.png" alt=""></figure>
  <figure class="slide"><figcaption>Text for third image</figcaption><img src="images/third_image.png" alt=""></figure> 
</section>

这是我已经添加到deck.js的JS,以便使用deck.js附带的水平幻灯片主题。

.carousel .deck-before {
    -webkit-transform: translate3d(-400%, 0, 0);
    -moz-transform: translate(-400%, 0);
    -ms-transform: translate(-400%, 0);
    -o-transform: translate(-400%, 0);
    transform: translate3d(-400%, 0, 0);
    height:0;
}

.carousel .deck-after {
    -webkit-transform: translate3d(400%, 0, 0);
    -moz-transform: translate(400%, 0);
    -ms-transform: translate(400%, 0);
    -o-transform: translate(400%, 0);
    transform: translate3d(400%, 0, 0);
    height:0;
}

.carousel .deck-next {
    -webkit-transform: translate3d(200%, 0, 0);
    -moz-transform: translate(200%, 0);
    -ms-transform: translate(200%, 0);
    -o-transform: translate(200%, 0);
    transform: translate3d(200%, 0, 0);
    height:0;
}

.carousel .deck-previous {
    -webkit-transform: translate3d(-200%, 0, 0);
    -moz-transform: translate(-200%, 0);
    -ms-transform: translate(-200%, 0);
    -o-transform: translate(-200%, 0);
    transform: translate3d(-200%, 0, 0);
    height:0;
}

当图像轮播正在进行时,这非常有用。然而,当我返回时,从屏幕移开的图像向下移动,因此它低于新图像进入的位置。

如何制作,使屏幕右侧移动的图像与左侧屏幕上的图像保持水平?

1 个答案:

答案 0 :(得分:1)

问题的根源来自于height没有转换的事实,因此在类更改发生时,前一个元素立即具有高度,向下推动尚未转换的幻灯片观点。

这是要解决的fairly tough problem。您需要根据自己的需要做出一些选择。

首先,从每个前/后/上一个/后续内容中取出height:0,然后说出.carousel .slide { height: 0 }

您是否需要使用deck.scale扩展程序,或者在转盘后是否有幻灯片内容?如果是这样,您需要给.carousel一个高度来补偿。

你知道这个高度吗?只需在CSS中设置它。

不知道高度,或者只是想在每个地方使用它而不必每次手动设置高度?编写一个小脚本来检查轮播内容并设置高度。这样的事情(未经测试,要小心):

$(window).load(function() {
  $('.carousel').each(function(carousel) {
    var $carousel = $(carousel);
    var maxHeight = 0;

    $carousel.each(function() {
      var height = $(this).height();
      maxHeight = Math.max(height, maxHeight);
    });

    $carousel.height(maxHeight);
  });
});

使用这样的脚本,请务必从CSS中完全删除height:0声明。