bootstrap *slide.bs.carousel* 事件未在 vue js 中触发

Posted

技术标签:

【中文标题】bootstrap *slide.bs.carousel* 事件未在 vue js 中触发【英文标题】:bootstrap *slide.bs.carousel* event is not firing in vue js 【发布时间】:2019-05-24 11:20:25 【问题描述】:
<div id="appFeatureimg" class="carousel slide">
    <div class="carousel-inner row w-100 mx-auto">
        <div class="carousel-item col-md-3 col-sm-3 col-3"  :class= "active: index==0 " v-for="(screenshot,index) in app_details.screenshots">
            <div class="panel panel-default">
               <div class="panel-thumbnail">
                     <a href="#" class="thumb">
                          <img class="img-fluid mx-auto d-block" :src="screenshot" >
                     </a>
               </div>
           </div>
       </div>
   </div>
   <a class="carousel-control-prev" href="#appFeatureimg" 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 text-faded" href="#appFeatureimg" role="button" data-slide="next">
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
      <span class="sr-only">Next</span>
   </a>
</div>

这是我生成轮播项目的 html

 <script>
            vue js code goes here
 </script>

及其他js代码

<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.13.0/umd/popper.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script>
    $( document ).ready(() => 
        console.log('ready');
        $('#appFeatureimg').on('slide.bs.carousel', (e) => 
            console.log('ready2');
            var $e = $(e.relatedTarget);
            var idx = $e.index();
            var itemsPerSlide = 4;
            var totalItems = $('.carousel-item').length;

            if (idx >= totalItems-(itemsPerSlide-1)) 
                var it = itemsPerSlide - (totalItems - idx);
                for (var i=0; i<it; i++) 
                    // append slides to end
                    if (e.direction=="left") 
                        $('.carousel-item').eq(i).appendTo('.carousel-inner');
                    
                    else 
                        $('.carousel-item').eq(0).appendTo('.carousel-inner');
                    
                
            
        );
    );
</script>

这是我用于轮播的 jQuery。

document.ready 函数后,我得到控制台打印,但引导事件 slide.bs.carousel 没有触发。 我将这些代码放在我的 vue js 和其他脚本之前,但没有结果。 任何建议都会非常明显。

【问题讨论】:

您问题中的源代码格式已损坏。请重新格式化。所以我可以理解和帮助 我格式化了@PreciousOkwu 【参考方案1】:

移动一下

$( document ).ready(() => 
        console.log('ready');
        $('#appFeatureimg').on('slide.bs.carousel', (e) => 
            console.log('ready2');
            var $e = $(e.relatedTarget);
            var idx = $e.index();
            var itemsPerSlide = 4;
            var totalItems = $('.carousel-item').length;

            if (idx >= totalItems-(itemsPerSlide-1)) 
                var it = itemsPerSlide - (totalItems - idx);
                for (var i=0; i<it; i++) 
                    // append slides to end
                    if (e.direction=="left") 
                        $('.carousel-item').eq(i).appendTo('.carousel-inner');
                    
                    else 
                        $('.carousel-item').eq(0).appendTo('.carousel-inner');
                    
                
            
        );

到 vue js 组件的挂载部分

【讨论】:

以上是关于bootstrap *slide.bs.carousel* 事件未在 vue js 中触发的主要内容,如果未能解决你的问题,请参考以下文章

学习 Bootstrap 5 之 Bootstrap 和 Breakpoints

Bootstrap 5 仍然推荐使用 Bootstrap-vue?

bootstrap-flex、bootstrap-grid 和 bootstrap-reboot 的区别

Bootstrap颜色选择器是一个用于Bootstrap的模块化颜色选择器插件。

bootstrap优点

bootstrap到底用做啥