Як я можу контролювати швидкість, через яку карусель завантажувального ремінця ковзає в елементах?


84

Я бачу, що ви можете встановити інтервал, але я хочу контролювати, як швидко елементи ковзають?

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

Службовці Google -> уповільнити ІНТЕРВАЛ (час між показом наступного зображення) ::: stackoverflow.com/a/38203373/1985648
Дон Чідл

Відповіді:


114

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. Це синхронізує перехід і запобігає зникненню слайда до закінчення переходу.

РЕДАКТУВАТИ 8.07.2014

Як зазначив @YellowShark, редагування в JS більше не потрібні. Застосовувати лише зміни css.

РЕДАГУЙТЕ 20.08.2015. Після редагування файлу css вам просто потрібно відредагувати CAROUSEL.TRANSITION_DURATION (у bootstrap.js) або c.TRANSITION_DURATION (якщо ви використовуєте bootstrap.min.js) і змінити значення всередині нього (600 за замовчуванням). Кінцеве значення має бути таким самим, яке ви ввели у файл css (наприклад, 10 с у css = 10000 у .js)

EDIT 16/01/2018 Для 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 вашого веб-сайту.


1
Дякую за відповідь! Я спробував розмістити останнє в своїх стилях на моїй головній сторінці .html і змінив .6 на .1, і, здається, це не мало ефекту за допомогою chrome.
genxgeek

Незрозуміло ... Ви намагалися змінити файли завантажувального файлу або просто додали ці матеріали у свій власний css? Редагувати файли завантажувального файлу безпечніше. В іншому випадку вам потрібно переконатися, що ваші стилі завантажуються останніми і перезаписати стилі завантаження.
Дмитро Єфименко

2
Просто хотів зазначити, що вам НЕ потрібно змінювати будь-який javaScript (більше), цей рядок у коді тепер тягне значення .css ('тривалість переходу') , тому вам просто потрібно додати трохи CSS, як описано вище, і Це воно. (Також переконайтеся, що елемент каруселі має клас "слайд", не впевнений, що це згадується в документах.)
YellowShark

5
У Bootstrap 3 (v3.3.5, так чи інакше) JS більше не витягує це значення тривалості з CSS. Його можна легко встановити, не змінюючи Bootstrap так:jQuery.fn.carousel.Constructor.TRANSITION_DURATION = 1000;
Walf

1
jQuery.fn.carousel.Constructor.TRANSITION_DURATION повертає невизначений. Як це можна змінити? Перехід працює, і він повільно ковзає, але зображення, що висувається, стає відображеним: немає; занадто швидко.
Бен,

93

Просто напишіть data-intervalв divмістить каруселі:

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

Приклад взято з w3schools .


Будь ласка, спробуйте відформатувати своє запитання більш правильно. До речі. лише посилання не вважаються хорошими відповідями.
ckruczek

1
Попередження: "інтервал даних" вимірюється в мілісекундах. 500 = 0,5 сек (стільки швидко). Якщо у вас є текст для показу на слайдах, краще 10000 (10 секунд). Працює нормально. Я думаю, що це має бути прийнятою відповіддю.
Renascienza,

19
Ця відповідь неправильна . data-intervalвизначає проміжок часу, через який рухається новий слайд. Це не визначає, скільки часу потрібно для переміщення одного слайда.
user31782

1
Дякую, чувак, це врятувало мені день. +1, і це слід перевірити як правильну відповідь, а не редагувати файл bootstrap.css.
FONGOH MARTIN

2
Я шукав ЦЮ точну відповідь ... але спробував іншу відповідь раніше, перш ніж зрозумів, що це пов'язано зі швидкістю слайда, тоді як ця відповідь стосується інтервалів між слайдами. Тож дякую за включення цієї відповіді, оскільки саме цього я і хотів! (хоча 500 - це занадто швидко, але це вже зовсім інша історія)
Малахія,

12

Вам потрібно встановити інтервал у головному DIV як тег інтервалу даних. Це буде працювати нормально, і ви можете приділяти різний час різним слайдам.

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

Можете навести приклад. Мені потрібно вказати різний інтервал часу для слайдів різниці, і вони налаштовуються в моєму контролері, поверненому з виклику API. Чи можемо ми також показувати веб-сторінки за допомогою повзунка?
Archna

1
інтервал даних визначає проміжок часу, після якого рухається новий слайд, а не тривалість анімації.
Рікардо Вігатті

11

Для 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)

Кріс, дивовижно. Дякую!
genxgeek

8

Одне, що я помітив, - це те, що Bootstrap 3 додає стилі як за допомогою a, так .6sі 0.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
Не працює для мене: (він все одно швидко
рухається,

7

У Bootstrap 4 просто використовуйте цей CSS:

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

Змініть 3sтривалість за вашим вибором.


1
дуже дуже приємно :)
Мохаммед Баашар

6

для мене працював, щоб додати це в кінці мого подання:

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

це дає каруселі інтервал у 8 секунд


2

Якщо вам потрібно зробити це програмно, щоб змінити (наприклад) швидкість на основі певних умов, можливо, лише на одній з багатьох каруселей, ви можете зробити щось подібне:

Якщо 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 (...), щоб включити інші браузери.


2

включивши bootstrap.min.jsабо нестиснувши, ви можете просто додати інтервал як параметр, як показано нижче. jQuery("#numbers").carousel({'interval':900 });Це працює для мене


2

Якщо ви не хочете змінювати js-файли bootstrap, ви також можете безпосередньо ввести потрібне значення у плагін jquery (bootsrap 3.3.6).

Звичайно, для цього потрібно, щоб карусель активувалася вручну через js, а не безпосередньо через атрибут data-ride.

Наприклад:

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

Мені подобається такий підхід, оскільки він не вимагає від вас редагування bootstrap.jsта робить його "неможливим для оновлення" ..
TryingToImprove

Після зміни на 200 я більше не бачу плавної анімації, зображення зникнуть прямо в середині переходу
TomSawyer,

Привіт @TomSawyer - анімація підтримується через css, але важливо, щоб TRANSITON_DURATION було досить довгим, щоб охопити повний перехід. у javascript це просто визначає, коли встановлено inклас і коли його знову видалено. Якщо ви хочете скоротити анімацію, перевірте, де це визначено в меншій кількості файлів.
Андреас

2

Для початкового завантаження 4 з СКС, ви можете замінити змінні конфігурації $carousel-transition-durationв вашому , _variables.scssяк це:

$carousel-transition-duration: 2s;

Або для індивідуальної тривалості елемента встановіть

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

вашого конкретного елемента у вашому css / scss.


2

не потрібен зовнішній код, просто використовуйте data-interval=""атрибут

більше інформації відвідайте getbootstrap

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

коли потрібно змінити швидкість зміни "2500"


1

Мені вдалося змінити інтервал у bootstrap.js

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

1
Це контролює частоту анімації, а не швидкість окремої анімації.
Уолф

1

Щоб доповнити попередні відповіді, після редагування файлу CSS вам просто потрібно відредагувати CAROUSEL.TRANSITION_DURATIONbootstrap.js ) абоc.TRANSITION_DURATION (якщо ви використовуєте bootstrap.min.js ) і змінити значення всередині нього (600 за замовчуванням). Кінцеве значення має бути таким самим, яке ви ввели у файл CSS (наприклад, 10 секунд у CSS = 10000 у форматі .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

Якщо ви хочете змінити швидкість, з якою слайди входять і виходять (а не проміжок часу між зміною слайдів, що називається інтервалом) для 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. Для цього ви перезапишете функцію bootstrap.min.js за замовчуванням після її завантаження. (На мій погляд, це не гарна ідея перезаписувати файли завантаження безпосередньо). тож створіть mynewscript.js і завантажте його після bootstrap.min.js та додайте нову функцію каруселі. Єдиний рядок, який ви хочете відредагувати, - це цей, Карусель.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);

1

У вашому CSS:

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

Будьте уважні, час включено в інтервал даних, визначений для каруселі.

Сподіваюся, це допоможе ... :)



0

У вашому файлі 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'),
                }
            }
        });
    });


-1

Якщо використовується модуль ngCarousel, відредагуйте змінну інтервалу у файлі @ ng-bootstrap / ng-bootstrap / carousel-config.js так:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.