Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将jScrollPane设置为自动向左和向右滚动,但单击时暂停?_Javascript_Jquery_Jquery Jscrollpane - Fatal编程技术网

Javascript 将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);

小提琴:

我有一个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);
  }
});
我还希望在单击窗格中的任何内容(滚动条、箭头、内容、任何内容)时停止自动滚动,最好在没有单击几秒钟后重新启动

简言之,我该如何:

  • 使jScrollPane自动向左/向右滚动
  • 单击时停止自动滚动
  • 在窗格内单击几秒钟后重新启动自动滚动
  • 谢谢


    编辑:,为方便起见。

    我已更新了用于切换无限滚动的处理程序,并实现了单击处理程序以暂停滚动并在超时(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;
    }