【问题标题】:How can I control the speed that bootstrap carousel slides in items?如何控制引导轮播在项目中滑动的速度?
【发布时间】:2013-06-24 07:43:26
【问题描述】:

我知道你可以设置间隔,但我想控制项目滑动的速度?

   // Sets interval...what is transition slide speed?
    $('#mainCarousel').carousel({
    interval: 3000
});

【问题讨论】:

标签: twitter-bootstrap


【解决方案1】:

速度无法由 API 控制。尽管您可以修改负责该功能的 CSS。 在carousel.less文件中找到

.item {
    display: none;
    position: relative;
    .transition(.6s ease-in-out left);
}

并将.6s 更改为您想要的任何内容。


如果您不使用 .less,请在 bootstrap.css 文件中查找:

.carousel-inner > .item {
    position: relative;
    display: none;
    -webkit-transition: 0.6s ease-in-out left;
    -moz-transition: 0.6s ease-in-out left;
    -o-transition: 0.6s ease-in-out left;
    transition: 0.6s ease-in-out left;
}

并将0.6s 更改为您想要的时间。您可能还想在下面的函数调用中编辑时间:

.emulateTransitionEnd(2000) 

bootstrap.js 在函数 Carousel.prototype.slide 中。同步过渡并防止幻灯片在过渡结束前消失。

编辑 2014 年 7 月 8 日

正如@YellowShark 指出的,不再需要在 JS 中进行编辑。仅应用 css 更改。

2015 年 8 月 20 日编辑 现在,在您编辑完您的 css 文件后,您只需要编辑 CAROUSEL.TRANSITION_DURATION(在 bootstrap.js 中)或 c.TRANSITION_DURATION(如果您使用 bootstrap.min.js)并更改其中的值(默认为 600)。最终值必须与您放入 css 文件中的值相同(例如 css 中的 10s = .js 中的 10000)

编辑 2018 年 1 月 16 日 对于 Bootstrap 4,要将转换时间更改为例如 2 秒,请添加

$(document).ready(function() {
  jQuery.fn.carousel.Constructor.TRANSITION_DURATION = 2000  // 2 seconds
});

到您网站的 JS 文件,并且

.carousel-inner .carousel-item {
  transition: -webkit-transform 2s ease;
  transition: transform 2s ease;
  transition: transform 2s ease, -webkit-transform 2s ease;
}

到您网站的 CSS 文件。

【讨论】:

  • 感谢您的回复!我尝试将后者放在我的主 .html 页面的样式中,并将 .6 更改为 .1,但使用 chrome 似乎没有任何效果。
  • 不清楚...您是尝试修改引导文件还是只是将这些内容添加到您自己的 css 中?编辑引导文件更安全。否则,您需要确保您的样式最后加载并覆盖引导样式。
  • 只是想指出您不必(不再)修改任何 javaScript,that line in the code now pulls the .css('transition-duration') value,因此您只需添加一些如上所述的 CSS,仅此而已。 (另外,请确保轮播项目具有“幻灯片”类,不确定文档中是否提到过。)
  • 在 Bootstrap 3(无论如何,v3.3.5)中,JS 不再从 CSS 中提取持续时间值。 无需修改 Bootstrap 即可轻松设置,如下所示:jQuery.fn.carousel.Constructor.TRANSITION_DURATION = 1000;
  • jQuery.fn.carousel.Constructor.TRANSITION_DURATION 返回未定义。如何改变它?过渡有效,它滑动缓慢,但滑出的图像显示:无;太快了。
【解决方案2】:

只需在包含轮播的div 中写上data-interval

<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="500">

示例取自w3schools

【讨论】:

  • 请尝试以更正确的方式格式化您的问题。顺便提一句。仅链接不被视为好的答案。
  • 警告:“数据间隔”以毫秒为单位。 500 = 0,5 秒(非常快)。如果您有一些文本要在幻灯片上显示,10000(10 秒)会更好。工作正常。我认为这应该是公认的答案。
  • 这个答案不正确data-interval 确定新幻灯片移动的时间跨度。它不能确定移动一张幻灯片需要多长时间。
  • 谢谢老兄,它拯救了我的一天。 +1,这应该被检查为正确答案,而不是去编辑 bootstrap.css 文件。
  • 我一直在寻找这个确切的答案......但在我意识到这与幻灯片速度有关之前尝试了另一个答案,而这个答案涉及幻灯片之间的间隔。所以感谢您提供这个答案,因为这正是我想要的! (尽管 500 太快了,但那是另一回事)
【解决方案3】:

您需要在主 DIV 中将间隔设置为 data-interval 标记。它会正常工作,您可以为不同的幻灯片分配不同的时间。

<div class="carousel" data-interval="5000">

【讨论】:

  • 你能举个例子吗?我需要为 diff 幻灯片提供不同的时间间隔,这些在我的控制器中配置,从 api 调用返回。我们也可以使用滑块显示网页吗?
  • data-interval 确定新幻灯片移动的时间跨度,而不是动画持续时间。
【解决方案4】:

对于 Twitter Bootstrap 3:

您必须按照其他答案中的说明更改 CSS 过渡:

.carousel-inner > .item {
    position: relative;
    display: none;
    -webkit-transition: 0.6s ease-in-out left;
    -moz-transition: 0.6s ease-in-out left;
    -o-transition: 0.6s ease-in-out left;
    transition: 0.6s ease-in-out left;
}

从 0.6 秒到 1.5 秒(例如)。

而且,还有一些 Javascript 需要更改。在 bootstrap.js 中有一行:

.emulateTransitionEnd(600)

这应该更改为相应的毫秒数。因此,在 1.5 秒内,您会将数字更改为 1500:

.emulateTransitionEnd(1500)

【讨论】:

  • 克里斯,太棒了。谢谢!
【解决方案5】:

使用 Bootstrap 4,只需使用以下 CSS:

.carousel .carousel-item {
    transition-duration: 3s;
}

3s 更改为您选择的持续时间。

【讨论】:

  • 非常非常好:)
【解决方案6】:

我注意到的一件事是,Bootstrap 3 正在添加带有.6s0.6s 的样式。所以你可能需要像这样(CSS)明确定义你的过渡持续时间

    .carousel-inner>.item {
    -webkit-transition: 0.9s ease-in-out left;
    transition: 0.9s ease-in-out left;
    -webkit-transition: 0.9s, ease-in-out, left;
    -moz-transition: .9s, ease-in-out, left;
    -o-transition: .9s, ease-in-out, left;
    transition: .9s, ease-in-out, left;
    }

【讨论】:

  • 不适合我 :( 它仍然像一辆没有变化的汽车一样快速滚动(我改为 1.6)
【解决方案7】:

对我来说,在我的视图末尾添加了这个:

<script type="text/javascript">
$(document).ready(function(){
     $("#myCarousel").carousel({
         interval : 8000,
         pause: false
     });
});
</script>

它为轮播提供了 8 秒的间隔

【讨论】:

    【解决方案8】:

    不需要任何外部代码,只需使用data-interval="" 属性

    更多信息请访问getbootstrap

    &lt;div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel" data-interval="2500"&gt;

    当你想改变速度变化“2500”

    【讨论】:

      【解决方案9】:

      对于带有 scss 的 bootstrap 4,您可以像这样覆盖 _variables.scss 中的配置变量 $carousel-transition-duration

      $carousel-transition-duration: 2s;
      

      或者为元素单独的持续时间设置

      .carousel-item {
          transition-duration: 2s;
      }
      

      您的 css/scss 中的特定元素。

      【讨论】:

        【解决方案10】:

        如果您需要以编程方式更改(例如)基于某些条件的速度,可能只是许多轮播中的一个,您可以执行以下操作:

        如果Html是这样的:

        <div id="theSlidesList" class="carousel-inner" role="listbox">
          <div id="Slide_00" class="item active"> ...
          <div id="Slide_01" class="item"> ...
          ...
        </div>
        

        JavaScript 应该是这样的:

        $( "#theSlidesList" ).find( ".item" ).css( "-webkit-transition", "transform 1.9s ease-in-out 0s" ).css( "transition", "transform 1.9s ease-in-out 0s" )
        

        添加更多 .css( ... ) 以包含其他浏览器。

        【讨论】:

          【解决方案11】:

          在包含bootstrap.min.js或未压缩的之后,您可以添加interval作为参数,如下所示 jQuery("#numbers").carousel({'interval':900 });它对我有用

          【讨论】:

            【解决方案12】:

            如果不想修改bootstrap的js文件,也可以直接将想要的值注入jquery插件(bootsrap 3.3.6)。

            这当然需要通过js手动激活轮播,而不是直接通过data-ride属性。

            例如:

            var interval = 3500;
            $.fn.carousel.Constructor.TRANSITION_DURATION = interval - 500;
            elem.carousel({
                interval : interval
            });
            

            【讨论】:

            • 我喜欢这种方法,因为它不需要您编辑bootstrap.js,并使其“不可更新”..
            • 改成200后,我看不到流畅的动画了,图像会在过渡的中间消失
            • 嗨@TomSawyer - 动画是通过css维护的,但重要的是,TRANSITON_DURATION 足够长,以覆盖整个过渡。在它刚刚定义的 javascript 中,何时设置 in 类,以及何时再次删除它。如果你想缩短动画,请检查它在less文件中的定义。
            【解决方案13】:

            如果您希望为 bootstrap 3.3.5 | 编辑幻灯片进出的速度(而不是更改幻灯片之间的时间,称为间隔)|加载 CDN 引导样式后,使用以下类覆盖您自己的 css 样式集中的样式。 1.5是时间变化。

            .carousel-inner > .item {
            -webkit-transition: 1.5s ease-in-out ;
            -o-transition: 1.5s ease-in-out ;
            transition: 1.5s ease-in-out ;
            }
            .carousel-inner > .item {
            -webkit-transition: -webkit-transform 1.5s ease-in-out;
            -o-transition: -o-transform 1.5s ease-in-out;
            transition: transform 1.5s ease-in-out;
            
            }
            

            之后,您需要在 javascript 中替换 carousel 函数。为此,您将在加载后覆盖默认的 bootstrap.min.js 函数。 (在我看来,直接覆盖引导文件不是一个好主意)。 所以创建一个 mynewscript.js 并在 bootstrap.min.js 之后加载它并添加新的轮播函数。您要编辑的唯一行是这一行,Carousel.TRANSITION_DURATION = 1500。1500 是 1.5。希望这会有所帮助。

                +function ($) {
              'use strict';
            
              // CAROUSEL CLASS DEFINITION
              // =========================
            
              var Carousel = function (element, options) {
                this.$element    = $(element)
                this.$indicators = this.$element.find('.carousel-indicators')
                this.options     = options
                this.paused      = null
                this.sliding     = null
                this.interval    = null
                this.$active     = null
                this.$items      = null
            
                this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
            
                this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
                  .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
                  .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
              }
            
              Carousel.VERSION  = '3.3.5'
            
              Carousel.TRANSITION_DURATION = 1500
            
              Carousel.DEFAULTS = {
                interval: 5000,
                pause: 'hover',
                wrap: true,
                keyboard: true
              }
            
              Carousel.prototype.keydown = function (e) {
                if (/input|textarea/i.test(e.target.tagName)) return
                switch (e.which) {
                  case 37: this.prev(); break
                  case 39: this.next(); break
                  default: return
                }
            
                e.preventDefault()
              }
            
              Carousel.prototype.cycle = function (e) {
                e || (this.paused = false)
            
                this.interval && clearInterval(this.interval)
            
                this.options.interval
                  && !this.paused
                  && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
            
                return this
              }
            
              Carousel.prototype.getItemIndex = function (item) {
                this.$items = item.parent().children('.item')
                return this.$items.index(item || this.$active)
              }
            
              Carousel.prototype.getItemForDirection = function (direction, active) {
                var activeIndex = this.getItemIndex(active)
                var willWrap = (direction == 'prev' && activeIndex === 0)
                            || (direction == 'next' && activeIndex == (this.$items.length - 1))
                if (willWrap && !this.options.wrap) return active
                var delta = direction == 'prev' ? -1 : 1
                var itemIndex = (activeIndex + delta) % this.$items.length
                return this.$items.eq(itemIndex)
              }
            
              Carousel.prototype.to = function (pos) {
                var that        = this
                var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
            
                if (pos > (this.$items.length - 1) || pos < 0) return
            
                if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
                if (activeIndex == pos) return this.pause().cycle()
            
                return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
              }
            
              Carousel.prototype.pause = function (e) {
                e || (this.paused = true)
            
                if (this.$element.find('.next, .prev').length && $.support.transition) {
                  this.$element.trigger($.support.transition.end)
                  this.cycle(true)
                }
            
                this.interval = clearInterval(this.interval)
            
                return this
              }
            
              Carousel.prototype.next = function () {
                if (this.sliding) return
                return this.slide('next')
              }
            
              Carousel.prototype.prev = function () {
                if (this.sliding) return
                return this.slide('prev')
              }
            
              Carousel.prototype.slide = function (type, next) {
                var $active   = this.$element.find('.item.active')
                var $next     = next || this.getItemForDirection(type, $active)
                var isCycling = this.interval
                var direction = type == 'next' ? 'left' : 'right'
                var that      = this
            
                if ($next.hasClass('active')) return (this.sliding = false)
            
                var relatedTarget = $next[0]
                var slideEvent = $.Event('slide.bs.carousel', {
                  relatedTarget: relatedTarget,
                  direction: direction
                })
                this.$element.trigger(slideEvent)
                if (slideEvent.isDefaultPrevented()) return
            
                this.sliding = true
            
                isCycling && this.pause()
            
                if (this.$indicators.length) {
                  this.$indicators.find('.active').removeClass('active')
                  var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
                  $nextIndicator && $nextIndicator.addClass('active')
                }
            
                var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
                if ($.support.transition && this.$element.hasClass('slide')) {
                  $next.addClass(type)
                  $next[0].offsetWidth // force reflow
                  $active.addClass(direction)
                  $next.addClass(direction)
                  $active
                    .one('bsTransitionEnd', function () {
                      $next.removeClass([type, direction].join(' ')).addClass('active')
                      $active.removeClass(['active', direction].join(' '))
                      that.sliding = false
                      setTimeout(function () {
                        that.$element.trigger(slidEvent)
                      }, 0)
                    })
                    .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
                } else {
                  $active.removeClass('active')
                  $next.addClass('active')
                  this.sliding = false
                  this.$element.trigger(slidEvent)
                }
            
                isCycling && this.cycle()
            
                return this
              }
            
            
              // CAROUSEL PLUGIN DEFINITION
              // ==========================
            
              function Plugin(option) {
                return this.each(function () {
                  var $this   = $(this)
                  var data    = $this.data('bs.carousel')
                  var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
                  var action  = typeof option == 'string' ? option : options.slide
            
                  if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
                  if (typeof option == 'number') data.to(option)
                  else if (action) data[action]()
                  else if (options.interval) data.pause().cycle()
                })
              }
            
              var old = $.fn.carousel
            
              $.fn.carousel             = Plugin
              $.fn.carousel.Constructor = Carousel
            
            
              // CAROUSEL NO CONFLICT
              // ====================
            
              $.fn.carousel.noConflict = function () {
                $.fn.carousel = old
                return this
              }
            
            
              // CAROUSEL DATA-API
              // =================
            
              var clickHandler = function (e) {
                var href
                var $this   = $(this)
                var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
                if (!$target.hasClass('carousel')) return
                var options = $.extend({}, $target.data(), $this.data())
                var slideIndex = $this.attr('data-slide-to')
                if (slideIndex) options.interval = false
            
                Plugin.call($target, options)
            
                if (slideIndex) {
                  $target.data('bs.carousel').to(slideIndex)
                }
            
                e.preventDefault()
              }
            
              $(document)
                .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
                .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
            
              $(window).on('load', function () {
                $('[data-ride="carousel"]').each(function () {
                  var $carousel = $(this)
                  Plugin.call($carousel, $carousel.data())
                })
              })
            
            }(jQuery);
            

            【讨论】:

              【解决方案14】:

              对我有用的是在 bootstrap.js

              中更改 interval
                Carousel.DEFAULTS = {
                  interval: 2000,      // <----- change this
                  pause: 'hover',
                  wrap: true,
                  keyboard: true
                }
              

              【讨论】:

              • 控制动画的频率,而不是单个动画的速度。
              【解决方案15】:

              为了补充前面的答案,编辑 CSS 文件后,您只需编辑 CAROUSEL.TRANSITION_DURATION(在 bootstrap.js 中)或 c.TRANSITION_DURATION(如果您使用 bootstrap.js)。 min.js)并更改其中的值(默认为 600)。最终值必须与您在 CSS 文件中输入的值相同(例如,CSS 中的 10s = .js 中的 10000)

              Carousel.VERSION  = '3.3.2'
              Carousel.TRANSITION_DURATION = xxxxx /* Your number here*/
              Carousel.DEFAULTS = {
              interval: 5000 /* you could change this value too, but to add data-interval="xxxx" to your html it's fine too*/
              pause: 'hover',
              wrap: true,
              keyboard: true
              }
              

              【讨论】:

                【解决方案16】:

                所有轮播

                  <script type="text/javascript">
                              $(document).ready(function () {
                            $('.carousel').carousel({
                                interval: 15000
                            })
                        });
                
                    </script>
                

                【讨论】:

                • 请提供解释和答案
                • 再一次,这只是确定了间隔,而不是过渡时间
                【解决方案17】:

                在您的 CSS 中:

                .carousel-item {
                    transition-duration: 1.5s, 1.5s;
                }
                

                注意,时间包含在为轮播定义的数据间隔中。

                希望对您有所帮助... :)

                【讨论】:

                  【解决方案18】:

                  你可以用这个

                  <div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel" data-interval="4000">
                  

                  只需添加data-interval="1000" 1 秒后的下一张图片。

                  【讨论】:

                    【解决方案19】:

                    结合使用两个答案为我提供了我正在寻找的样式。

                    data-interval attr 在引导程序 5 中对我完全不起作用。我也不在本地存储引导程序

                    减慢从一张幻灯片到另一张幻灯片的时间

                    网站 CSS 文件。

                    .carousel-item {
                        transition-duration: 1.5s;
                    }
                    

                    在移到下一张幻灯片之前减慢延迟

                    网站 JS 文件

                    $(document).ready(function () {
                      $('.carousel').carousel({
                        interval: 15000
                      })
                    });
                    

                    【讨论】:

                      【解决方案20】:

                      添加数据区间

                      data-interval="20000"
                      

                      【讨论】:

                        【解决方案21】:

                        使用data-interval="2000",如下所示

                        1000 = 1 秒

                        <div id="carouselExampleIndicators" class="carousel slide carousel-custom" data-`ride="carousel" data-interval="2000">`
                        

                        【讨论】:

                          【解决方案22】:

                          如果使用 ngCarousel 模块,请编辑文件 @ng-bootstrap/ng-bootstrap/carousel-config.js 中的间隔变量,如下所示:

                          var NgbCarouselConfig = /** @class */ (function () {
                          function NgbCarouselConfig() {
                              this.interval = 10000;
                              this.wrap = true;
                              ...
                          }
                          ...
                          

                          【讨论】:

                            【解决方案23】:

                            在您的 main.js 文件或 bootstrap.js 中,更改 autoplayTimeout

                            的值

                                $('.carousel').each(function () {
                                    $(this).owlCarousel({
                                        nav: $(this).data('nav'),
                                        dots: $(this).data('dots'),
                                        loop: $(this).data('loop'),
                                        margin: $(this).data('space'),
                                        center: $(this).data('center'),
                                        dotsSpeed: $(this).data('speed'),
                                        autoplay: $(this).data('autoplay'),
                                        transitionStyle: $(this).data('transition'),
                                        animateOut: $(this).data('animate-out'),
                                        animateIn: $(this).data('animate-in'),
                                        autoplayTimeout: 3000,
                                        responsive: {
                                            0: {
                                                items: 1,
                                            },
                                            400: {
                                                items: $(this).data('slide-sm'),
                                            },
                                            700: {
                                                items: $(this).data('slide-md'),
                                            },
                                            1000: {
                                                items: $(this).data('slide'),
                                            }
                                        }
                                    });
                                });

                            【讨论】:

                              【解决方案24】:

                              在 Bootstrap 4.1 中,这只能通过添加:

                              $carousel-transition-duration: 2s; // or some duration length
                              

                              在您的自定义 SASS 变量中并编译。

                              【讨论】:

                                【解决方案25】:
                                .carousel-inner .carousel-item {
                                    transition: -webkit-transform 2s ease;
                                    transition: transform 2s ease;
                                    transition: transform 2s ease, -webkit-transform 2s ease;
                                    -webkit-transition: -webkit-transform 2s ease;
                                    -moz-transition: -webkit-transform 2s ease;
                                    -ms-transition: -webkit-transform 2s ease;
                                    -o-transition: -webkit-transform 2s ease;
                                }
                                

                                接受的答案有效,但只有这个也有效......为什么要打扰 js ?

                                【讨论】:

                                  【解决方案26】:

                                  Bootstrap 5 中,添加 data-bs-interval="6000" 属性,如下所示:

                                  <div id="myCarousel" class="carousel slide" data-bs-ride="carousel" data-bs-interval="6000">
                                  

                                  轮播项目每 6 秒更改一次。

                                  【讨论】:

                                    【解决方案27】:

                                    如果没有什么适合你的,试试这个。

                                    <div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="3000"></div>
                                    

                                    1000 是 1 秒,3000 是 3 秒。您可以将“3000”替换为您想要的滑块速度。

                                    下面是可以改变速度的css:

                                    .carousel-inner>.item {
                                    -webkit-transition: -webkit-transform 1.2s ease-in-out !important;
                                    -o-transition: -o-transform 1.2s ease-in-out !important;
                                    transition: transform 1.2s ease-in-out !important;
                                    }
                                    

                                    要查看完整的帖子,请查看 this post here.

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 2018-12-10
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2018-09-18
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多