Làm cách nào để kiểm soát tốc độ băng chuyền bootstrap trượt trong các mục?


83

Tôi thấy bạn có thể đặt khoảng thời gian nhưng tôi muốn kiểm soát tốc độ trượt của các mục?

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

Nhân viên Google -> để làm chậm INTERVAL (thời gian từ khi hiển thị hình ảnh tiếp theo) ::: stackoverflow.com/a/38203373/1985648
Don Cheadle

Câu trả lời:


114

Tốc độ không thể được kiểm soát bởi API. Mặc dù bạn có thể sửa đổi CSS phụ trách việc đó. Trong carousel.lesstệp tìm thấy

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

và thay đổi .6sbất cứ điều gì bạn muốn.


Trong trường hợp bạn không sử dụng .less, hãy tìm trong bootstrap.csstệp:

.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;
}

và thay đổi 0.6stheo thời gian bạn muốn. Bạn cũng có thể muốn chỉnh sửa thời gian trong lệnh gọi hàm bên dưới:

.emulateTransitionEnd(2000) 

tại bootstrap.jschức năng Carousel.prototype.slide. Điều đó đồng bộ hóa quá trình chuyển đổi và ngăn trang trình bày phân tán trước khi quá trình chuyển đổi kết thúc.

CHỈNH SỬA 7/8/2014

Như @YellowShark đã chỉ ra rằng các chỉnh sửa trong JS không cần thiết nữa. Chỉ áp dụng các thay đổi css.

CHỈNH SỬA 20/8/2015 Bây giờ, sau khi bạn chỉnh sửa tệp css của mình, bạn chỉ cần chỉnh sửa CAROUSEL.TRANSITION_DURATION (trong bootstrap.js) hoặc c.TRANSITION_DURATION (nếu bạn sử dụng bootstrap.min.js) và thay đổi giá trị bên trong nó (600 cho mặc định). Giá trị cuối cùng phải giống với giá trị mà bạn đặt trong tệp css của mình (ví dụ: 10s trong css = 10000 trong .js)

CHỈNH SỬA 16/01/2018 Đối với Bootstrap 4, để thay đổi thời gian chuyển đổi thành ví dụ: 2 giây, hãy thêm

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

vào tệp JS của trang web của bạn và

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

vào tệp CSS của trang web của bạn.


1
Cảm ơn vi đa trả lơi! Tôi đã thử đặt cái sau vào kiểu của trang .html chính của mình và thay đổi .6 thành .1 và nó dường như không có tác dụng khi sử dụng chrome.
genxgeek

Không rõ ràng ... bạn đã cố gắng sửa đổi các tệp bootstrap hay bạn chỉ thêm nội dung này vào css của riêng mình? Sẽ an toàn hơn khi chỉnh sửa các tệp bootstrap. Nếu không, bạn cần đảm bảo rằng các kiểu của bạn tải lần cuối và ghi đè các kiểu bootstrap.
Dmitry Efimenko

2
Chỉ muốn chỉ ra rằng bạn KHÔNG phải sửa đổi bất kỳ javaScript nào (nữa), dòng đó trong mã bây giờ sẽ kéo giá trị .css ('chuyển đổi-thời lượng') , vì vậy bạn chỉ cần thêm một số CSS như được mô tả ở trên, và đó là nó. (Ngoài ra, hãy chắc chắn rằng mục băng chuyền có lớp "trang trình bày", không chắc chắn là được đề cập trong tài liệu.)
YellowShark Ngày

5
Trong Bootstrap 3 (v3.3.5, dù sao), JS không còn kéo giá trị thời lượng đó từ CSS nữa. Nó có thể dễ dàng thiết lập mà không cần sửa đổi Bootstrap như vậy:jQuery.fn.carousel.Constructor.TRANSITION_DURATION = 1000;
Walf

1
jQuery.fn.carousel.Constructor.TRANSITION_DURATION trả về không xác định. Làm thế nào để thay đổi nó? Quá trình chuyển đổi hoạt động và nó trượt chậm, nhưng hình ảnh trình chiếu ra sẽ hiển thị: không có; quá nhanh.
Ben

93

Chỉ cần viết data-intervalvào divbăng chuyền chứa:

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

Ví dụ lấy từ w3schools .


Hãy cố gắng định dạng câu hỏi của bạn theo cách phù hợp hơn. Btw. chỉ liên kết không được coi là câu trả lời tốt.
ckruczek

1
Cảnh báo: "khoảng thời gian dữ liệu" được đo bằng mili giây. 500 = 0,5 giây (quá nhanh). Nếu bạn có một số văn bản để hiển thị trên các trang trình bày, 10000 (10 giây) là tốt hơn. Hoạt động tốt. Tôi nghĩ rằng đó phải là câu trả lời được chấp nhận.
Renascienza

19
Câu trả lời này không chính xác . data-intervalxác định khoảng thời gian mà sau đó trang chiếu mới di chuyển. Nó không xác định mất bao nhiêu thời gian để di chuyển một trang trình bày.
user31782 11/02/17

1
Cảm ơn anh bạn, nó đã cứu ngày của tôi. +1 và điều này nên được chọn là câu trả lời đúng thay vì chỉnh sửa tệp bootstrap.css.
FONGOH MARTIN

2
Tôi đang tìm câu trả lời chính xác NÀY ... nhưng đã thử câu trả lời khác trước đó, trước khi tôi nhận ra rằng điều đó liên quan đến tốc độ trang trình bày, trong khi câu trả lời này liên quan đến khoảng thời gian giữa các trang trình bày. Vì vậy, cảm ơn bạn đã bao gồm câu trả lời này, vì đây chính xác là những gì tôi muốn! (mặc dù 500 là quá nhanh, nhưng đó là một câu chuyện khác)
Malachi

12

Bạn cần đặt khoảng thời gian trong DIV chính dưới dạng thẻ khoảng thời gian dữ liệu. Nó sẽ hoạt động tốt và bạn có thể đưa ra thời gian khác nhau cho các trang trình bày khác nhau.

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

Bạn có thể cung cấp một ví dụ. Tôi cần cung cấp khoảng thời gian khác nhau cho các trang trình bày khác nhau và chúng được cấu hình trong bộ điều khiển của tôi được trả về từ lệnh gọi api. Chúng tôi có thể hiển thị các trang web bằng cách sử dụng thanh trượt không?
Archna

1
khoảng thời gian dữ liệu xác định khoảng thời gian mà sau đó trang chiếu mới di chuyển, không phải thời lượng hoạt ảnh.
Ricardo Vigatti

11

Đối với Twitter Bootstrap 3:

Bạn phải thay đổi quá trình chuyển đổi CSS như được chỉ định trong câu trả lời khác:

.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;
}

Từ 0,6 giây đến 1,5 giây (ví dụ).

Nhưng ngoài ra, có một số Javascript để thay đổi. Trong bootstrap.js có một dòng:

.emulateTransitionEnd(600)

Điều này sẽ được thay đổi thành lượng mili giây tương ứng. Vì vậy, trong 1,5 giây, bạn sẽ thay đổi số thành 1500:

.emulateTransitionEnd(1500)

Chris, tuyệt vời. Cảm ơn!
genxgeek

8

Một điều tôi nhận thấy là Bootstrap 3 đang thêm các kiểu với cả a .6s0.6s. Vì vậy, bạn có thể cần xác định rõ ràng thời lượng chuyển đổi của mình như thế này (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
Không làm việc cho tôi :( nó vẫn lăn nhanh như một chiếc xe không có thay đổi (tôi đã thay đổi đến 1.6)
Andiana

7

Với Bootstrap 4, chỉ cần sử dụng CSS này:

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

Thay đổi 3sthời hạn bạn chọn.


1
rất rất tốt :)
Mohammed Baashar

5

vì tôi đã làm việc để thêm cái này vào cuối chế độ xem của mình:

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

nó cung cấp cho băng chuyền một khoảng thời gian là 8 giây


2

Nếu bạn cần làm điều đó theo chương trình để thay đổi (ví dụ) tốc độ dựa trên các điều kiện nhất định trên có lẽ chỉ một trong nhiều băng chuyền, bạn có thể làm như sau:

Nếu Html như thế này:

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

JavaScript sẽ như thế này:

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

Thêm nhiều .css (...) để bao gồm các trình duyệt khác.


2

sau khi bao gồm bootstrap.min.jshoặc giải nén, bạn chỉ có thể thêm khoảng thời gian làm tham số như bên dưới. jQuery("#numbers").carousel({'interval':900 });Nó hoạt động với tôi


2

Nếu bạn không muốn thay đổi tệp js của bootstrap, bạn cũng có thể đưa trực tiếp giá trị mong muốn vào plugin jquery (bootsrap 3.3.6).

Tất nhiên, điều này yêu cầu băng chuyền được kích hoạt thủ công thông qua js, không phải trực tiếp thông qua thuộc tính data-ride.

Ví dụ:

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

Tôi thích cách tiếp cận này bởi vì nó không đòi hỏi bạn phải chỉnh sửa bootstrap.js, và làm cho nó "unupdateable" ..
TryingToImprove

Sau khi thay đổi thành 200, tôi không thấy hình ảnh động mượt mà nữa, hình ảnh sẽ phân tán ngay giữa quá trình chuyển đổi
TomSawyer

Xin chào @TomSawyer - các hoạt ảnh được duy trì qua css, nhưng điều quan trọng là TRANSITON_DURATION đủ dài để bao gồm toàn bộ quá trình chuyển đổi. trong javascript nó chỉ định nghĩa, khi nào inlớp được thiết lập và khi nào nó lại bị xóa. Nếu bạn muốn rút ngắn hoạt ảnh, vui lòng kiểm tra xem nó được xác định ở đâu trong các tệp ít hơn.
Andreas

2

không cần bất kỳ mã bên ngoài nào chỉ cần sử dụng data-interval=""thuộc tính

thêm thông tin hãy truy cập getbootstrap

<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel" data-interval="2500">

khi bạn muốn thay đổi tốc độ thay đổi "2500"


1

Điều làm việc cho tôi là thay đổi khoảng thời gian trong bootstrap.js

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

1
Điều đó kiểm soát tần suất của hoạt ảnh, không phải tốc độ của từng hoạt ảnh.
Walf

1

Để bổ sung cho các câu trả lời trước, sau khi chỉnh sửa tệp CSS, bạn chỉ cần chỉnh sửa CAROUSEL.TRANSITION_DURATION(trong bootstrap.js ) hoặc c.TRANSITION_DURATION(nếu bạn sử dụng bootstrap.min.js ) và thay đổi giá trị bên trong nó (600 cho mặc định). Giá trị cuối cùng phải giống giá trị mà bạn đặt trong tệp CSS của mình (ví dụ: 10 giây trong CSS = 10000 trong .js)

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
}

1

Nếu bạn đang tìm cách chỉnh sửa tốc độ các trang chiếu vào và ra (không phải thời gian giữa các trang chiếu thay đổi được gọi là khoảng thời gian) cho bootstrap 3.3.5 | Sau khi tải các kiểu bootstrap CDN, hãy ghi đè các kiểu trong tập định kiểu css của riêng bạn bằng cách sử dụng các lớp sau. 1,5 là thời gian thay đổi.

.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;

}

sau đó, bạn sẽ cần thay thế hàm băng chuyền trong javascript. Để làm điều này, bạn sẽ ghi đè hàm bootstrap.min.js mặc định sau khi nó tải. (Theo tôi không phải là ý kiến ​​hay nếu ghi đè trực tiếp các tệp bootstrap). vì vậy hãy tạo một mynewscript.js và tải nó sau bootstrap.min.js và thêm chức năng băng chuyền mới. Dòng duy nhất bạn muốn chỉnh sửa là dòng này, Carousel.TRANSITION_DURATION = 1500. 1500 là 1,5. Hi vọng điêu nay co ich.

    +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);

1

Đối với bootstrap 4 với scss, bạn có thể ghi đè lên biến cấu hình $carousel-transition-durationcủa bạn _variables.scssnhư sau:

$carousel-transition-duration: 2s;

Hoặc đối với thời lượng riêng lẻ của phần tử, hãy đặt

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

của phần tử cụ thể của bạn trong css / scss của bạn.


0

Tất cả băng chuyền

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

    </script>

Vui lòng cung cấp lời giải thích kèm theo câu trả lời
Panther

1
Một lần nữa, điều này chỉ đơn giản là xác định khoảng thời gian chứ không phải thời gian chuyển tiếp
Tim Hallman

0

Trong CSS của bạn:

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

Hãy cẩn thận, thời gian được bao gồm trong khoảng dữ liệu được xác định cho băng chuyền.

Hy vọng nó giúp... :)


0

Trong tệp main.js hoặc bootstrap.js của bạn, hãy thay đổi giá trị của 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'),
                }
            }
        });
    });


-1

Nếu sử dụng mô-đun ngCarousel, hãy chỉnh sửa biến khoảng thời gian trong tệp @ ng-bootstrap / ng-bootstrap / carousel-config.js như sau:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.