/** * Agrob Buchtal - Plural plus Microsite - Javascript * @author Sascha Quasthoff * @version 0.1 * @date 28.09.2007 * * * bekannte Fehler: * - Überschreiben der Standardwerte der Parameter ist im Moment nicht möglich. * * * Beispiel-Code mit 3 Tabs: *
...
...
...
*/ var PageSys = { /** * Start der Seitenverarbeitung */ start : function () { this.TabbedView.initialize(); this.Anwendungen.initialize(); }, /** * */ Anwendungen : { initialize : function () { $('#anwendungen_liste a').attr( 'href', '#' ); $('#anwendungen_ansicht img').hide(); $('#Anwendung_01').show(); $('#anwendungen_liste a').click( function () { $('#anwendungen_ansicht img').fadeOut(400); $('#'+$(this).attr('rel')).fadeIn(400); }); } }, /** * Tabdarstellung */ TabbedView : { /* * Parameter und Variablen */ menu : 'tabViewNavigation', // ID der Liste zum Anwählen der Tabs window : 'tabViewWindow', // ID des Sichtfensters container : 'tabViewContainer', // ID des Containers für alle Tabs tabClass : 'tab', // CSS-Klasse der Tabs visibleTab : null, // ID des Tabs, der beim Start angezeigt wird fx : 'slide', // der Überblend-Effekt ('slide', 'fade' und 'show' stehen zur Auswahl) /** * Bereitet die Seite für die Tabdarstellung vor * @param (Object) arg : Die meisten der Parameter können hiermit überschrieben werden */ initialize : function ( arg ) { /* * Falls vorhanden, überschreibe die Standardwerte der Parameter. */ if (typeof arg == 'object') for (i in arg) { if (!!this[i] && !!arg[i] && arg[i] != '') this[i] = arg[i]; } /* * Wenn kein Tab vorhanden ist, breche hier ab. */ if ( !$('.'+this.tabClass) || $('.'+this.tabClass).length == 0 ) return; /* * Wenn der Container oder das Sichtfenster fehlen, erzeuge das Element. */ if ( $('#'+this.container).length == 0 ) $('.'+this.tabClass).wrapAll('
'); if ( $('#'+this.window).length == 0 ) $('#'+this.container).wrapAll('
'); /* * Berechne und setze die Styleangaben für den Container und das Sicht-Fenster. */ var vcWidth = 0; var vcHeight = 0; // Setze die fehlenden CSS-Angaben. $('#'+this.window).css({ cssFloat: 'left', overflow: 'hidden', position: 'relative', width: '100%' }); $('#'+this.container).css({ left: '0', position: 'absolute', top: '0' }); $('.'+this.tabClass).css({ cssFloat: 'left' }); // Berechne zuerst die erforderliche Gesamtbreite ... $('.'+this.tabClass).each ( function (i) { vcWidth += $(this).width(); }); $('#'+this.container).width(vcWidth); $('.'+this.tabClass).width( $('#'+this.window).width() ); // ... dann die erforderliche Höhe. $('.'+this.tabClass).each ( function (i) { vcHeight = ($(this).height() >= vcHeight) ? $(this).height() : vcHeight; }); $('#'+this.container).height(vcHeight); $('#'+this.window).height(vcHeight); /* * Lösche die Linkziele der Tab-Links und erzeuge stattdessen die EventHandler für die Navigationslinks. */ $('#'+this.menu+' a').attr('href', '#'); $('#'+this.menu+' a').hover( function () { $(this).css( 'cursor', 'pointer' ); }, function () { $(this).css( 'cursor', 'auto' ); } ); $('#'+this.menu+' a').click( function (i) { PageSys.TabbedView.showTab($(this).attr('rel')); } ); /* * Zeige den Tab an, der als erster angezeigt werden soll. */ this.showTab( (this.visibleTab == null) ? $('#'+this.menu+' a').slice(0,1).attr('rel') : this.visibleTab ); }, /** * Blendet den übergebenen Tab ein und den gerade angezeigten aus. * Hierfür stehen verschiedene Überblend-Effekte zur Verfügung (slide, fade, show). * @param (String) tabID : die ID des Tabs */ showTab : function ( tabID ) { /* * Wenn der anzuzeigende Tab schon angezeigt wird, brauchen wir auch nix weiter ändern. */ if (tabID == this.visibleTab) return; /* * Berechne die X-Position des anzuzeigenden Tabs innerhalb des Containers. */ var tabOffset = $('#'+tabID).offset(); var containerOffset = $('#'+tabID).parent().offset(); var xPos = containerOffset.left - tabOffset.left + 'px'; switch (this.fx) { case 'slide' : /* * Effekt 'slide': * Tabs werden von links nach rechts reingeschoben - und vice versa. */ $('#'+this.container).animate( { left: xPos }, 1000, 'swing' ); break; case 'fade' : /* * Effekt 'fade': * "Sanftes" Einblenden des neuen Tabs. */ $('#'+tabID).hide(); $('#'+this.container).css( 'left', xPos ); $('#'+tabID).fadeIn(800); break; case 'show' : /* * Effekt 'show' * Der neue Tab erscheint einfach an der neuen Position. */ $('#'+this.container).css( 'left', xPos ); break; } /* * Setze bzw. lösche die CSS-Klasse 'visibleTab' * und speichere die ID des neu angezeigten Tabs. */ $('.visibleTab').removeClass('visibleTab'); $('[@rel="'+tabID+'"]').parent().addClass('visibleTab'); this.visibleTab = tabID; } } }; if (!!$) $(document).ready( function () { PageSys.start(); } );