2016-11-24 203 views
1

div從左到右和從右到左完成一輪滾動,但卡在scrollBack()函數中。該程序確實在所需的事件中執行了clearInterval()語句,但它並未真正清除間隔。我究竟做錯了什麼?clearInterval函數沒有實際清除

var backint = null; 

function scrollForward() { 
    if ($("#foo").scrollLeft() != $("#foo").width()) { 
    $("#foo").scrollLeft($("#foo").scrollLeft() + 1); 
    } else { 
    backint = setInterval(scrollBack, 5); 
    } 
} 

function scrollBack() { 
    if ($("#foo").scrollLeft() != 0) { 
    $("#foo").scrollLeft($("#foo").scrollLeft() - 1); 
    } else if ($("#foo").scrollLeft() == 0) { 
    clearInterval(backint); 
    } 
} 
+0

請分享HTML代碼。謝謝 – HenryDev

+0

我可能是錯的,但我不確定在scrollBack函數中使用的backint是否被javascript正確理解,因爲它似乎是一個局部變量。嘗試啓動它爲全球 –

+0

if($(「#foo」)。scrollLeft()> 0){...?並使其他如果只是一個其他 – Bindrid

回答

0

這是更好做 .animate()Rory McCrossan建議,因爲這setInterval重新實現現有的東西,不一定好:

var foo = $("#container"), 
 
    bar = $("#foo"), 
 
    scrollSize = bar.width() - foo.width();; 
 

 
function scrollForward() { 
 
    console.log('forward', foo.scrollLeft(), bar.width() - foo.width()); 
 
    if (foo.scrollLeft() != scrollSize) { 
 
    foo.animate({ 
 
     scrollLeft: scrollSize + 'px' 
 
    }); 
 
    } 
 
} 
 

 
function scrollBack() { 
 
    console.log('back', foo.scrollLeft(), scrollSize); 
 
    if (foo.scrollLeft() === scrollSize) { 
 
    foo.animate({ 
 
     scrollLeft: '0px' 
 
    }); 
 
    } 
 
} 
 

 
foo.on("click", scrollForward); 
 
foo.on("dblclick", scrollBack);
#container { 
 
    border: 1px solid #ccc; 
 
    width: 410px; 
 
    overflow-x: scroll; 
 
    height: 50px; 
 
} 
 
#foo { 
 
    background-color: #ccc; 
 
    width: 1300px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div id="foo">Click to scroll right. Double-click to scroll left.</div> 
 
</div>