【问题标题】:Add Previous/Next Buttons to Horizontal Content Scroller Targeting DIVS将上一个/下一个按钮添加到针对 DIVS 的水平内容滚动条
【发布时间】:2013-02-21 22:54:42
【问题描述】:

我已经为 div 上的一些滚动实现了 jQuery Custom Scroller,这很好用。我什至使用平滑滚动来水平滚动到某些 DIV,但我的问题是我想要一个下一个和上一个导航按钮,但我在任何地方都找不到。

下面是我的 HTML 和 jQuery。先谢谢了

<div id="source-container">
        <div class="container-inner">
                <div class="source-item item one current" id="the-cedarburg">
                    <div class="source-slide-title">
                        <h2>the cedarburg</h2>
                    </div>
                </div>
                <div class="source-item item two"  id="our-farm">


                  </div>

                </div>
                <div class="source-item item three"  id="our-rooibos">


                </div>
                <div class="source-item item four"  id="our-process">

                </div>
                <div class="source-item item five"  id="our-innovation">

                  </div>

                </div>
                <div class="source-item item six">

                </div>
                <div class="source-item item seven">

                </div>
                <div class="source-item item eight">

                </div>
                <div class="source-item item nine">

                </div>
                <div class="source-item item ten">

                </div>
                <div class="source-item item eleven">

                </div>
                <div class="source-item item twelve">

                </div>
                <div class="source-item item thirteen">

                </div>
                <div class="source-item item fourteen">

                </div>
                <div class="source-item item fifteen">

                </div>
                <div class="source-item item sixteen">

                </div>
                <div class="source-item item seventeen">

                </div>
                <div class="source-item item eighteen">

                </div>
                <div class="source-item item nineteen" >

                </div>
                <div class="source-item item twenty">

                </div>
                <div class="source-item item twentyone">

                </div>
                <div class="source-item item twentytwo">

                </div>
            </div>
    </div>
 </div>

CSS:

#source-container{
    overflow-x: hidden;
    overflow-y: hidden;
}

.source-item{
float: left;
display: inline-block;
background-repeat:no-repeat;
background-size:cover;
background-position: center;
 -moz-background-size: cover;
}

#source-container .one{background-image:url(images/source/1-the-cedarberg.jpg);}

#source-container .two{background-image:url(images/source/2-the-cedarberg.jpg);}

#source-container .three{background-image:url(images/source/3-the-cedarberg.jpg);}

#source-container .four{background-image:url(images/source/4-the-cedarberg.jpg);}

#source-container .five{background-image:url(images/source/5-the-cedarberg.jpg);}

#source-container .six{background-image:url(images/source/6-the-cedarberg.jpg);}

#source-container .seven{background-image:url(images/source/2-our-farm.jpg);}

#source-container .eight{background-image:url(images/source/1-our-farm.jpg);}

#source-container .nine{background-image:url(images/source/3-our-farm.jpg);}

#source-container .ten{background-image:url(images/source/4-our-farm.jpg);}

#source-container .eleven{background-image:url(images/source/1-our-rooibos.jpg);}

#source-container .twelve{background-image:url(images/source/6-the-cedarberg.jpg);}

#source-container .thirteen{background-image:url(images/source/1-the-cedarberg.jpg);}

#source-container .fourteen{background-image:url(images/source/2-the-cedarberg.jpg);}

#source-container .fifteen{background-image:url(images/source/3-the-cedarberg.jpg);}

#source-container .sixteen{background-image:url(images/source/4-the-cedarberg.jpg);}

#source-container .seventeen{background-image:url(images/source/5-the-cedarberg.jpg);}

#source-container .eighteen{background-image:url(images/source/6-the-cedarberg.jpg);}

#source-container .nineteen{background-image:url(images/source/1-the-cedarberg.jpg);}

#source-container .twenty{background-image:url(images/source/2-the-cedarberg.jpg);}

#source-container .twentyone{background-image:url(images/source/3-the-cedarberg.jpg);}

#source-container .twentytwo{background-image:url(images/source/4-the-cedarberg.jpg);}




.mCSB_dragger_bar{box-sizing:border-box;}

.source-item{border-right:5px solid #e1001a; border-left:5px solid #3c1c11;}

脚本:

<script>
$(function(){
 $('.container-inner').css({'width':(jQuery(window).width())*22+'px'});
    $(window).resize(function(){
        $('.container-inner').css({'width':(jQuery(window).width())*22+'px'});
    });
});

$(document).ready(function(e) {
$("#source-container").mCustomScrollbar({
                    horizontalScroll:true,
                    mouseWheelPixels: 500,
                    autoDraggerLength: false,
                    callbacks:{
                        onScroll:function(){ 
                            $("."+this.attr("id")+"-pos").text(mcs.left);
                        }
                    }
                });
});

$(function(){
 $('#source-container').css({'height':(jQuery(window).height())/100*80+'px'});
    $(window).resize(function(){
        $('#source-container').css({'height':(jQuery(window).height())/100*80+'px'});
    });
});

$(function(){
 $('.source-item').css({'width':(jQuery(window).width())+'px'});
    $(window).resize(function(){
        $('.source-item').css({'width':(jQuery(window).width())+'px'});
    });
});

$(function(){
$('.source-item').css({'height':($('#source-container').height())+'px'});
    $('#source-container').resize(function(){
        $('#source-item').css({'height':($('#source-container').height())+'px'});
    });
});
$(".output a[rel~='_mCS_2_scrollTo']").click(function(e){
                    e.preventDefault();

                    $("#source-container").mCustomScrollbar("scrollTo",$(this).attr("href"));
});
$('ul li a').on('click', function() {  
    $('ul li a.active').removeClass('active');
    $(this).addClass('active');    
});

$('.source-slide-dropdown').on('click', function() {  
    $('.source-slide-dropdown').css('border-bottom-right-radius','0px');  

});
</script>

【问题讨论】:

    标签: jquery button navigation cycle horizontal-scrolling


    【解决方案1】:

    如何将“Next”和“Prev”按钮连接到插件的 scrollTo 方法? 从您提供的文档链接中,您似乎可以出于某种原因滚动到给定 ID 的元素(要求每个元素都有一个 id 而不是使用元素索引滚动):

    var elID="#el-1";
    $(".content").mCustomScrollbar("scrollTo",elID);
    

    在滚动条中获取当前项目的支持并不多,因此您可能必须自己管理(通过可以通过滚动或单击下一步/上一个按钮更新的索引)和使用上面的方法滚动到下一个div。

    我使用常规滚动条(不使用插件)为此制作了fiddle。这是它的javascript源代码:

    var currentElement = $("#wrapper > div:nth-child(2)");
    var onScroll = function () {
        //get the current element
        var container = $("#source-container");
        var wrapper = $("#wrapper");
        var children = wrapper.children();
        var position = 0;
        for (var i = 0; i < children.length; i++) {
            var child = $(children[i]);
            var childLeft = container.offset().left < child.offset().left;
            if (childLeft) {
                currentElement = child;
                console.log(currentElement)
                return;
            }
        }
    }
    
    var indexClick = function () {
        console.log($("#inputScrollIndex").val())
        var index = parseInt($("#inputScrollIndex").val(), 10) - 1;
        if (index < 1) {
            index = 0;
        }
        console.log(index);
        scrollToIndex(index);
    }
    
    var scrollToIndex = function (index) {
        var element = $($("#wrapper").children()[index]);
        scrollToElement(element);
    }
    
    var scrollToElement = function ($element) {
        var container = $("#source-container");
        var wrapper = $("#wrapper");
        var children = wrapper.children();
        var width = 0;
        for (var i = 0; i < children.length; i++) {
            var child = $(children[i]);
            if (child.get(0) == $element.get(0)) {
                if (i == 0) {
                    width = 0;
                }
                container.animate({
                    scrollLeft: width
                }, 100);
                onScroll();
            }
            if (child.next().length > 0) {
                //make sure we factor in borders/padding/margin in height
                width += child.next().offset().left - child.offset().left
            } else {
                width += child.width();
            }
        }
    }
    
    var next = function (e) {
        scrollToElement(currentElement);
    }
    
    var prev = function (e) {
        var container = $("#source-container");
        if (currentElement.prev().length > 0) {
            if (container.offset().left == currentElement.prev().offset().left) {
                currentElement = currentElement.prev().prev().length > 0 ? currentElement.prev().prev() : currentElement.prev();
            } else {
                currentElement = currentElement.prev();
            }
        }
        scrollToElement(currentElement);
    }
    
    $("#source-container").scroll(onScroll);
    $("#scrollIndex").click(indexClick);
    $("#next").click(next);
    $("#prev").click(prev);
    

    【讨论】:

    • 感谢您的回答,我理解逻辑但我不知道如何实现!
    • 这是一个常规滚动,但你应该能够为你的插件做一些非常相似的事情
    • 非常感谢!我相信我可以为水平滚动条调整这个!谢啦! +1
    • 是的,对于水平滚动,尝试使用 scrollLeft 和 offset().left 而不是 top
    • @SiegfriedGrimbeek,见How does accepting an answer work?。为 Q 和 A +1,当你有 15rep 时,你实际上可以 +1 帖子;)
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2023-03-18
    • 2012-10-25
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多