JQuery UI Tabs Causing Screen to “Jump”

后端 未结 17 1797
生来不讨喜
生来不讨喜 2020-11-30 22:22

I\'m using the latest version of the jQuery UI tabs. I have tabs positioned toward the bottom of the page.

Every time I click a tab, the screen jumps toward the top

17条回答
  •  庸人自扰
    2020-11-30 23:15

    My guess is that you are animating your tab transitions? I am having the same problem, where the page scroll jumps back to the top with every click.

    I found this in the jquery source:

     // Show a tab, animation prevents browser scrolling to fragment,
    

    Sure enough, if I have this:

    $('.tab_container > ul').tabs();    
    $('.tab_container > ul').tabs({ fx: { height: 'toggle', opacity: 'toggle', duration: 'fast' } });
    

    my code jumps to the top and is annoying (but there's animation). If I change that to this:

    $('.tab_container > ul').tabs();    
    //$('.tab_container > ul').tabs({ fx: { height: 'toggle', opacity: 'toggle', duration: 'fast' } });
    

    there is no tab animation, but switching between tabs is smooth.

    I found a way to make it scroll back, but it's not a proper fix, as the browser still jumps to the top after clicking a tab. The scroll happens between the events tabsselect and tabsshow, so the following code jumps back to your tab:

    var scroll_to_x = 0;
    var scroll_to_y = 0;
    $('.ui-tabs-nav').bind('tabsselect', function(event, ui) {
        scroll_to_x = window.pageXOffset;
        scroll_to_y = window.pageYOffset;
    });
    $('.ui-tabs-nav').bind('tabsshow', function(event, ui) {
        window.scroll(scroll_to_x, scroll_to_y);
    });
    

    I'll post any more progress I make.

提交回复
热议问题