jquery.fn.timelinr = function(options){ // default plugin settings settingss = jquery.extend({ orientation: 'horizontal', // value: horizontal | vertical, default to horizontal containerdiv: '#timeline', // value: any html tag or #id, default to #timeline datesdiv: '#dates', // value: any html tag or #id, default to #dates datesselectedclass: 'selected', // value: any class, default to selected datesspeed: 500, // value: integer between 100 and 1000 (recommended), default to 500 (normal) issuesdiv: '#issues', // value: any html tag or #id, default to #issues issuesselectedclass: 'selected', // value: any class, default to selected issuesspeed: 200, // value: integer between 100 and 1000 (recommended), default to 200 (fast) issuestransparency: 0.2, // value: integer between 0 and 1 (recommended), default to 0.2 issuestransparencyspeed: 500, // value: integer between 100 and 1000 (recommended), default to 500 (normal) prevbutton: '#prev', // value: any html tag or #id, default to #prev nextbutton: '#next', // value: any html tag or #id, default to #next arrowkeys: 'false', // value: true | false, default to false startat: 1, // value: integer, default to 1 (first) autoplay: 'false', // value: true | false, default to false autoplaydirection: 'forward', // value: forward | backward, default to forward autoplaypause: 2000 // value: integer (1000 = 1 seg), default to 2000 (2segs) }, options); $(function(){ // setting variables... many of them var howmanydates = $(settingss.datesdiv+' li').length; var howmanyissues = $(settingss.issuesdiv+' li').length; var currentdate = $(settingss.datesdiv).find('a.'+settingss.datesselectedclass); var currentissue = $(settingss.issuesdiv).find('li.'+settingss .issuesselectedclass); var widthcontainer = $(settingss.containerdiv).width(); var heightcontainer = $(settingss.containerdiv).height(); var widthissues = $(settingss.issuesdiv).height(); var widthissue = $(settingss.issuesdiv+' li').width(); var heightissue = $(settingss.issuesdiv+' li').height(); var widthdates = $(settingss.datesdiv).width(); var heightdates = $(settingss.datesdiv).height(); var widthdate = $(settingss.datesdiv+' li').width(); var heightdate = $(settingss.datesdiv+' li').height(); // set positions! if(settingss.orientation == 'horizontal') { $(settingss.issuesdiv).width(widthissue*howmanyissues); $(settingss.datesdiv).width(widthdate*howmanydates+685).css('marginleft',widthcontainer/2-widthdate/2-85); var defaultpositiondates = parseint($(settingss.datesdiv).css('marginleft').substring(0,$(settingss.datesdiv).css('marginleft').indexof('px'))); } else if(settingss.orientation == 'vertical') { $(settingss.issuesdiv).height(heightissue*howmanyissues); $(settingss.datesdiv).height(heightdate*howmanydates).css('margintop',heightcontainer/2-heightdate/2); var defaultpositiondates = parseint($(settingss.datesdiv).css('margintop').substring(0,$(settingss.datesdiv).css('margintop').indexof('px'))); } $(settingss.datesdiv+' a').click(function(event){ event.preventdefault(); // first vars var whichissue = $(this).text(); var currentindex = $(this).parent().prevall().length; // moving the elements if(settingss.orientation == 'horizontal') { $(settingss.issuesdiv).animate({'marginleft':-widthissue*currentindex},{queue:false, duration:settingss.issuesspeed}); } else if(settingss.orientation == 'vertical') { $(settingss.issuesdiv).animate({'margintop':-heightissue*currentindex},{queue:false, duration:settingss.issuesspeed}); } $(settingss.issuesdiv+' li').animate({'opacity':settingss.issuestransparency},{queue:false, duration:settingss.issuesspeed}).removeclass(settingss.issuesselectedclass).eq(currentindex).addclass(settingss.issuesselectedclass).fadeto(settingss.issuestransparencyspeed,1); // now moving the dates $(settingss.datesdiv+' a').removeclass(settingss.datesselectedclass); $(this).addclass(settingss.datesselectedclass); $(settingss.datesdiv+' li').removeclass('active'); $(this).parent().addclass('active'); if(settingss.orientation == 'horizontal') { $(settingss.datesdiv).animate({'marginleft':defaultpositiondates-(widthdate*currentindex)},{queue:false, duration:settingss.datesspeed}); } else if(settingss.orientation == 'vertical') { $(settingss.datesdiv).animate({'margintop':defaultpositiondates-(heightdate*currentindex)},{queue:false, duration:settingss.datesspeed}); } }); // keyboard navigation, added since 0.9.1 if(settingss.arrowkeys=='true') { if(settingss.orientation=='horizontal') { $(document).keydown(function(event){ if (event.keycode == 39) { $(settingss.nextbutton).click(); } if (event.keycode == 37) { $(settingss.prevbutton).click(); } }); } else if(settingss.orientation=='vertical') { $(document).keydown(function(event){ if (event.keycode == 40) { $(settingss.nextbutton).click(); } if (event.keycode == 38) { $(settingss.prevbutton).click(); } }); } } // default position startat, added since 0.9.3 $(settingss.datesdiv+' li').eq(settingss.startat-1).find('a').trigger('click'); // autoplay, added since 0.9.4 }); }; jquery.fn.timelinr1 = function(options){ // default plugin settings settings = jquery.extend({ orientation: 'horizontal', // value: horizontal | vertical, default to horizontal containerdiv: '.service_contain', // value: any html tag or #id, default to #timeline datesdiv: '#service_dates', // value: any html tag or #id, default to #dates datesselectedclass: 'selected', // value: any class, default to selected datesspeed: 500, // value: integer between 100 and 1000 (recommended), default to 500 (normal) issuesdiv: '#service_issues', // value: any html tag or #id, default to #issues issuesselectedclass: 'selected', // value: any class, default to selected issuesspeed: 200, // value: integer between 100 and 1000 (recommended), default to 200 (fast) issuestransparency: 0.2, // value: integer between 0 and 1 (recommended), default to 0.2 issuestransparencyspeed: 500, // value: integer between 100 and 1000 (recommended), default to 500 (normal) prevbutton: '#prev', // value: any html tag or #id, default to #prev nextbutton: '#next', // value: any html tag or #id, default to #next arrowkeys: 'false', // value: true | false, default to false startat: 1, // value: integer, default to 1 (first) autoplay: 'false', // value: true | false, default to false autoplaydirection: 'forward', // value: forward | backward, default to forward autoplaypause: 2000 // value: integer (1000 = 1 seg), default to 2000 (2segs) }, options); $(function(){ // setting variables... many of them var howmanydates = $(settings.datesdiv+' li').length; var howmanyissues = $(settings.issuesdiv+' li').length; var currentdate = $(settings.datesdiv).find('a.'+settings.datesselectedclass); var currentissue = $(settings.issuesdiv).find('li.'+settings.issuesselectedclass); var widthcontainer = $(settings.containerdiv).width(); var heightcontainer = $(settings.containerdiv).height(); var widthissues = $(settings.issuesdiv).width(); var heightissues = $(settings.issuesdiv).height(); var widthissue = $(settings.issuesdiv+' li').width(); var heightissue = $(settings.issuesdiv+' li').height(); var widthdates = $(settings.datesdiv).width(); var heightdates = $(settings.datesdiv).height(); var widthdate = $(settings.datesdiv+' li').width(); var heightdate = $(settings.datesdiv+' li').height(); // set positions! if(settings.orientation == 'horizontal') { $(settings.issuesdiv).width(widthissue*howmanyissues); $(settings.datesdiv).width(widthdate*howmanydates+685).css('marginleft',widthcontainer/2-widthdate/2); var defaultpositiondates = parseint($(settings.datesdiv).css('marginleft').substring(0,$(settings.datesdiv).css('marginleft').indexof('px'))); } else if(settings.orientation == 'vertical') { $(settings.issuesdiv).height(heightissue*howmanyissues); $(settings.datesdiv).height(heightdate*howmanydates).css('margintop',heightcontainer/2-heightdate/2); var defaultpositiondates = parseint($(settings.datesdiv).css('margintop').substring(0,$(settings.datesdiv).css('margintop').indexof('px'))); } $(settings.datesdiv+' a').click(function(event){ event.preventdefault(); // first vars var whichissue = $(this).text(); var currentindex = $(this).parent().prevall().length; // moving the elements if(settings.orientation == 'horizontal') { $(settings.issuesdiv).animate({'marginleft':-widthissue*currentindex},{queue:false, duration:settings.issuesspeed}); } else if(settings.orientation == 'vertical') { $(settings.issuesdiv).animate({'margintop':-heightissue*currentindex},{queue:false, duration:settings.issuesspeed}); } $(settings.issuesdiv+' li').animate({'opacity':settings.issuestransparency},{queue:false, duration:settings.issuesspeed}).removeclass(settings.issuesselectedclass).eq(currentindex).addclass(settings.issuesselectedclass).fadeto(settings.issuestransparencyspeed,1); // now moving the dates $(settings.datesdiv+' a').removeclass(settings.datesselectedclass); $(this).addclass(settings.datesselectedclass); $(settings.datesdiv+' li').removeclass('active'); $(this).parent().addclass('active'); if(settings.orientation == 'horizontal') { $(settings.datesdiv).animate({'marginleft':defaultpositiondates-(widthdate*currentindex)},{queue:false, duration:settings.datesspeed}); } else if(settings.orientation == 'vertical') { $(settings.datesdiv).animate({'margintop':defaultpositiondates-(heightdate*currentindex)},{queue:false, duration:settings.datesspeed}); } }); $(settings.nextbutton).bind('click', function(event){ event.preventdefault(); if(settings.orientation == 'horizontal') { var currentpositionissues = parseint($(settings.issuesdiv).css('marginleft').substring(0,$(settings.issuesdiv).css('marginleft').indexof('px'))); var currentissueindex = currentpositionissues/widthissue; var currentpositiondates = parseint($(settings.datesdiv).css('marginleft').substring(0,$(settings.datesdiv).css('marginleft').indexof('px'))); var currentissuedate = currentpositiondates-widthdate; if(currentpositionissues <= -(widthissue*howmanyissues-(widthissue))) { $(settings.issuesdiv).stop(); $(settings.datesdiv+' li:last-child a').click(); } else { if (!$(settings.issuesdiv).is(':animated')) { $(settings.issuesdiv).animate({'marginleft':currentpositionissues-widthissue},{queue:false, duration:settings.issuesspeed}); $(settings.issuesdiv+' li').animate({'opacity':settings.issuestransparency},{queue:false, duration:settings.issuesspeed}); $(settings.issuesdiv+' li.'+settings.issuesselectedclass).removeclass(settings.issuesselectedclass).next().fadeto(settings.issuestransparencyspeed, 1).addclass(settings.issuesselectedclass); $(settings.datesdiv).animate({'marginleft':currentissuedate},{queue:false, duration:settings.datesspeed}); $(settings.datesdiv+' a.'+settings.datesselectedclass).removeclass(settings.datesselectedclass).parent().next().children().addclass(settings.datesselectedclass); $(settings.datesdiv+' li.'+'active').removeclass('active').parent().next().addclass('active'); } } } else if(settings.orientation == 'vertical') { var currentpositionissues = parseint($(settings.issuesdiv).css('margintop').substring(0,$(settings.issuesdiv).css('margintop').indexof('px'))); var currentissueindex = currentpositionissues/heightissue; var currentpositiondates = parseint($(settings.datesdiv).css('margintop').substring(0,$(settings.datesdiv).css('margintop').indexof('px'))); var currentissuedate = currentpositiondates-heightdate; if(currentpositionissues <= -(heightissue*howmanyissues-(heightissue))) { $(settings.issuesdiv).stop(); $(settings.datesdiv+' li:last-child a').click(); } else { if (!$(settings.issuesdiv).is(':animated')) { $(settings.issuesdiv).animate({'margintop':currentpositionissues-heightissue},{queue:false, duration:settings.issuesspeed}); $(settings.issuesdiv+' li').animate({'opacity':settings.issuestransparency},{queue:false, duration:settings.issuesspeed}); $(settings.datesdiv).animate({'margintop':currentissuedate},{queue:false, duration:settings.datesspeed}); $(settings.datesdiv+' a.'+settings.datesselectedclass).removeclass(settings.datesselectedclass).parent().next().children().addclass(settings.datesselectedclass); $(settings.datesdiv+' li.'+'active').removeclass('active').parent().next().addclass('active'); } } } }); $(settings.prevbutton).click(function(event){ event.preventdefault(); if(settings.orientation == 'horizontal') { var currentpositionissues = parseint($(settings.issuesdiv).css('marginleft').substring(0,$(settings.issuesdiv).css('marginleft').indexof('px'))); var currentissueindex = currentpositionissues/widthissue; var currentpositiondates = parseint($(settings.datesdiv).css('marginleft').substring(0,$(settings.datesdiv).css('marginleft').indexof('px'))); var currentissuedate = currentpositiondates+widthdate; if(currentpositionissues >= 0) { $(settings.issuesdiv).stop(); $(settings.datesdiv+' li:first-child a').click(); } else { if (!$(settings.issuesdiv).is(':animated')) { $(settings.issuesdiv).animate({'marginleft':currentpositionissues+widthissue},{queue:false, duration:settings.issuesspeed}); $(settings.issuesdiv+' li').animate({'opacity':settings.issuestransparency},{queue:false, duration:settings.issuesspeed}); $(settings.issuesdiv+' li.'+settings.issuesselectedclass).removeclass(settings.issuesselectedclass).prev().fadeto(settings.issuestransparencyspeed, 1).addclass(settings.issuesselectedclass); $(settings.datesdiv).animate({'marginleft':currentissuedate},{queue:false, duration:settings.datesspeed}); $(settings.datesdiv+' a.'+settings.datesselectedclass).removeclass(settings.datesselectedclass).parent().prev().children().addclass(settings.datesselectedclass); $(settings.datesdiv+' li.'+'active').removeclass('active').parent().next().addclass('active'); } } } else if(settings.orientation == 'vertical') { var currentpositionissues = parseint($(settings.issuesdiv).css('margintop').substring(0,$(settings.issuesdiv).css('margintop').indexof('px'))); var currentissueindex = currentpositionissues/heightissue; var currentpositiondates = parseint($(settings.datesdiv).css('margintop').substring(0,$(settings.datesdiv).css('margintop').indexof('px'))); var currentissuedate = currentpositiondates+heightdate; if(currentpositionissues >= 0) { $(settings.issuesdiv).stop(); $(settings.datesdiv+' li:first-child a').click(); } else { if (!$(settings.issuesdiv).is(':animated')) { $(settings.issuesdiv).animate({'margintop':currentpositionissues+heightissue},{queue:false, duration:settings.issuesspeed}); $(settings.issuesdiv+' li').animate({'opacity':settings.issuestransparency},{queue:false, duration:settings.issuesspeed}); $(settings.datesdiv+' li.'+settings.issuesselectedclass).removeclass(settings.issuesselectedclass).prev().fadeto(settings.issuestransparencyspeed, 1).addclass(settings.issuesselectedclass); $(settings.issuesdiv+' li').removeclass('active').prev().fadeto(settings.issuestransparencyspeed, 1).addclass('active'); $(settings.datesdiv).animate({'margintop':currentissuedate},{queue:false, duration:settings.datesspeed},{queue:false, duration:settings.issuesspeed}); $(settings.datesdiv+' a.'+settings.datesselectedclass).removeclass(settings.datesselectedclass).parent().prev().children().addclass(settings.datesselectedclass); $(settings.datesdiv+' li.'+'active').removeclass('active').parent().next().addclass('active'); } } } }); // keyboard navigation, added since 0.9.1 if(settings.arrowkeys=='true') { if(settings.orientation=='horizontal') { $(document).keydown(function(event){ if (event.keycode == 39) { $(settings.nextbutton).click(); } if (event.keycode == 37) { $(settings.prevbutton).click(); } }); } else if(settings.orientation=='vertical') { $(document).keydown(function(event){ if (event.keycode == 40) { $(settings.nextbutton).click(); } if (event.keycode == 38) { $(settings.prevbutton).click(); } }); } } // default position startat, added since 0.9.3 $(settings.datesdiv+' li').eq(settings.startat-1).find('a').trigger('click'); // autoplay, added since 0.9.4 if(settings.autoplay == 'true') { setinterval("autoplay()", settings.autoplaypause); } }); }; // autoplay, added since 0.9.4