在每个引导转盘幻灯片上重新计算相同的javascript变量

在每个引导转盘幻灯片上重新计算相同的javascript变量,javascript,jquery,ruby,twitter-bootstrap,Javascript,Jquery,Ruby,Twitter Bootstrap,我有一个popin/modal,其中包含一个bootstrap3旋转木马。在旋转木马的每张幻灯片上都会出现不同的社交嵌入,如facebook或,我想根据图像的大小调整modal/popin的宽度 我基本上要做的是改变后台幻灯片模式的宽度,因此使用我的后端语言Ruby: $("ul.messenger.messenger-fixed").css("width",insta_classic_size); 整个守则是: <div class="item <% if index == 0

我有一个popin/modal,其中包含一个bootstrap3旋转木马。在旋转木马的每张幻灯片上都会出现不同的社交嵌入,如facebook或,我想根据图像的大小调整modal/popin的宽度

我基本上要做的是改变后台幻灯片模式的宽度,因此使用我的后端语言Ruby:

$("ul.messenger.messenger-fixed").css("width",insta_classic_size);
整个守则是:

<div class="item <% if index == 0 %>active<% end%>">      

        <% if slide['modal_slide_type'] == "instagram" %>
          <script>  
              var insta_size = Math.max( Math.floor(embedWidth), 320);                      
              $("ul.messenger.messenger-fixed").css("width",insta_size); 
          </script>

        <% elsif slide['modal_slide_type'] == "twitter" %>   

          <script> 
            var twitter_size = Math.floor(embedWidth);           
            $("ul.messenger.messenger-fixed").css("width",twitter_size); 

          </script>

       and so on... many different other types of slides...
我的问题是,当我加载modal/popin时,所有脚本都会执行,也就是说,在上面的示例中,和..的两个块的值$ul.messenger.messenger fixed的宽度被设置为正在执行的最新块,这意味着twitter_大小。 因此,即使是第一个块也会将$ul.messenger.messenger的宽度设置为twitter_大小,而不是我想要的,也就是说,宽度等于insta_大小

基本上,我需要知道如何防止代码执行所有脚本,或者告诉他在每张幻灯片变为visible=active时重新计算其值


我尝试使用了一些,但没有成功。

我不是使用过ruby的人,但肯定只调用了到达的“if”块中的脚本?不是这样吗?无论哪种方式,您都可以尝试以下方法:

初始化所有旋转木马的代码

...
<div id="myCarousel" class="carousel slide" data-ride="carousel">
...
控制台将根据活动幻灯片输出“twitter”或“instagram”。然后可以使用此事件触发所需的任何计算

myCarousel.on('slide.bs.carousel', function (e) {
    var activeSlide = e.relatedTarget.dataset.slidetype
    if ( activeSlide == "instagram" ) {
        // Insta calculations
    } else if ( activeSlide == "twitter" ) { 
        // twitter calculations
    }
});

虽然这都是从JS的角度来看的,但也许你可以挽救一些东西。使用分配给各个项目的数据属性,但是如果子项包含您需要的信息,您可以使用其他属性或查看子项。

非常感谢您的帮助。
myCarousel.on('slide.bs.carousel', function (e) {
    console.log(e.relatedTarget.dataset.slidetype);
});
myCarousel.on('slide.bs.carousel', function (e) {
    var activeSlide = e.relatedTarget.dataset.slidetype
    if ( activeSlide == "instagram" ) {
        // Insta calculations
    } else if ( activeSlide == "twitter" ) { 
        // twitter calculations
    }
});