【问题标题】:Twitter Bootstrap carousel vertical slidingTwitter Bootstrap 轮播垂直滑动
【发布时间】:2012-07-21 05:43:12
【问题描述】:

Twitter Bootstrap 可以实现垂直轮播滑动吗? 在 bootstrap.js 我找到了这个

  , slide: function (type, next) {
  var $active = this.$element.find('.active')
    , $next = next || $active[type]()
    , isCycling = this.interval
    , direction = type == 'next' ? 'left' : 'right'
    , fallback  = type == 'next' ? 'first' : 'last'
    , that = this

我尝试将方向更改为“向上”和“向下”,但滑动不起作用。

【问题讨论】:

标签: jquery twitter-bootstrap carousel sliding


【解决方案1】:

是的。

下面是一个 hacky 方法,它通过简单地覆盖 CSS 来完成所有事情。

如果您将 vertical 类添加到轮播中,则将以下 CSS 添加到页面将覆盖垂直滑动:

.vertical .carousel-inner {
  height: 100%;
}

.carousel.vertical .item {
  -webkit-transition: 0.6s ease-in-out top;
     -moz-transition: 0.6s ease-in-out top;
      -ms-transition: 0.6s ease-in-out top;
       -o-transition: 0.6s ease-in-out top;
          transition: 0.6s ease-in-out top;
}

.carousel.vertical .active {
  top: 0;
}

.carousel.vertical .next {
  top: 100%;
}

.carousel.vertical .prev {
  top: -100%;
}

.carousel.vertical .next.left,
.carousel.vertical .prev.right {
  top: 0;
}

.carousel.vertical .active.left {
  top: -100%;
}

.carousel.vertical .active.right {
  top: 100%;
}

.carousel.vertical .item {
    left: 0;
}​

这基本上是将所有内容都放入 carousel.less 并将 left 更改为 top

JSFiddle


这至少表明你需要做什么才能让它垂直滑动。然而,在实践中,确实应该将updown 类添加到carousel.less 并添加一个新选项到bootstrap-carousel.js 以在它们之间切换。

【讨论】:

  • 感谢您的出色解决方案!但是当我们使用从右到左的标准行为时 - 我们看到上一个和下一个图像都向左移动。当我尝试使用您的解决方案时 - 只有下一个图像移动到上一个。我尝试更改css中的各种选项,但无法达到此效果。
  • @Qwadrat 你在哪个浏览器上测试?它对我有用,但我只在 Chrome 中进行了测试。
  • 在 Chrome 中一切正常。在 Firefox 中,下一帧移动到上一帧。在 Opera 中,下一张图像与上一张一起移动,但卡在第二帧上:)
  • @Qwadrat,看起来 Firefox 不喜欢 top 样式的百分比值。如果您使用相同高度的图像,则可以明确定义它。请参阅更新的JSFiddle。尚未在 Opera 中对此进行测试。
  • 据我所见,Firefox 不喜欢高度,因为没有一个容器具有固定高度。如果 .carousel.vertical 有一个固定的高度,它可以很好地处理百分比。
【解决方案2】:

当与最新(当前)版本的 Bootstrap (v3.3.4) 一起使用时,之前答案中提供的解决方案在某些流行的浏览器(如 Google Chrome)上无法正常工作。

如果有人需要适用于 Bootstrap v3.3.4 的更新解决方案,这里是 --

.carousel-inner.vertical {
  height: 100%;
}
.carousel-inner.vertical > .item {
  -webkit-transition: .6s ease-in-out top;
  -o-transition: .6s ease-in-out top;
  transition: .6s ease-in-out top;
}
@media all and (transform-3d),
(-webkit-transform-3d) {
  .carousel-inner.vertical > .item {
    -webkit-transition: -webkit-transform .6s ease-in-out;
    -o-transition: -o-transform .6s ease-in-out;
    transition: transform .6s ease-in-out;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000;
    perspective: 1000;
  }
  .carousel-inner.vertical > .item.next,
  .carousel-inner.vertical > .item.active.right {
    top: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
  .carousel-inner.vertical > .item.prev,
  .carousel-inner.vertical > .item.active.left {
    top: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
  .carousel-inner.vertical > .item.next.left,
  .carousel-inner.vertical > .item.prev.right,
  .carousel-inner.vertical > .item.active {
    top: 0;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.carousel-inner.vertical > .active {
  top: 0;
}
.carousel-inner.vertical > .next,
.carousel-inner.vertical > .prev {
  top: 0;
  height: 100%;
  width: auto;
}
.carousel-inner.vertical > .next {
  left: 0;
  top: 100%;
}
.carousel-inner.vertical > .prev {
  left: 0;
  top: -100%
}
.carousel-inner.vertical > .next.left,
.carousel-inner.vertical > .prev.right {
  top: 0;
}
.carousel-inner.vertical > .active.left {
  left: 0;
  top: -100%;
}
.carousel-inner.vertical > .active.right {
  left: 0;
  top: 100%;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div style="width:600px"> <!-- wrap @img width -->
  <div id="carousel-example-generic" class="carousel slide" data-ride="carousel" data-interval="3000">
    <!-- Indicators -->
    <ol class="carousel-indicators">
      <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
      <li data-target="#carousel-example-generic" data-slide-to="1"></li>
      <li data-target="#carousel-example-generic" data-slide-to="2"></li>
    </ol>

    <!-- Wrapper for slides -->
    <div class="carousel-inner vertical" role="listbox">
      <div class="item active">
        <img src="http://placehold.it/600x400&text=First+Slide" alt="First Slide">
        <div class="carousel-caption">
          First Slide
        </div>
      </div>
      <div class="item">
        <img src="http://placehold.it/600x400&text=Second+Slide" alt="Second Slide">
        <div class="carousel-caption">
          Second Slide
        </div>
      </div>
      <div class="item">
        <img src="http://placehold.it/600x400&text=Third+Slide" alt="Third Slide">
        <div class="carousel-caption">
          Third Slide
        </div>
      </div>
    </div>

    <!-- Controls -->
    <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
      <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
      <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
      <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>
</div>

注意:将 vertical 类添加到您的 carousel-inner,或根据需要编辑 CSS。

【讨论】:

  • 优秀答案;非常适合新版本和 Chrome;谢谢!
  • 在 IE11 上遇到问题。新幻灯片可以动画,但旧幻灯片保持静止而不是离开,一旦新幻灯片完成旅程,它最终会消失。有任何想法吗?非常感谢。
  • 很棒的解决方案。有什么方法可以一次显示超过 1 个项目?
【解决方案3】:
【解决方案4】:

试试这个代码

Bootstrap 4 - 垂直滑块

https://www.codeply.com/p/JxZ8htyOFN

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 2012-05-26
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多