Scroll improvements

* Load the next region when scroll reached half of the current
  region
* Fix the scroll sync with region highlight in both up and down
  scrolls
* Address Bug 39923 - Make scroll to next region more fluent
This commit is contained in:
Santhosh Thottingal
2012-09-23 21:35:37 -07:00
parent e63aaf90bb
commit 9d988dbafe
2 changed files with 24 additions and 10 deletions

View File

@@ -241,7 +241,7 @@
this.$noResults.find( 'h2' ).after( $suggestions ); this.$noResults.find( 'h2' ).after( $suggestions );
}, },
listen: function() { listen: function () {
var that = this; var that = this;
if ( this.options.clickhandler ) { if ( this.options.clickhandler ) {
this.$element.on( 'click', 'div.row li', function() { this.$element.on( 'click', 'div.row li', function() {
@@ -251,11 +251,26 @@
// The region section need to be in sync with the map filter. // The region section need to be in sync with the map filter.
that.$element.scroll( function () { that.$element.scroll( function () {
if ( this.offsetHeight + this.scrollTop >= this.scrollHeight ) { var scrollTop = $( this ).position().top;
var scrollBottom = $( this ).height();
if ( this.offsetHeight + this.scrollTop >= this.scrollHeight/2 ) {
that.$element.trigger( 'scrollend' ); that.$element.trigger( 'scrollend' );
} }
// The region section need to be in sync with the map filter.
var inviewRegion = 'WW';
that.$element.find( 'div.uls-lcd-region-section' ).each( function () {
var top = $( this ).position().top;
var height = $( this ).height();
if ( top < scrollTop && height > scrollBottom ) {
inviewRegion = $( this ).attr( 'id' );
return true;
}
} ); } );
var inview = $.uls.data.regiongroups[inviewRegion];
$( '.regionselector' ).removeClass( 'active' );
$( '#uls-region-' + inview ).addClass( 'active' );
} );
} }
}; };

View File

@@ -65,13 +65,6 @@
}, },
show: function() { show: function() {
// Make the selected region (and it only) active
$( '.regionselector' ).removeClass( 'active' );
if ( this.regionGroup ) {
// if there is a region group, make it active.
this.$element.addClass( 'active' );
}
if ( this.cache ) { if ( this.cache ) {
// If the result cache is present, render the results from there. // If the result cache is present, render the results from there.
var result = null; var result = null;
@@ -141,6 +134,12 @@
// Re-populate the list of languages // Re-populate the list of languages
this.options.$target.empty(); this.options.$target.empty();
this.show(); this.show();
// Make the selected region (and it only) active
$( '.regionselector' ).removeClass( 'active' );
if ( this.regionGroup ) {
// if there is a region group, make it active.
this.$element.addClass( 'active' );
}
} }
} }
}; };