【问题标题】:How to pause Bootstrap carousel on input focus如何在输入焦点上暂停引导轮播
【发布时间】:2013-08-11 14:22:28
【问题描述】:

我有一个包含简单表单的 Bootstrap 轮播。您可以将轮播设置为在悬停时暂停。但是,如果在输入中键入时光标离开轮播区域,轮播将恢复到其默认周期和 5000 毫秒的间隔。

我希望将其设置为在输入焦点期间保持暂停,并在输入焦点输出时重新启动循环。

<div id="myCarousel" class="carousel slide">
<div class="carousel-inner">
    <div id="slide1" class="item">
        This is a test slide.
    </div>
    <div id="slide2" class="item" >
        <input type="text" placeholder="name" name="full_name" />
    </div>
</div>

<!-- Carousel nav -->
<a class="carousel-control left" href="#myCarousel" data-slide="prev">‹</a>
<a class="carousel-control right" href="#myCarousel" data-slide="next">›</a>

</div>

<script>

!function ($) {
    $(function(){
        $('#myCarousel.slide').carousel({
            interval: 5000,
            pause: "hover"
        })
    })
}(window.jQuery)

$('input').focus(function(){
    $("#myCarousel").pause()
}) /* Will worry about restarting carousel on mouseout if I could get this pause working */


</script>

看来,一旦轮播被初始调用(并且设置了间隔),您就无法更改该间隔或轮播行为。

任何见解都会很棒。

【问题讨论】:

  • 只是一个先驱。这是一个精简版。我不是在寻找 HTML 建议(没有实际形式等),只是一些与 Bootstraps Carousel 相关的 javascript 提示。谢谢

标签: javascript jquery twitter-bootstrap carousel


【解决方案1】:

您需要像这样调用暂停函数:$("#myCarousel").carousel('pause');。这就是在引导组件上调用所有方法的方式,遵循 jQuery UI 约定。

您可以通过监听blur 事件然后调用cycle 方法来重新启动轮播。您还需要在 $(function() {...}); 包装器中移动您的事件处理程序。这可确保所有 DOM 元素都存在并准备好进行操作。

所以您的暂停/循环代码如下所示:

$(function(){
    $('#myCarousel.slide').carousel({
        interval: 5000,
        pause: "hover"
    });

    $('input').focus(function(){
       $("#myCarousel").carousel('pause');
    }).blur(function() {
       $("#myCarousel").carousel('cycle');
    });
});

Working Demo

【讨论】:

  • 您的演示似乎运行良好,但与我的代码集成它似乎不起作用。我在文件底部准备好轮播的事实是否会与文件中途出现的这些调用发生冲突?感谢您的快速帮助
  • 抱歉,我忘了提到你所有的 jQuery 代码都应该在你的 `$(function(){})` 包装器中。这可以确保所有 dom 元素都存在并准备好进行操作。
  • Aaah 我希望他们的一些文档能够处理这个问题(我想这是一个常见问题),getbootstrap.com/javascript/#carousel,但这很简单,并且可以完美地完成工作。谢谢!
【解决方案2】:

这就是您暂停轮播的方式

$("#myCarousel").carousel('pause');

【讨论】:

  • 我以前试过这个,但对我不起作用。您可能是非常正确的,但也许我们对轮播的初始化调用的位置与输入特定的轮播调用冲突。 Bootstrap 是否只允许每个 ID 进行一次轮播调用?
【解决方案3】:

omg,我认为以正确的方式初始化轮播会更好......

在悬停时不要让他们暂停,在鼠标离开时暂停对象!

看到这个

    $( ".carousel" ).hover(
            function() {
                $( "#"+this.id ).carousel({
                    interval: 2000,
                    //pause: 'hover' 
                    pause: 'none' // disable default option "pause on hover" and set it to none
                });
            }, function() {
                $( "#"+this.id ).carousel('pause'); // to set it manually on a spezific carousel id 
            }
    );

Greetz zumi

【讨论】:

  • 欢迎来到 SO zumi :) 。我认为 cfs 已经回答了完整问题的答案。而且我认为您的代码没有完全回答这个问题:例如,在页面加载后,我认为轮播将不会运行
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 2015-06-18
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2013-01-12
  • 2013-01-05
相关资源
最近更新 更多