代码之家  ›  专栏  ›  技术社区  ›  Joe

滚动库中的下一个和上一个按钮出现错误

  •  0
  • Joe  · 技术社区  · 9 年前

    我正在为我的网站开发一个水平卷轴画廊。到目前为止,我的滚动功能可以很好地处理全屏、可变宽度的图像。

    我一直想实现的下一件事是在图像之间滑动的next/prev按钮。我在这里找到了一篇文章,展示了jQuery的解决方案( fiddle )我已经成功地将其实现到我的图像中,但问题是下一个按钮只适用于一个图像。

    这是我的测试页面,向您展示我的意思: http://blackecho.co.uk/test-scroll/scroll-test(img).html

    当我单击“下一步”时,它将滚动到下一个图像,但只工作一次。您必须手动向前滚动一点,按钮才能再次工作。另一件事是,上一个按钮工作正常!

    经过大量测试后,我很难找到是什么原因导致了我的更改/添加。

    HTML语言

    <div class="wrapper">
    
     <div id="t-scroll_container" >
        <div id="t-scroll">
            <div class="t-pic_wrap"><img src="../assets/a.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/8.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/a.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/b.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/d.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/c.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/e.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/10.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/9.jpg" class="t-pic"></div>
            <div class="t-pic_wrap"><img src="../assets/1.jpg" class="t-pic"></div>                      
       </div>
     </div>
    
    
    <div style="position:fixed; bottom:1px;">
    <button id="prev">Prev</button>
    <button id="next">Next</button>
    </div>
    
    </div>
    

    CSS公司

    #t-scroll_container{
     margin:0px;
     width:100%;
     position:fixed;
     top:0px;
     left:0;
     bottom:50px;
     overflow-x:auto;
     overflow-y:hidden;
    }
    
    #t-scroll{
    height:100%; 
    overflow:auto;
    white-space:nowrap;
    
    }
    
    .t-pic_wrap{
    height:98%;
    white-space:nowrap;
    display:inline-block;
    
    }
    
    .t-pic{
    height:100%;
    padding:0px;
    margin:0px;
    }
    

    JAVA

    var currentElement = $("#t-scroll > div:nth-child(2)");
    var onScroll = function () {
    //get the current element
    var container = $("#t-scroll");
    var children = container.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 scrollToElement = function ($element) {
    var container = $("#t-scroll");
    var children = container.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
            }, 200);
            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 = $("#t-scroll");
    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);
    }
    
    $("#t-scroll").scroll(onScroll);
    $("#next").click(next);
    $("#prev").click(prev);
    
    2 回复  |  直到 9 年前
        1
  •  0
  •   Nigrimmist    9 年前

    是的,css文件有问题:

    如果您要删除

    font-family: 'Josefin Sans', Geosans Light, sans-serif;
    

    行-所有都应该工作。至少,它在这里工作得很好(我评论了css行):

    http://jsfiddle.net/nPF6F/29/

        2
  •  0
  •   Nigrimmist    9 年前

    简单的答案是——您在下一个函数中没有更改currentElement。再次单击时,currentElement是相同的。