0

小提琴:http: //jsfiddle.net/RJShm/

我有一个 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);
    $(this).unbind(event);
  }
});

我还希望它在单击窗格中的任何内容(滚动条、箭头、内容、任何内容)时停止自动滚动,并且最好在几秒钟无点击后重新启动。

所以,简而言之,我该如何:

  1. 使 jScrollPane 自动向左/向右滚动
  2. 单击时停止自动滚动
  3. 在窗格内没有单击几秒钟后重新启动自动滚动

谢谢

编辑jScrollPane 设置api为您提供方便。

4

1 回答 1

1

我已经更新了用于切换无限滚动的处理程序,还实现了单击处理程序来暂停滚动并在超时(5 秒)后恢复。请参阅下面的代码草案并查看演示:http: //jsfiddle.net/p6jLt/

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;
}

问题:插件有时会出现滚动问题,但不会破坏无限滚动。您可能会在滚动条上找到一些小问题,但它在大多数情况下都有效。彻底测试它,看看它是如何进行的。

于 2013-03-11T20:01:36.530 回答