jQuery fadeIn and fadeOut - swapping divs

后端 未结 6 1134
挽巷
挽巷 2021-01-25 19:33

I\'m new to jQuery and javascript in general but am plugging my way through thanks to sites like these.

I have a page with six hidden divs that are called with correspon

6条回答
  •  醉话见心
    2021-01-25 20:17

    This code could certainly be made more efficient and flexible, but for a simple 6 element example as the above it should be enough. This was mostly done as just a proof of concept.

    I chose to add the classes programmatically, but ideally you should have the classes added in the HTML. If it were me I would probably also have used expandos instead of id string replacement.

    EDIT, fixes added:
    Recursive function for sequential animation makes sure that fadeIn is processed at the right time. There may be a more efficient method for this, such as using a counter, but for just 6 elements it should be fine, and this matches your original code more faithfully.
    Fix for animations processing at incorrect times, such as when you click many links simultaneously, causing multiple panels to try to fadeIn, by stopping and finishing animations.

    jQuery(function($){
        //add links/panels class to all elements whose id begins with link/panel
        $("[id^=link]").addClass("links");
        $("[id^=panel]").addClass("panels");
    
        $(".links").click(function(e){
            //find all panels, make a normal array, and stop/finish all animations
            var panels=$.makeArray($(".panels").stop(true, true));
    
            //find panel to show
            var panelShow=$("#"+this.id.replace("link","panel"));
    
            //recursive function to execute fades in sequence
            function queueFX(queue){
                if(queue.length==0){
                    panelShow.fadeIn("slow");
                    return;
                }
                $(queue.shift()).fadeOut("slow", function(){
                    queueFX(queue);
                });
            }
            queueFX(panels);
    
            //stop event propogation and default behavior, commented out because you don't seem to want this behavior
            e.preventDefault();
            //e.stopPropagation();
            //return false;
        });
    });
    

提交回复
热议问题