如何在不丢失第一次初始化时添加的功能的情况下重新初始化jScrollPane?

时间:2015-06-06 16:30:10

标签: javascript jquery jscrollpane jquery-jscrollpane

我在使用jScrollPane' reinitialise()方法时遇到问题。每当我调用它时,我在第一次初始化时实现的东西就会停止工作......

在我目前的代码中,我做了类似的事情:

$('.scrollable').each(function(){

    var e = $(this),
        parent = e.parent();

    e.jScrollPane({
        // parameters
    });

    var api = e.data('jsp'),
        arrowup = e.find('.jspArrowUp'),
        arrowdw = e.find('.jspArrowDown');

    if ( api.getIsScrollableV() ) {
        e.addClass('scrolled-top');
        parent.addClass('scroll-parent');
    }

    e.scroll(function(){
        var scrbef = api.getContentPositionY(),
            scrmax = api.getContentHeight() - this.clientHeight,
            scraft = scrmax - scrbef,
            dlayup = (scrbef - 220)/100,
            dlaydw = (scraft - 220)/100,
            opacup = dlayup > 1 ? 1 : dlayup < 0 ? 0 : dlayup,
            opacdw = dlaydw > 1 ? 1 : dlaydw < 0 ? 0 : dlaydw;

        if ( scrbef === 0 ) {
            e.addClass('scrolled-top').removeClass('scrolled-bot');
        } else if ( scraft === 0 ) {
            e.addClass('scrolled-bot').removeClass('scrolled-top');
        } else {
            e.removeClass('scrolled-top scrolled-bot');
        }

        arrowup.css('opacity', opacup);
        arrowdw.css('opacity', opacdw);
    });

到目前为止,这么好。它的作用是:

  • .scrollable元素
  • 上初始化jScrollPane
  • 根据内容位置,添加或删除scrolled-topscrolled-bot类。
  • 根据内容的位置控制箭头的不透明度(顶部和底部有很多填充,所以我只希望箭头出现在实际内容已到达屏幕边框。)

在那之后,我有这个:

    var throttleTimeout;

    $(window).resize(function(){
        if ( !throttleTimeout ) {
            throttleTimeout = setTimeout( function(){
                    api.reinitialise();

                    throttleTimeout = null;
                }, 500
            );
        }
    });

    $('.deployer').click(function(e){
        api.reinitialise();
    });
});

现在,这非常简单;调整窗口大小时重新初始化的代码直接来自文档。

但是,只要调用reinitialise(),调整窗口大小或点击.deployer元素后,控制箭头的前一个代码即可。不透明度停止工作 - 尽管奇怪的是,scrolled-topscrolled-bot类仍然可以正确添加或删除。

是否有人知道可能导致此行为的原因以及如何解决此问题?

干杯。

1 个答案:

答案 0 :(得分:0)

发现了正在发生的事情。

每当您重新初始化时,基本上所有内容都会重置,因此之前存储在arrowuparrowdw中的元素不再存在。添加

var arrowup = e.find('.jspArrowUp'),
    arrowdw = e.find('.jspArrowDown');

每个reinitialise()之后再次