Javascript 将jScrollPane设置为自动向左和向右滚动,但单击时暂停?
小提琴: 我有一个jScrollPane,它当前从左到右滚动,然后返回到左,然后停止。我想让它不断地从左向右滚动,从右向左滚动,然后重复。通过使用Javascript 将jScrollPane设置为自动向左和向右滚动,但单击时暂停?,javascript,jquery,jquery-jscrollpane,Javascript,Jquery,Jquery Jscrollpane,小提琴: 我有一个jScrollPane,它当前从左到右滚动,然后返回到左,然后停止。我想让它不断地从左向右滚动,从右向左滚动,然后重复。通过使用pane.bind('jsp-scroll-x'…),我几乎可以做到这一点,但我似乎无法让它在一个周期后向右滚动。当前代码: pane.bind('jsp-scroll-x', function (event, pos_x, at_left, at_right) { if (at_right) { api.scrollToX(0);
pane.bind('jsp-scroll-x'…
),我几乎可以做到这一点,但我似乎无法让它在一个周期后向右滚动。当前代码:
pane.bind('jsp-scroll-x', function (event, pos_x, at_left, at_right) {
if (at_right)
{
api.scrollToX(0);
$(this).unbind(event);
}
});
我还希望在单击窗格中的任何内容(滚动条、箭头、内容、任何内容)时停止自动滚动,最好在没有单击几秒钟后重新启动
简言之,我该如何:
编辑:,为方便起见。我已更新了用于切换无限滚动的处理程序,并实现了单击处理程序以暂停滚动并在超时(5秒)后继续。请参阅下面的代码草稿并查看演示:
问题:该插件有时在scroll上会出现小问题,但不会破坏无限滚动。你可能会在scroll上找到小问题,但大部分都有效。彻底测试它,看看它是如何运行的。这与我所寻找的非常接近,但它的行为与我在单击时所希望的不完全一样。什么理想情况下,我希望是在单击滚动条时(这样可以拖动滚动条)或者单击左/右箭头,动画也会停止,在自动滚动重新生效之前,滚动条的行为与正常滚动条的行为相同。有什么办法吗?@Samsquanch该插件似乎不适合这些功能。我们正在编写技巧代码,以获得该插件的预期行为。让我明天花点时间看看它是怎么回事。@Samsquanch是的,我发现它有点问题。我建议编写一个插件,因为这样做会更容易。这可能是理想的解决方案。这是“我们想要这个”变成“我们想要这个,再加上它上面的所有东西”的例子之一。该插件最初完美地完成了“this”,但它似乎没有足够的适应性来完成“that”。@Samsquanch啊,我明白了,我去过那里。
var defaultSettings = {
showArrows: true,
animateScroll: true,
animateDuration: 5000
},
pauseSettings = {
showArrows: true,
animateScroll: false
};
var pane = $('.scroll-pane').jScrollPane(defaultSettings);
var api = pane.data('jsp');
var isFirst = true,
posX = 0,
isLeft = false,
timer;
pane.bind('jsp-scroll-x', scrollFx)
.mousedown(function () {
//lets make sure the below is
//executed only once after automatic croll
if (posX != -1) {
$(this).unbind('jsp-scroll-x');
api.scrollToX(posX);
api.reinitialise(pauseSettings); //no animation
posX = -1;
}
}).mouseup(function () {
clearTimeout(timer); //clear any previous timer
timer = setTimeout(function () {
isFirst = true;
posX = 0; //reset the killer switch
api.reinitialise(defaultSettings); //animateed scroll
pane.bind('jsp-scroll-x', scrollFx); //rebind
api.scrollToX(isLeft ? 0 : api.getContentWidth()); //resume scroll
}, 5000);
});
var scroll = api.scrollToX(api.getContentWidth());
function scrollFx(event, pos_x, at_left, at_right) {
if (posX == -1) { //kill scroll
$(this).unbind(event);
return false;
}
if (at_right) {
api.scrollToX(0);
isLeft = true; //used for restart
} else if (at_left && !isFirst) {
api.scrollToX(api.getContentWidth());
isLeft = false; //used for restart
}
isFirst = false;
posX = pos_x;
}