【问题标题】:Bootstrap modal-within-modal image carousel issueBootstrap modal-within-modal 图像轮播问题
【发布时间】:2019-07-17 15:48:33
【问题描述】:

我有一个可以容纳图片库的模式。当第一个模态打开时,会有缩略图,当单击缩略图时,将在第一个模态的顶部打开一个辅助模态,它将在轮播中具有较大的图像(当然无论单击哪个缩略图,都对应大图将在第二个模态的轮播位置打开)。

现在,当我单击任一缩略图时,会打开第二个模式,但它会显示两个缩略图,而不是相应缩略图的较大图像。很奇怪,我看代码好像是对的,但不知道为什么它不起作用。

这是 HTML:

<!-- kitchens modal -->
<div class="modal kitchens-modal fade" id="kitchens-modal" role="dialog">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <!-- modal header -->
            <div class="modal-header">
                <h1>KITCHENS</h1>
                <h3>Your dream kitchen is so close...</h3>
            </div>
            <!-- end modal header -->

            <!-- modal body -->
            <div class="modal-body">
                <div class="row">
                    <div class="col-lg-2 col-sm-3 col-xs-6">
                        <a href="#">
                            <img class="thumbnail img-responsive" src="./assets/img/kitchens/kitchen.jpg" alt="Kitchen" title="Kitchen">
                        </a>
                    </div>
                    <div class="col-lg-2 col-sm-3 col-xs-6">
                        <a href="#">
                            <img class="thumbnail img-responsive" src="./assets/img/kitchens/kitchen1.jpg" alt="Kitchen two" title="Kitchen two">
                        </a>
                    </div>
                </div>
            </div>
            <!-- end modal body -->

            <!-- modal footer -->
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
            <!--end  modal footer -->
        </div>
    </div>
</div>
<!-- end kitchens modal -->

<!-- inner kitchen gallery modal -->
<div class="modal" id="myModal" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h3 class="modal-title"></h3>
            </div>

            <div class="modal-body">
                <div id="modalCarousel" class="carousel">
                    <div class="carousel-inner">

                    </div>

                    <a class="carousel-control left" href="#modaCarousel" data-slide="prev">
                        <i class="glyphicon glyphicon-chevron-left"></i>
                    </a>
                    <a class="carousel-control right" href="#modalCarousel" data-slide="next">
                        <i class="glyphicon glyphicon-chevron-right"></i>
                    </a>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- end inner kitchen gallery modal -->

还有 CSS:

.thumbnail {
    height: 100px;
    margin: 6px;
}

.thumbnail {
    margin-bottom: 6px;
}


.carousel-control.left,
.carousel-control.right {
    background-image: none;
    margin-top: 10%;
    width: 5%;
}

最后,JS:

$('.row .thumbnail').on('load', function() {

}).each(function(i) {
  if(this.complete) {
        var item = $('<div class="item"></div>');
        var itemDiv = $(this).parents('div');
        var title = $(this).parent('a').attr("title");

        item.attr("title", title);
        $(itemDiv.html()).appendTo(item);
        item.appendTo('.carousel-inner'); 
        if (i === 0) { // set first item active
            item.addClass('active');
        }
  }
});

/* activate the carousel */
$('#modalCarousel').carousel({interval: false});

/* change modal title when slide changes */
$('#modalCarousel').on('slid.bs.carousel', function () {
    $('.modal-title').html($(this).find('.active').attr("title"));
});

/* when clicking a thumbnail */
$('.row .thumbnail').click(function(){
    var idx = $(this).parents('div').index();
    var id = parseInt(idx);
    $('#myModal').modal('show'); // show the modal
    $('#modalCarousel').carousel(id); // slide carousel to selected
});

我从网上找到的模态库中得到了这个,并对其进行了一些修改,但它不起作用!当我打开模态框并单击缩略图时,第二个模态框只包含所有缩略图,而不是一个图像。

【问题讨论】:

    标签: html css twitter-bootstrap modal-dialog bootstrap-modal


    【解决方案1】:

    你可以试试这样的:

    $('.kitchens-modal .thumbnail').each(function(i) {
      var item = $('<div class="item"></div>');
      var itemDiv = $(this).parents('div');
      var title = $(this).parent('a').attr("title");
    
      item.attr("title", title);
      $(itemDiv.html()).appendTo(item);
      item.appendTo('.carousel-inner'); 
      if (i === 0) { // set first item active
          item.addClass('active');
      }
    });
    
    /* activate the carousel */
    $('#modalCarousel').carousel({interval: false});
    
    /* change modal title when slide changes */
    $('#modalCarousel').on('slid.bs.carousel', function () {
        $('.modal-title').html($(this).find('.active').attr("title"));
    });
    
    /* when clicking a thumbnail */
    $('.row .thumbnail').click(function(){
        var idx = $(this).parents('div').index();
        var id = parseInt(idx);
        $('#myModal').modal('show'); // show the modal
        $('#modalCarousel').carousel(id); // slide carousel to selected
    });
    .thumbnail {
        height: 100px;
        margin: 6px;
    }
    
    .thumbnail {
        margin-bottom: 6px;
    }
    
    
    .carousel-control.left {
        background-image: none;
        position: absolute;
        top: 50%;
        left: 0;
        width: 25px;
        height: 100%;
        transform: translateY(-50%);
    }
    
    .carousel-control.right {
        background-image: none;
        position: absolute;
        top: 50%;
        right: 0;
        width: 25px;
        height: 100%;
        transform: translateY(-50%);
    }
    
    .item .thumbnail {
      margin: 0 auto;
    }
    
    body {
      margin: 20px !important;
    }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
    
    <div class="btn btn-primary" data-target="#kitchens-modal" data-toggle="modal">Open Kitchen Modal</div>
    
    <!-- kitchens modal -->
    <div class="modal kitchens-modal fade" id="kitchens-modal" role="dialog">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <!-- modal header -->
                <div class="modal-header">
                    <h1>KITCHENS</h1>
                    <h3>Your dream kitchen is so close...</h3>
                </div>
                <!-- end modal header -->
    
                <!-- modal body -->
                <div class="modal-body">
                    <div class="row">
                        <div class="col-lg-2 col-sm-3 col-xs-6">
                            <a href="#">
                                <img class="thumbnail img-responsive" src="http://placehold.it/200x200" alt="Kitchen" title="Kitchen">
                            </a>
                        </div>
                        <div class="col-lg-2 col-sm-3 col-xs-6">
                            <a href="#">
                                <img class="thumbnail img-responsive" src="http://placehold.it/300x300" alt="Kitchen two" title="Kitchen two">
                            </a>
                        </div>
                    </div>
                </div>
                <!-- end modal body -->
    
                <!-- modal footer -->
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
                <!--end  modal footer -->
            </div>
        </div>
    </div>
    <!-- end kitchens modal -->
    
    <!-- inner kitchen gallery modal -->
    <div class="modal" id="myModal" role="dialog">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h3 class="modal-title"></h3>
                </div>
    
                <div class="modal-body">
                    <div id="modalCarousel" class="carousel">
                        <div class="carousel-inner">
    
                        </div>
    
                        <a class="carousel-control left" href="#modalCarousel" data-slide="prev">
                            <i class="glyphicon glyphicon-chevron-left"></i>
                        </a>
                        <a class="carousel-control right" href="#modalCarousel" data-slide="next">
                            <i class="glyphicon glyphicon-chevron-right"></i>
                        </a>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- end inner kitchen gallery modal -->
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>

    希望这会有所帮助!

    【讨论】:

    • 太棒了,非常感谢!!得到它的工作。我浏览了您的代码后看到了错误,我是对的,这是我忽略的一些小问题。非常感谢您的帮助!
    • @Lushmoney 这是我的荣幸!
    猜你喜欢
    • 2015-11-18
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2019-11-29
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多