Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2017, 12:10
adt adt вне форума
Новичок на форуме
Отправить личное сообщение для adt Посмотреть профиль Найти все сообщения от adt
 
Регистрация: 02.11.2017
Сообщений: 2

Как запустить слайдер bootstrap вручную?
Возникла проблема, где не ждали. http://classtoys.ru/
Если нажать на любую карточку, подробное описание откроется под карточкой. Там несколько изображений, которые lолжны по идее автоматически прокручиваться. Использован стандартный слайдер bootstrap.
Почему не работает, понятно. В bootstrap.js есть код:
$(window).on('load', function () {
    $('[data-ride="carousel"]').each(function () {
      var $carousel = $(this)
      Plugin.call($carousel, $carousel.data())
    })
  })

который запускается при загрузке страницы. А у нас при загрузке карусели нет, она формируется на лету. Я вставила вот такой код в кусок своего скрипта:
$('.toy-list-toy-wrapper a.item').on('click', function(e) {
    	e.preventDefault();

    	$('.expander').remove();

        var url = $(this).data('path');
        var toyId = $(this).data('toy');
        var toyRate = $(this).data('rate');

    	var parent = 0;
    	var currentIndex = 0;
    	var afterIndex = 0;

    	parent = $(this).closest('div.toy-list-toy-wrapper');
    	currentIndex = $('div.toy-list-toy-wrapper').index(parent);
    	afterIndex = Math.ceil((currentIndex+1)/quantityAfterAdd)*quantityAfterAdd;

        $.post(
            url,
            {
                toy: toyId,
                toyRate: toyRate,
                currentIndex: currentIndex
            },
            function(data) {

                var realIndex = afterIndex-1;
                if ($('div.toy-list-toy-wrapper').eq(realIndex).length == 0) {
                    while ($('div.toy-list-toy-wrapper').eq(realIndex).length == 0) {
                        realIndex = realIndex - 1;
                    }
                }
                $('div.toy-list-toy-wrapper').eq(realIndex).after(data);
                $('html, body').animate({
                    scrollTop: $(".expander").offset().top - 20
                }, 2000);
            }
        );
        $('[data-ride="carousel"]').each(function () {
            $(this).carousel()
        })
    });

последние строчки, сначала заводится .expander, потом, если в нем есть data-ride="carousel" - запускается слайдер. Работает только в хроме. Никак не пойму, почему. Что я делаю не так?
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2017, 12:17
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

adt,
Карусель нужно инициализировать после создания контента на странице, а не сразу после отправки асинхронного запроса.
Строки 39-41 нужно вставить после строки 36.
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2017, 12:35
adt adt вне форума
Новичок на форуме
Отправить личное сообщение для adt Посмотреть профиль Найти все сообщения от adt
 
Регистрация: 02.11.2017
Сообщений: 2

Это гениально!
Спасибо! Все заработало!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bootstrap как закрыть модальное окно Witold Events/DOM/Window 2 17.05.2015 18:50
как сделать Слайдер pitline jQuery 0 05.04.2014 21:55
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как запустить скрипт после отработки другого скрипта? roman2 Общие вопросы Javascript 2 10.08.2009 01:23
js файл(незнаю как запустить функцию) Temchik Opera, Safari и др. 6 20.07.2009 11:49