Bootstrap轮播。隐藏以前的'和' next'第一张和最后一张幻灯片上的按钮 - ' slide'事件不起作用

时间:2015-10-26 23:54:35

标签: jquery html css twitter-bootstrap

我使用这个标准的Bootstrap轮播:

<div id="myCarousel" class="carousel slide" data-ride="carousel">
    <!-- Indicators -->
    <ol class="carousel-indicators">
        <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
        <li data-target="#myCarousel" data-slide-to="1"></li>
        <li data-target="#myCarousel" data-slide-to="2"></li>
        <li data-target="#myCarousel" data-slide-to="3"></li>
    </ol>

    <!-- Wrapper for slides -->
    <div class="carousel-inner" role="listbox">
        <div class="item active">
            <div class="carousel-caption">
                <h1>App Preview</h1>
            </div>
        </div>

        <div class="item">
            <div class="carousel-caption">
                <h1>Contact Details</h1>
            </div>
        </div>

        <div class="item">
            <div class="carousel-caption">
                <h1>Choose plan</h1>
            </div>
        </div>

        <div class="item">
            4
        </div>
    </div>

    <!-- Left and right controls -->
    <a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
        @*<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>*@
        <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
        @*<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>*@
        <span class="sr-only">Next</span>
    </a>
</div>

我试图隐藏之前的&#39;和&#39; next&#39;如果用户位于轮播的第一个或最后一个项目上,则分别按下按钮:

$('.carousel').carousel({
    interval: false,
})

$('#myCarousel').on('slid', '', checkitem);

function checkitem()                        // check function
{
    var $this = $('#myCarousel');
    if ($('.carousel-inner .item:first').hasClass('active')) {
        $this.children('.left.carousel-control').hide();
    } else if ($('.carousel-inner .item:last').hasClass('active')) {
        $this.children('.right.carousel-control').hide();
    } else {
        $this.children('.carousel-control').show();

    }
}

虽然它没有用。当我使用Chrome开发人员工具进行调试时,我可以看到事件被连接,但实际的checkitem()代码中的断点永远不会被命中,所以我不确定调试器是否只是不起作用当事件被触发或事件永远不会被触发时。

(我包括以下脚本)

<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js" integrity="sha512-K1qjQ+NcF2TYO/eI3M6v8EiNYZfA95pQumfvcVrTHtwQVDG+aHRqLi/ETn2uB+1JqwYqVG3LIvdm9lj6imS/pQ==" crossorigin="anonymous"></script>

4 个答案:

答案 0 :(得分:3)

这是一个完整的脚本,可以让它完全运行,而不仅仅是在幻灯片触发后。正如Mihai所指出的,出于某种原因,我需要使用slid.bs.carousel事件而不是&#39;滑动&#39;:

$('.carousel').carousel({
    interval: false,
})

$(document).ready(function () {               // on document ready
    checkitem();
});

$('#myCarousel').on('slid.bs.carousel', checkitem);

function checkitem()                        // check function
{
    var $this = $('#myCarousel');
    if ($('.carousel-inner .item:first').hasClass('active')) {
        // Hide left arrow
        $this.children('.left.carousel-control').hide();
        // But show right arrow
        $this.children('.right.carousel-control').show();
    } else if ($('.carousel-inner .item:last').hasClass('active')) {
        // Hide right arrow
        $this.children('.right.carousel-control').hide();
        // But show left arrow
        $this.children('.left.carousel-control').show();
    } else {
        $this.children('.carousel-control').show();
    }
}

Carousel events documentation - getbootstrap.com/javascript/#carousel-events

答案 1 :(得分:1)

尝试使用

$('#myCarousel').on('slid.bs.carousel', checkitem);

但这只会在发生“滑动”事件时隐藏您的按钮。它适用于最后一个“下一个”,但它不会隐藏第一个“前一个”。要隐藏第一个“上一个”,您可以使用CSS。

http://jsfiddle.net/0bwnqahj/1/

答案 2 :(得分:0)

有些年纪了,但是我想Bootstrap的轮播仍然很有价值。

Chris的回答很好,只有在只有1个项目要显示的情况下才错过这种情况(那时仍然会显示向右箭头)。另外,我们可以使用jQuery的toggle函数,该函数采用布尔参数来节省ifs。

更精确,更短的解决方案是:

$(document).ready(function () {
    checkControls();
});

$('#myCarousel').on('slid.bs.carousel', checkControls);

// Hide left / right control if carousel is at first / last position.
function checkControls() {
    var $this = $('#profilepicsCarousel');
    $this.children('.carousel-control-prev').toggle(
        !$this.find('.carousel-inner .carousel-item:first-child').hasClass('active')
    );
    $this.children('.carousel-control-next').toggle(
        !$this.find('.carousel-inner .carousel-item:last-child' ).hasClass('active')
    );
}

答案 3 :(得分:-1)

尝试滑动滑块https://kenwheeler.github.io/slick/。它几乎具有所有功能。包括按钮禁用,自定义和响应。

在禁用按钮的情况下,您需要infinite: false光滑滑条的选项