如果在初始tabview加载时p:tabview中隐藏了所选选项卡,则滚动到所选选项卡

时间:2014-10-20 18:17:08

标签: jsf jsf-2 primefaces tabs tabview

假设p:tabview中有很多标签,并且滚动显示为导航到所有标签。

如果显示内容的活动选项卡是最右边的选项卡,则在初始p:tabview加载时用户看不到它。如果我们使用滚动按钮导航到最右侧,那么我们可以看到突出显示活动选项卡,表明它已被选中。

如何在加载时滚动到活动选项卡,以便用户始终能够看到所选选项卡。

1 个答案:

答案 0 :(得分:1)

这可以通过在primefaces initScrolling组件JavaScript文件(即tabview.js文件)中覆盖p:tabview方法以下列方式完成。

  initScrolling: function() {
      if(this.jq.is(':visible')) {
          var overflown = (this.lastTab.position().left - this.firstTab.position().left) >                                               
                           this.navscroller.innerWidth();
          if(overflown) {
            this.navscroller.css('padding-left', '18px');
            this.navcrollerLeft.show();
            this.navcrollerRight.show();

            activeTab = this.navContainer.children('.ui-tabs-selected');
            viewportWidth = this.navscroller.innerWidth();
            activeTabPosition = activeTab.position().left + parseInt(activeTab.innerWidth());

            if(activeTabPosition > viewportWidth) {
              var scrollStep = activeTabPosition - viewportWidth;
              scrollStep = Math.ceil(scrollStep/100) * -100;        
              this.scroll(scrollStep);
            } else {
                   this.restoreScrollState();
            }                 
         }            
        return true;
    }
    else {
        return false;
    }
}   

我希望通过扩展tabview组件小部件来覆盖这个方法,但不支持它。所以我们应该有自己的tabview.js文件,修改上面的方法。

这是在primefaces 4.0版本中完成的,更多或更少的更改也将是相同的更高版本。

相关问题