Многоразовая бутстрап модальная карусель - PullRequest
0 голосов
/ 03 марта 2019

Я пытался получить повторно используемые html-компоненты (загрузочная модальная карусель), потому что у меня есть около 9 модалов, и для этого нужно много строк кода.Я успешно сделал это, используя cloneNode из JS и создав клон on-line с 3-мя модалами и добавив его в новый раздел, после которого ничего не отображалось для основного модального режима.Дело в том, что только первый и второй ряд работают, третий не отображается, даже если все идентификаторы установлены правильно.Ниже приведен фрагмент шаблона модальной строки

<div class="row uniqueClass">
            <div class="col-12 row">
                <div class="col-xs-4 col-sm-4 col-md-4  text-center">
                    <img src='pictures/1.jpg' class = "RowImg1" id="img1" data-toggle="modal" data-target="#firstRowfirstModal" height="300px" width="300px" />
                    <h1 id="food-type1"></h1>
                    <div class="modal fade modal-img1" id="firstRowfirstModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
                            <div class="modal-content">
                                <div class="modal-body">
                                    <div id="firstRowfirstCarousel" class="carousel slide carousel-img1" data-ride="carousel">
                                          <div class="carousel-inner">
                                            <div class="carousel-item active">
                                              <img class="d-block w-100 one" src="pictures/1.jpg" alt="First slide">
                                            </div>
                                            <div class="carousel-item two">
                                              <img class="d-block w-100" src="pictures/2.jpg" alt="Second slide">
                                            </div>
                                            <div class="carousel-item three">
                                              <img class="d-block w-100" src="pictures/3.jpg" alt="Third slide">
                                            </div>
                                            <div class="carousel-item four">
                                              <img class="d-block w-100" src="pictures/4.jpg" alt="Third slide">
                                            </div>
                                            <div class="carousel-item five">
                                              <img class="d-block w-100" src="pictures/5.jpg" alt="Third slide">
                                            </div>
                                            <div class="carousel-item six">
                                              <img class="d-block w-100" src="pictures/6.jpg" alt="Third slide">
                                            </div>
                                            <div class="carousel-item seven">
                                              <img class="d-block w-100" src="pictures/7.jpg" alt="Third slide">
                                            </div>
                                          </div>
                                          <a class="carousel-control-prev prev1" href="#firstRowfirstCarousel" role="button" data-slide="prev">
                                            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                            <span class="sr-only">Previous</span>
                                          </a>
                                          <a class="carousel-control-next next1" href="#firstRowfirstCarousel" role="button" data-slide="next">
                                            <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                            <span class="sr-only">Next</span>
                                          </a>
                                    </div>
                                </div>  
                            </div>
                        </div>
                    </div>
                </div>
                <div class="col-xs-4 col-sm-4 col-md-4  text-center">
                    <img src='pictures/8.jpg' class="RowImg2" id="img2" data-toggle="modal" data-target="#firstRowSecondModal" height="300px" width="300px" />
                    <h1 id="food-type2"></h1>
                    <div class="modal fade modal-img2" id="firstRowSecondModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
                            <div class="modal-content">
                                <div class="modal-body">
                                    <div id="firstRowSecondCarousel" class="carousel slide carousel-img2" data-ride="carousel">
                                          <div class="carousel-inner eigth">
                                            <div class="carousel-item active">
                                              <img class="d-block w-100" src="pictures/8.jpg" alt="First slide">
                                            </div>
                                            <div class="carousel-item nine">
                                              <img class="d-block w-100" src="pictures/9.jpg" alt="Second slide">
                                            </div>
                                            <div class="carousel-item ten">
                                              <img class="d-block w-100" src="pictures/10.jpg" alt="Third slide">
                                            </div>
                                            <div class="carousel-item eleven">
                                              <img class="d-block w-100" src="pictures/11.jpg" alt="Fourth slide">
                                            </div>
                                            <div class="carousel-item twelve">
                                              <img class="d-block w-100" src="pictures/12.jpg" alt="Fifth slide">
                                            </div>
                                            <div class="carousel-item thirteen">
                                              <img class="d-block w-100" src="pictures/13.jpg" alt="Sixth slide">
                                            </div>
                                            <div class="carousel-item fourtheen">
                                              <img class="d-block w-100" src="pictures/14.jpg" alt="Seventh slide">
                                            </div>
                                          </div>
                                          <a class="carousel-control-prev prev2" href="#firstRowSecondCarousel" role="button" data-slide="prev">
                                            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                            <span class="sr-only">Previous</span>
                                          </a>
                                          <a class="carousel-control-next next2" href="#firstRowSecondCarousel" role="button" data-slide="next">
                                            <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                            <span class="sr-only">Next</span>
                                          </a>
                                    </div>
                                </div>  
                            </div>
                        </div>
                    </div>
                </div>
                <div class="col-xs-4 col-sm-4 col-md-4  text-center">
                    <img src='pictures/8.jpg' class="RowImg3" id="img3" data-toggle="modal" data-target="#firstRowThirdModal" height="300px" width="300px" />
                    <h1 id="food-type3"></h1>
                    <div class="modal fade modal-img3" id="firstRowThirdModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
                        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
                            <div class="modal-content">
                                <div class="modal-body">
                                    <div id="firstRowThirdCarousel" class="carousel slide carousel-img3" data-ride="carousel">
                                          <div class="carousel-inner eigth">
                                            <div class="carousel-item active">
                                              <img class="d-block w-100" src="pictures/15.jpg" alt="First slide">
                                            </div>
                                            <div class="carousel-item nine">
                                              <img class="d-block w-100" src="pictures/16.jpg" alt="Second slide">
                                            </div>
                                            <div class="carousel-item ten">
                                              <img class="d-block w-100" src="pictures/17.jpg" alt="Third slide">
                                            </div>
                                            <div class="carousel-item eleven">
                                              <img class="d-block w-100" src="pictures/18.jpg" alt="Fourth slide">
                                            </div>
                                            <div class="carousel-item twelve">
                                              <img class="d-block w-100" src="pictures/19.jpg" alt="Fifth slide">
                                            </div>
                                            <div class="carousel-item thirteen">
                                              <img class="d-block w-100" src="pictures/20.jpg" alt="Sixth slide">
                                            </div>
                                            <div class="carousel-item fourtheen">
                                              <img class="d-block w-100" src="pictures/21.jpg" alt="Seventh slide">
                                            </div>
                                          </div>
                                          <a class="carousel-control-prev prev3" href="#firstRowThirdCarousel" role="button" data-slide="prev">
                                            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                            <span class="sr-only">Previous</span>
                                          </a>
                                          <a class="carousel-control-next next3" href="#firstRowThirdCarousel" role="button" data-slide="next">
                                            <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                            <span class="sr-only">Next</span>
                                          </a>
                                    </div>
                                </div>  
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

А ниже вы найдете мой js, который делает трюк:

$(function(){
    let x = 1;

    var ids = [
        {'modalId1': 'firstRowfirstModal', 'carouselId1': 'firstRowfirstCarousel', 
         'modalId2': 'firstRowSecondModal', 'carouselId2': 'firstRowSecondCarousel', 
         'modalId3': 'firstRowThirdModal', 'carouselId3': 'firstRowThirdCarousel'},

        {'modalId1': 'secondRowFirstModal', 'carouselId1': 'secondRowFirstCarousel', 
         'modalId2': 'secondRowSecondModal', 'carouselId2': 'secondRowSecondCarousel',
         'modalId3': 'secondRowThirdModal', 'carouselId3': 'secondRowThirdCarousel'},

        {'modalId1': 'thirdRowFirstModal', 'carouselId1': 'thirdRowFirstCarousel',
         'modalId2': 'thirdRowSecondModal', 'carouselId2': 'thirdRowSecondCarousel',
         'modalId3': 'thirdRowThirdModal', 'carouselId3': 'thirdRowThirdCarousel'}
    ]

    var titles = [
        {'menu1': 'Forretter', 'menu2': 'Futo Maki', 'menu3': 'Hoso Maki'},
        {'menu1': 'Kaburimaki', 'menu2': 'Nigiri', 'menu3': 'Sashimi'},
        {'menu1': 'Ura Maki', 'menu2': 'Sushi Box', 'menu3': 'Sushi Menuer'}
    ]

    var target = document.getElementById('model-target');
    var tmpl = document.querySelector('.uniqueClass');

    for(let i = 0; i < ids.length ; i++){

        var id = ids[i];
        var title = titles[i]
        let img = x, img2 = img + 7, img3 = img2 + 7;

        tmpl.querySelector('.RowImg1').dataset.target = '#' + id.modalId1;
        tmpl.querySelector('.RowImg1').src = 'pictures/' + img + '.jpg';
        tmpl.querySelector('.modal-img1').id = id.modalId1;
        tmpl.querySelector('.carousel-img1').id = id.carouselId1;
        tmpl.querySelector('.prev1').href = '#' + id.carouselId1;
        tmpl.querySelector('.next1').href = '#' + id.carouselId1;
        tmpl.querySelector('#food-type1').innerText = title.menu1;

        tmpl.querySelector('.RowImg2').dataset.target = '#' + id.modalId2;
        tmpl.querySelector('.RowImg2').src = 'pictures/' + img2 + '.jpg';
        tmpl.querySelector('.modal-img2').id = id.modalId2;
        tmpl.querySelector('.carousel-img2').id = id.carouselId2;
        tmpl.querySelector('.prev2').href = '#' + id.carouselId2;
        tmpl.querySelector('.next2').href = '#' + id.carouselId2;
        tmpl.querySelector('#food-type2').innerText = title.menu2;

        tmpl.querySelector('.RowImg3').dataset.target = '#' + id.modalId3;
        tmpl.querySelector('.RowImg3').src = 'pictures/' + img3 + '.jpg';
        tmpl.querySelector('.modal-img3').id = id.modalId3;
        tmpl.querySelector('.carousel-img3').id = id.carouselId3;
        tmpl.querySelector('.prev3').href = '#' + id.carouselId3;
        tmpl.querySelector('.next3').href = '#' + id.carouselId3;
        tmpl.querySelector('#food-type3').innerText = title.menu3;

        target.appendChild(tmpl.cloneNode(true));
        //appending each copy to the target section 
        x = img3+7;
    }

})

Так что моя проблема в том, когда цикл доходит до третьегоитерация в последовательности с третьим рядом.Первый и второй работает как надо.Если есть какой-либо другой способ добиться повторного использования этого кода, я открыт, чтобы услышать вашу мысль.Спасибо

...