vertical accordion from horizontal

Posted by Sify Juhy on Stack Overflow See other posts from Stack Overflow or by Sify Juhy
Published on 2011-11-23T17:45:32Z Indexed on 2011/11/23 17:49 UTC
Read the original article Hit count: 431

Filed under:
|
|
//# jQuery - Horizontal Accordion
//# Version 2.00.00 Alpha 1
//#
//# portalZINE(R) - New Media Network
//# http://www.portalzine.de
//#
//# Alexander Graef
//# [email protected]
//#
//# Copyright 2007-2009

(function($) {
    $.hrzAccordion = {


       setOnEvent: function(i, container, finalWidth, settings){
            $("#"+container+"Handle"+i).bind(settings.eventTrigger,function() {          

                        var status = $('[rel='+container+'ContainerSelected]').data('status');

                        if(status ==1 && settings.eventWaitForAnim === true){
                         return false;  
                        }

                        if( $("#"+container+"Handle"+i).attr("rel") != container+"HandleSelected"){

                          settings.eventAction;

                            $('[id*='+container+'Handle]').attr("rel","");                          

                            $('[id*='+container+'Handle]').attr("class",settings.handleClass);

                            $("#"+container+"Handle"+i).addClass(settings.handleClassSelected);


                            $("."+settings.contentWrapper).css({width: finalWidth+"px" });

                            switch(settings.closeOpenAnimation)
                            {
                            case 1:


                        if($('[rel='+container+'ContainerSelected]').get(0)  ){
                        $('[rel='+container+'ContainerSelected]').data('status',1);

                            //current_width = $('[rel='+container+'ContainerSelected]').width();

                            $('[rel='+container+'ContainerSelected]').animate({width: "0px",opacity:"0"}, { queue:true, duration:settings.closeSpeed ,easing:settings.closeEaseAction,complete: function(){ 

                            $('[rel='+container+'ContainerSelected]').data('status',0);                                                                                                                                                                         } ,step: function(now){
                                                                                                                                                                                                                                    width = $(this).width();

                            //new_width = finalWidth- (finalWidth  * (width/current_width));
                            new_width = finalWidth - width;
                            $('#'+container+'Content'+i).width(Math.ceil(new_width)).css("opacity","1");

                            }});

                        }else{
                            $('[rel='+container+'ContainerSelected]').data('status',1);

                            $('#'+container+'Content'+i).animate({width: finalWidth,opacity:"1"}, { queue:false, duration:settings.closeSpeed ,easing:settings.closeEaseAction,complete: function(){
                                                                                                                                                                                                      $('[rel='+container+'ContainerSelected]').data('status',0);   
                                                                                                                                                                                                      }});


                            }

                            break;
                            case 2:
                                $('[id*='+container+'Content]').css({width: "0px"});
                                $('#'+container+'Content'+i).animate({width: finalWidth+"px",opacity:"1"}, { queue:false, duration:settings.openSpeed ,easing:settings.openEaseAction, complete: 
 settings.completeAction                                                                                                                                                                                                                                    });                     

                            break;
                            }

                            $('[id*='+container+'Content]').attr("rel","");         
                            $("#"+container+"Handle"+i).attr("rel",container+"HandleSelected");
                            $("#"+container+"Content"+i).attr("rel",container+"ContainerSelected");                 


                        }

                    }); 
}
        };

    $.fn.extend({

        hrzAccordionLoop: function(options) {
            return this.each(function(a){  

                var container = $(this).attr("id") || $(this).attr("class");
                var elementCount = $('#'+container+' > li, .'+container+' > li').size();
                var settings = $(this).data('settings');

                variable_holder="interval"+container ;
                var i =0;
                var loopStatus  = "start";

                variable_holder = window.setInterval(function(){                            

                $("#"+container+"Handle"+i).trigger(settings.eventTrigger);

                if(loopStatus =="start"){
                        i = i + 1;
                    }else{
                        i = i-1;    
                    }

                    if(i==elementCount && loopStatus  == "start"){
                        loopStatus  = "end";
                        i=elementCount-1;

                    }

                    if(i==0 && loopStatus  == "end"){
                        loopStatus  = "start";
                        i=0;

                    }
                                                },settings.cycleInterval);


                });
            },
        hrzAccordion: function(options) {
            this.settings = {
            eventTrigger            : "click",
            containerClass          : "container",
            listItemClass           : "listItem",                   
            contentContainerClass   : "contentContainer",
            contentWrapper          : "contentWrapper",
            contentInnerWrapper     : "contentInnerWrapper",
            handleClass             : "handle",
            handleClassOver         : "handleOver",
            handleClassSelected     : "handleSelected",
            handlePosition          : "right",
            handlePositionArray     : "", // left,left,right,right,right
            closeEaseAction         : "swing",
            closeSpeed              : 500,
            openEaseAction          : "swing",
            openSpeed               : 500,
            openOnLoad              : 2,
            hashPrefix              : "tab",
            eventAction             : function(){
                                    //add your own extra clickAction function here
                                    },
            completeAction          : function(){
                                    //add your own onComplete function here
                                    },
            closeOpenAnimation      : 1,// 1 - open and close at the same time / 2- close all and than open next
            cycle                   : false, // not integrated yet, will allow to cycle through tabs by interval
            cycleInterval           : 10000,
            fixedWidth              : "",
            eventWaitForAnim        : true

        };

        if(options){
            $.extend(this.settings, options);
        }
            var settings = this.settings;



            return this.each(function(a){           

                var container = $(this).attr("id") || $(this).attr("class");            

                $(this).data('settings', settings);

                $(this).wrap("<div class='"+settings.containerClass+"'></div>");

                var elementCount = $('#'+container+' > li, .'+container+' > li').size();

                var containerWidth =  $("."+settings.containerClass).width();

                var handleWidth = $("."+settings.handleClass).css("width");

                handleWidth =  handleWidth.replace(/px/,"");
                var finalWidth;
                var handle;

                if(settings.fixedWidth){
                    finalWidth = settings.fixedWidth;
                }else{
                    finalWidth = containerWidth-(elementCount*handleWidth)-handleWidth;
                }

                $('#'+container+' > li, .'+container+' > li').each(function(i) {

                    $(this).attr('id', container+"ListItem"+i);
                    $(this).attr('class',settings.listItemClass);
                    $(this).html("<div class='"+settings.contentContainerClass+"' id='"+container+"Content"+i+"'>"
                                 +"<div class=\""+settings.contentWrapper+"\">"
                                 +"<div class=\""+settings.contentInnerWrapper+"\">"
                                 +$(this).html()
                                 +"</div></div></div>");

                    if($("div",this).hasClass(settings.handleClass)){

                    var html = $("div."+settings.handleClass,this).attr("id",""+container+"Handle"+i+"").html();
                    $("div."+settings.handleClass,this).remove();

                     handle = "<div class=\""+settings.handleClass+"\" id='"+container+"Handle"+i+"'>"+html+"</div>";
                    }else{
                     handle = "<div class=\""+settings.handleClass+"\" id='"+container+"Handle"+i+"'></div>";
                    }



                    if(settings.handlePositionArray){
                        splitthis               = settings.handlePositionArray.split(",");
                        settings.handlePosition = splitthis[i];
                    }

                    switch(settings.handlePosition ){
                        case "left":
                        $(this).prepend( handle );
                        break;
                        case "right":   
                        $(this).append( handle );   
                        break;
                        case "top": 
                        $("."+container+"Top").append( handle );    
                        break;
                        case "bottom":  
                        $("."+container+"Bottom").append( handle ); 
                        break;
                    }                   

                    $("#"+container+"Handle"+i).bind("mouseover", function(){
                        $("#"+container+"Handle"+i).addClass(settings.handleClassOver);
                    });

                    $("#"+container+"Handle"+i).bind("mouseout", function(){
                        if( $("#"+container+"Handle"+i).attr("rel") != "selected"){
                            $("#"+container+"Handle"+i).removeClass(settings.handleClassOver);
                        }
                    });


                    $.hrzAccordion.setOnEvent(i, container, finalWidth, settings);              

                    if(i == elementCount-1){
                        $('#'+container+",."+container).show();                 
                    }



                    if(settings.openOnLoad !== false && i == elementCount-1){
                            var location_hash = location.hash;
                            location_hash  = location_hash.replace("#", "");    
                            if(location_hash.search(settings.hashPrefix) != '-1' ){
                            var tab = 1;
                            location_hash  = location_hash.replace(settings.hashPrefix, "");
                            }

                            if(location_hash && tab ==1){
                                $("#"+container+"Handle"+(location_hash)).attr("rel",container+"HandleSelected");
                                $("#"+container+"Content"+(location_hash)).attr("rel",container+"ContainerSelected");       
                                $("#"+container+"Handle"+(location_hash-1)).trigger(settings.eventTrigger);

                            }else{
                                $("#"+container+"Handle"+(settings.openOnLoad)).attr("rel",container+"HandleSelected");
                                $("#"+container+"Content"+(settings.openOnLoad)).attr("rel",container+"ContainerSelected"); 
                                $("#"+container+"Handle"+(settings.openOnLoad-1)).trigger(settings.eventTrigger);
                            }                   
                    }   
                }); 

                if(settings.cycle === true){
                    $(this).hrzAccordionLoop();
                }
            });             
        }       
    });
})(jQuery); 

**Given is the code used for the accordion...please check out this Accordion Link. in the link there are four examples of accordions. i want the last accordion i.e example 4 to be vertical ...kindly help me.

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about jQuery