/*
* jQuery scrollsync Plugin
* version: 1.0 (30 -Jun-2009)
* Copyright (c) 2009 Miquel Herrera
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
;(function($){ // secure $ jQuery alias
/**
* Synchronizes scroll of one element (first matching targetSelector filter)
* with all the rest meaning that the rest of elements scroll will follow the
* matched one.
*
* options is composed of the following properties:
* ------------------------------------------------------------------------
* targetSelector | A jQuery selector applied to filter. The first element of
* | the resulting set will be the target all the rest scrolls
* | will be synchronised against. Defaults to ':first' which
* | selects the first element in the set.
* ------------------------------------------------------------------------
* axis | sets the scroll axis which will be synchronised, can be
* | x, y or xy. Defaults to xy which will synchronise both.
* ------------------------------------------------------------------------
*/
$.fn.scrollsync = function( options ){
var settings = $.extend(
{
targetSelector:':first',
axis: 'xy'
},options || {});
function scrollHandler(event) {
if (event.data.xaxis){
event.data.followers.scrollLeft(event.data.target.scrollLeft());
}
if (event.data.yaxis){
event.data.followers.scrollTop(event.data.target.scrollTop());
}
}
// Find target to follow and separate from followers
settings.target = this.filter(settings.targetSelector).filter(':first');
settings.followers=this.not(settings.target); // the rest of elements
// Parse axis
settings.xaxis= (settings.axis=='xy' || settings.axis=='x') ? true : false;
settings.yaxis= (settings.axis=='xy' || settings.axis=='y') ? true : false;
if (!settings.xaxis && !settings.yaxis) return; // No axis left
// bind scroll event passing array of followers
settings.target.bind('scroll', settings, scrollHandler);
}; // end plugin scrollsync
})( jQuery ); // confine scope