如何保持 bootstrap 旋转木马暂停,直到它进入视口?

How to keep bootstrap carousel paused until it enters in the viewport?

编辑:此请求的原因。为了描述我的需求,找到解决方案后添加了此编辑。我有一个显示逻辑顺序步骤 1、步骤 2、步骤 3 的旋转木马。该旋转木马不是页面顶部,所以我希望它保持停止/暂停状态,直到用户看到它以及何时看到它,因为首先,我希望用户看到第一张幻灯片,第 1 步。然而,有些用户(相信我,他们不少)不知道轮播和滑块,所以我不想错过他们对后续幻灯片的看法幻灯片。这就是接下来的原因。

我想知道这个

我有一个 bootstrap 3.1 轮播,它 不是 在主页的顶部。

相反,您 "reach it" 向下滚动一些 "bootstrap' rows"。

好吧,我想让轮播保持停止/暂停状态,直到用户将页面向下滚动到放置轮播的位置(假设轮播高度为 500 像素,至少前 150 像素时进入可视区域)

当这 150 个像素已经滚动时,暂停/停止应该变成 "play" 因此,如果每张幻灯片之间的暂停是 5000 毫秒,5000 毫秒后下一张幻灯片应该转动。

根据 this solution,这是 javascript 的问题,但这不是我要找的也请原谅,但目前我对 javascript 和 jquery,所以感谢您的任何提示和一些解释。

编辑 01 This script 看起来是正确的,也是一个很好的解决方案:-),尤其是阅读该页面底部的评论,但如上所述,我想念正确利用它的知识,谢谢你的任何提示.

我走了很长的路,自己回答自己。

我尝试了几个插件,但它们都没有效果,或者它们破坏了 Carousel 引擎。

研究了这么多,终于找到了这个 jQuery 插件 http://www.jqueryscript.net/other/jQuery-Plugin-To-Determine-If-An-Element-Is-In-the-Viewport-Viewport-Checker.html

它工作得很好,很直接,正如预期的那样,还有一个好处包括:我正在寻找的偏移量!!! (耶!)

很容易实现

<script src="viewportchecker.js"></script>

<script type="text/javascript">
$(document).ready(function(){
    $('.carousel').carousel('pause'); /** load page with carousel paused

    $('.carousel').viewportChecker({
        offset: 200,                  /** wait for the first 200 pixel of the element 
                                          to enter in the viewport
        callbackFunction: function(elem){
            setTimeout(function(){
                $('.carousel').carousel(''); /** remove pause
            },500);
        }
    });

});
</script>

"thank you" 对我自己:-)

我想这也有助于解决视口将旋转木马切成两半的问题。即:在页面顶部有一个旋转木马,然后向下滚动,迫使浏览器顶部 window 仅显示旋转木马的下半部分。

目前,当旋转木马循环时,旋转木马图像加载到视口的顶部,而不是旋转木马容器的顶部。

当您向上滚动时,轮播只显示一半的图像,上半部分是灰色的。这很烦人。将尝试此操作以查看是否修复。

这是一个使用Intersection Observer API的方法;对于 IE 和其他不支持的浏览器,它将静默失败。

setTimeout(function() {
  if (IntersectionObserver === undefined) return;
    const carousels = $(".carousel");
    if (carousels.length === 0) return;
    const RATIO = 0;
    // You can set a intersection percentage, such as 0.25 for 25% visible, but 
    // if you want pixels, I'm using `rootMargin` in the options below
    var observer = new IntersectionObserver(function (entries, observer) {
        entries.forEach(function(entry) {
            jQuery(entry.target).carousel(entry.intersectionRatio < RATIO ? 'pause' : 'cycle');
        });
    }, {
            root: null,
            rootMargin: '-150px 0px', // 150px visible on top or bottom of viewport
            threshold: RATIO
        });
    carousels.each(function () {
        observer.observe(this);
    });
  }
});