需要更新插件才能使用jquery 1.4.3

时间:2011-04-11 19:23:51

标签: jquery plugins

我一直在使用一个名为imageswitch的优秀插件,可以从以下位置获得: http://www.hieu.co.uk/blog/index.php/imageswitch/

我一直在网站上使用它我做了几个月agao现在需要更新,我需要切换到jquery 1.4.3所以我可以使用html5 .data()

在这个版本的jquery下,imageswitch插件不起作用,我完全不确定从哪里开始寻找修复与1.4.3一起使用的插件

所以我在这里询问是否有人知道我在哪里可以找到适用于1.4.3的版本,也许其他人遇到了同样的问题,并且有一个更新的脚本副本。

继承代码以防其简单修复:

* jQuery.ImageSwitch
 * Version: 1.0.2
 * http://www.hieu.co.uk/ImageSwitch/
 *
 * Copyright (c) 2009 Hieu Pham - http://www.hieu.co.uk
 * COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
 * http://www.opensource.org/licenses/cddl1.php
 *
 * Date: 13/03/2009
 * Revision: 50
 */
 //This function to preload the image before using it in the function
(function($){
    $.fn.ImageSwitch = function(Arguements, FuntionHandle) {
        var defaults = {
            Type: "FadeIn", // Type of effect to run the function
            NewImage: "", //The new image will be loaded in
            EffectOriginal: true,
            Speed: 1000, //Speed of the effect
            StartLeft: 50, //The position the effect start compare to the original position could be (-)
            StartTop: 0,
            StartOpacity: 0, //Which start opacity it would be
            EndLeft: -50, //The position the effect end compare to the original position could be (-)
            EndTop: 0,
            EndOpacity: 0, //Which start opacity it would be
            Direction: "RightLeft", //Which Way the image will be sroll
            Door1: "", //The image for the door 1
            Door2: "" //The image for the door 2
        };

        var Args = $.extend(defaults, Arguements);
        var Obj = this; // Just a way to reference to this obj in case we need to pass in another event handle
        //To specific which obj ID the effect will associate to
        var EffectID = 0;

        var EffectImageId;//The id of effect image layer : #GrpEffectImg + EffectID
        var EffectDivId1;//The id of effect div layer : #GrpEffectDiv2 + EffectID
        var EffectDivId2;//The id of effect div layer : #GrpEffectDiv2 + EffectID

        var EndFunction = function(){
            Obj.data("imageswitch", -1);
        };              
        if($.isFunction(FuntionHandle)){
            EndFunction = function(){           
                FuntionHandle();        
                Obj.data("imageswitch", -1);
            };
        }
        //-----------------------------------------------------------------------------------------------------------
        //The original image will be fade out when the new image will fade in
        var FadeImage = function(){
            //Generate the effect map, move the effect map overlay the original map
            Obj.parent().append("<img class='GrpEffectImg' id='"+EffectImageId.replace("#","")+"'/>");
            $(EffectImageId).attr("src", Obj.attr("src"));
            $(EffectImageId).css("position", "absolute");
            $(EffectImageId).css("top", Obj.position().top);
            $(EffectImageId).css("left", Obj.position().left);
            $(EffectImageId).css("opacity", 1);

            //Change image of the original map
            Obj.attr("src", Args.NewImage);

            //Need something special when user want to keep no effect for the orignal
            if(Args.EffectOriginal){
                //Set the start opacity, as the effect will fade out we set in start at 1, vice versa for the original
                Obj.css("opacity", Args.StartOpacity);          
                //Fade in the original image
                Obj.animate({"opacity":1}, Args.Speed);                 
            }

            //Start effect animation
            $(EffectImageId).animate({"opacity":0}, Args.Speed, function(){
                //Remove the effect image when finish the effect
                $(EffectImageId).remove();
                EndFunction();
            });                     
        };
        //-----------------------------------------------------------------------------------------------------------
        //The new image will fly from the startPosition with the StartOpacity

        var Fly = function(FlyIn){
                //Generate the effect map, move the effect map overlay the original map
                $("body").append("<img class='GrpEffectImg' id='"+EffectImageId.replace("#","")+"'/>");
                $(EffectImageId).css("position", "absolute");
                if(FlyIn){
                        //As the new image will fly in, so we set the effect image src = new image
                        $(EffectImageId).attr("src", Args.NewImage);                    
                        $(EffectImageId).css("top", Obj.offset().top + Args.StartTop);
                        $(EffectImageId).css("left", Obj.offset().left + Args.StartLeft);
                        $(EffectImageId).css("opacity", Args.StartOpacity);
                        EndTop = Obj.offset().top;
                        EndLeft = Obj.offset().left;
                        //Change the opacity base on the input                          
                        EndOpacity = 1;                         
                }else{
                        //As the old image will fly out, so we set the effect image src = new image
                        //The effect image will be on top of the old image and hide the old image
                        //So we could set the old image with the new src
                        $(EffectImageId).attr("src", Obj.attr("src"));                                          
                        Obj.attr("src", Args.NewImage);
                        $(EffectImageId).css("top", Obj.offset().top);
                        $(EffectImageId).css("left", Obj.offset().left);
                        $(EffectImageId).css("opacity", 1);
                        EndTop = Obj.offset().top + Args.EndTop;
                        EndLeft = Obj.offset().left + Args.EndLeft;
                        //Change the opacity base on the input                          
                        EndOpacity = Args.EndOpacity;                           
                }
                //Let the effect start fly in
                $(EffectImageId).animate({"opacity":EndOpacity, "top":EndTop, 
                                                                        "left": EndLeft}, Args.Speed,
                        function(){
                                Obj.attr("src", Args.NewImage);
                                $(EffectImageId).remove();
                                EndFunction();
                });
        };
        //-----------------------------------------------------------------------------------------------------------
        //The new image will scoll in and kick the old image out.
        //With the setting ScollIn = false, The original image will scroll out and reveal the new image
        var Scroll = function(ScrollIn){
                //Save the original status so we could set it in the end
                var backup = Obj.clone(true);           
                //Create a viewport for it
                Obj.wrap("<div id='GrpViewport-"+ EffectID+"'></div>");
                $("#GrpViewport-" + EffectID).css("overflow","hidden");
                $("#GrpViewport-" + EffectID).width(Obj.width());
                $("#GrpViewport-" + EffectID).height(Obj.height());                                                             
                //Generate the effect map, move the effect map overlay the original map                         
                $("#GrpViewport-" + EffectID).append("<img class='GrpEffectImg' id='"+EffectImageId.replace("#","")+"'/>");
                $(EffectImageId).css("position", "absolute");
                //Find where the Effect Image start
                var StartTop = 0;
                var StartLeft = 0;                              
                switch(Args.Direction){
                        case "RightLeft":       StartLeft = -Obj.width();       break;
                        case "LeftRight":       StartLeft = Obj.width();        break;
                        case "TopDown":         StartTop = -Obj.height();       break;
                        case "DownTop":         StartTop = Obj.height();        break;
                }
                //In scroll in using the Start position, else, Set it to 0 so it could scroll out
                //Also need o set the destination of the animate different
                if(ScrollIn){
                        $(EffectImageId).attr("src", Args.NewImage);
                        $(EffectImageId).css("top", StartTop);
                        $(EffectImageId).css("left", StartLeft);
                        $(EffectImageId).css("opacity", Args.StartOpacity);
                        EndTop = 0;
                        EndLeft = 0;
                        //Don't change the opacity if it scroll in
                        EndOpacity = 1; 
                }else{
                        $(EffectImageId).attr("src", Obj.attr("src"));
                        $(EffectImageId).css("left", 0);
                        $(EffectImageId).css("top", 0);
                        Obj.attr("src", Args.NewImage);
                        EndTop = StartTop;
                        EndLeft = StartLeft;
                        //Change the opacity base on the input                          
                        EndOpacity = Args.EndOpacity; 
                }
                //We need to treat absolute position different                                  
                //In some case there're text arround the image, it could be a bit mess up
                if(Obj.css("position")!="absolute")
                {
                        $("#GrpViewport-" + EffectID).css("position","relative");                                       
                        Obj.css("position","absolute");
                }
                else
                {                       
                        $("#GrpViewport-" + EffectID).css("position","absolute");
                        $("#GrpViewport-" + EffectID).css("left",Obj.css("left"));
                        $("#GrpViewport-" + EffectID).css("top",Obj.css("top"));                
                        Obj.css("top",0);
                        Obj.css("left",0);
                }
                //if effect the original image, then move it as well
                if(Args.EffectOriginal && ScrollIn)
                {                       
                        //Move the original image along
                        Obj.animate({"top": - StartTop,
                                                "left": - StartLeft}, Args.Speed);                                                                      
                }                       
                //Start the effect
                $(EffectImageId).animate({"opacity":EndOpacity,"top":EndTop,"left":EndLeft}, Args.Speed, 
                                function(){
                                        //Finish the effect, and replace the viewport with this area
                                        backup.attr("src",Args.NewImage);
                                        //Also remove the Attr for imageswitch
                                        backup.removeAttr("imageswitch");
                                        backup.data("imageswitch", -1);
                                        $("#GrpViewport-" + EffectID).replaceWith(backup);
                                        EndFunction();
                        });     
        };
        //-----------------------------------------------------------------------------------------------------------
        //A door come out create an effect door close.then open the new image
        var SingleDoor = function(){
                //Save the original status so we could set it in the end
                var backup = Obj.clone(true);
                //Create a viewport for it
                Obj.wrap("<div id='GrpViewport'></div>");
                $("#GrpViewport").css("overflow","hidden");
                $("#GrpViewport").width(Obj.width());
                $("#GrpViewport").height(Obj.height());                                                         
                //Generate the effect map, move the effect map overlay the original map                         
                $("#GrpViewport").append("<div class='GrpEffectDiv' id='"+EffectDivId1.replace("#","")+"'/>");
                $(EffectDivId1).attr("src", Args.NewImage);
                $(EffectDivId1).css("position", "absolute");
                $(EffectDivId1).css("background-color", "#FFF");
    if(Args.Door1.length>0){
                    $(EffectDivId1).css("background", Args.Door1);
                }
                $(EffectDivId1).width(Obj.width());
                $(EffectDivId1).height(Obj.height());                                                           
                //Find where the Effect Image start
                var StartTop = 0;
                var StartLeft = 0;                              
                switch(Args.Direction){
                        case "RightLeft":       StartLeft = -Obj.width();       break;
                        case "LeftRight":       StartLeft = Obj.width();        break;
                        case "TopDown":         StartTop = -Obj.height();       break;
                        case "DownTop":         StartTop = Obj.height();        break;
                }                               
                $(EffectDivId1).css("top", StartTop);
                $(EffectDivId1).css("left", StartLeft); 

                //We need to treat absolute position different  
                if(Obj.css("position")!="absolute")
                {
                        $("#GrpViewport").css("position","relative");                                   
                        Obj.css("position","absolute");                 
                }
                else
                {
                        $("#GrpViewport").css("position","absolute");
                        $("#GrpViewport").css("left",Obj.css("left"));
                        $("#GrpViewport").css("top",Obj.css("top"));            
                        Obj.css("top",0);
                        Obj.css("left",0);
                }
                //Start Close the Door
                $(EffectDivId1).animate({"top":0,"left":0}, Args.Speed, function(){
                        //Finish the first effect change the image and open the door
                        Obj.attr("src", Args.NewImage);
                        //Start open the door
                        $(EffectDivId1).animate({"top":StartTop,"left":StartLeft}, Args.Speed, function(){
                                //Reset style
                                backup.attr("src",Args.NewImage);
                                //Also remove the Attr for imageswitch
                                backup.removeAttr("imageswitch");
                                backup.data("imageswitch", -1);
                                $("#GrpViewport").replaceWith(backup);
                                EndFunction();
                        });
                });     
        };
        //-----------------------------------------------------------------------------------------------------------
        //Same with single door but with this effect, there will be 2 door
        var DoubleDoor = function(){
                //Save the original status so we could set it in the end
                var orgPosition = Obj.css("position");
                var orgLeft = Obj.css("left");
                var orgTop = Obj.css("top");
                //Create a viewport for it
                Obj.wrap("<div id='GrpViewport'></div>");
                $("#GrpViewport").css("overflow","hidden");
                $("#GrpViewport").width(Obj.width());
                $("#GrpViewport").height(Obj.height());                                                         
                //Generate the effect map, move the effect map overlay the original map                         
                $("#GrpViewport").append("<div class='GrpEffectDiv' id='"+EffectDivId1.replace("#","")+"'/>");
                $(EffectDivId1).css("position", "absolute");
                $(EffectDivId1).css("background-color", "#FFF");
                if(Args.Door1.length>0){
        $(EffectDivId1).css("background", Args.Door1);                  
                }
                $(EffectDivId1).width(Obj.width());
                $(EffectDivId1).height(Obj.height());                                                           
                //We need the second door
                $("#GrpViewport").append("<div class='GrpEffectDiv1' id='"+EffectDivId2.replace("#","")+"'/>");
                $(EffectDivId2).css("position", "absolute");
                $(EffectDivId2).css("background-color", "#FFF");
                if(Args.Door2.length>0){
        $(EffectDivId2).css("background", Args.Door2);                          
                }
                $(EffectDivId2).width(Obj.width());
                $(EffectDivId2).height(Obj.height());                                                           

                //Find where the Effect Image start
                var StartTop = 0;
                var StartLeft = 0;                              
                switch(Args.Direction){
                        case "RightLeft":       StartLeft = -Obj.width();       break;
                        case "LeftRight":       StartLeft = Obj.width();        break;
                        case "TopDown":         StartTop = -Obj.height();       break;
                        case "DownTop":         StartTop = Obj.height();        break;
                }                               
                $(EffectDivId1).css("top", StartTop);
                $(EffectDivId1).css("left", StartLeft); 
                $(EffectDivId2).css("top", -StartTop);
                $(EffectDivId2).css("left", -StartLeft);        

                //set the background for the door effect so it look different
                if(!Args.EffectOriginal){
                        $(EffectDivId1).css("background","#FFF url("+Args.NewImage+") no-repeat "+ -StartLeft/2 +"px "+ -StartTop/2+"px");
                        $(EffectDivId2).css("background","#FFF url("+Args.NewImage+") no-repeat "+ StartLeft/2+"px "+ StartTop/2 +"px");
                }                       

                //We need to treat absolute position different                                  
                if(Obj.css("position")!="absolute")
                {
                        $("#GrpViewport").css("position","relative");                                   
                        Obj.css("position","absolute");                 
                }
                else
                {
                        $("#GrpViewport").css("position","absolute");
                        $("#GrpViewport").css("left",orgLeft);
                        $("#GrpViewport").css("top",orgTop);
                        Obj.css("position","absolute");                 
                        Obj.css("top",0);
                        Obj.css("left",0);
                }
                //Start Close the Door
                $(EffectDivId1).animate({"top":StartTop/2,"left":StartLeft/2}, Args.Speed, function(){
                        //Finish the first effect change the image and open the door
                        Obj.attr("src", Args.NewImage);
                        //If EffectOriginal isn't on mean two door stick into the new image, then stop here. Else carry on
                        if(!Args.EffectOriginal){
                                Obj.css("position", orgPosition);
                                Obj.css("top", orgTop);
                                Obj.css("left", orgLeft);                               
                                $("#GrpViewport").replaceWith(Obj);
                        }else{
                                //Start open the door
                                $(EffectDivId1).animate({"top":StartTop,"left":StartLeft}, Args.Speed, function(){
                                        //Reset style
                                        Obj.css("position", orgPosition);
                                        Obj.css("top", orgTop);
                                        Obj.css("left", orgLeft);
                                        $("#GrpViewport").replaceWith(Obj);
                                });
                        }
                });     
                $(EffectDivId2).animate({"top":-StartTop/2,"left":-StartLeft/2}, Args.Speed, function(){
                        //Finish the first effect change the image and open the door
                        Obj.attr("src", Args.NewImage);
                        //If EffectOriginal isn't on mean two door stick into the new image, then stop here. Else carry on
                        if(!Args.EffectOriginal){
                                EndFunction();
                        }else{
                                //Start open the door
                                $(EffectDivId2).animate({"top":-StartTop,"left":-StartLeft}, Args.Speed, function(){
                                        //Run the end effect
                                        EndFunction();
                                });
                        }
                });                                     
        };
        //-----------------------------------------------------------------------------------------------------------
        //The new image will flip from the back of the old one to the top
        //If FlipIn is false, then the old image will flip to the back reveal the new one
        var Flip = function(FlipIn){
            var backup = Obj.clone(true);       
                if(Obj.css("z-index") == 'auto')        {
                        Obj.css("z-index", 100);
                }
                //if (position different then absolute and relative then it should be relative)
                if(Obj.css("position") != "absolute"){
                        Obj.css("position", "relative");
                }
                //Generate the effect map, move the effect map overlay the original map
                $("body").append("<img class='GrpEffectImg'  id='"+EffectImageId.replace("#","")+"'/>");
                $(EffectImageId).css("position", "absolute");
                $(EffectImageId).css("top", Obj.offset().top);
                $(EffectImageId).css("left", Obj.offset().left);

                if(FlipIn){
                        $(EffectImageId).css("opacity", Args.StartOpacity);
                        //So this layer will be under the original image
                        $(EffectImageId).css("z-index", Obj.css("z-index")-1);
                        $(EffectImageId).attr("src", Args.NewImage);
                }else{
                        $(EffectImageId).css("opacity", 1);
                        //This layer will be on top the original image
                        $(EffectImageId).css("z-index", Obj.css("z-index")+1);                  
                        //Turn in to the fake old image
                        $(EffectImageId).attr("src", Obj.attr("src"));
                        Obj.attr("src", Args.NewImage);

                }

                //Find where the effect layer stop
                if(Math.abs(Args.EndTop)<Obj.height() && Math.abs(Args.EndLeft)<Obj.width()){
                        EndTop = Obj.offset().top;
                        EndLeft = Obj.offset().left + Obj.width();
                }else{
                        EndTop = Obj.offset().top + Args.EndTop;
                        EndLeft = Obj.offset().left + Args.EndLeft;                             
                }
                EndOpacity = 1; 

                //Let the effect start, 
                $(EffectImageId).animate({"opacity":EndOpacity, "top":EndTop, 
                                                                        "left": EndLeft}, Args.Speed,
                        function(){
                                //Now the effect image is out, move it back again
                                if(FlipIn) {
                                        $(EffectImageId).css("z-index", 101);
                                }else{
                                        EndOpacity = Args.EndOpacity;
                                        $(EffectImageId).css("z-index", 2);                                             
                                }
                                $(EffectImageId).animate({"opacity":EndOpacity, "top":Obj.offset().top, 
                                                                                        "left": Obj.offset().left}, Args.Speed,
                                        function(){
                                                //Restore the image to the original
                                                backup.attr("src", Args.NewImage);
                                                //Also remove the Attr for imageswitch
                                                backup.removeAttr("imageswitch");       
                                                backup.data("imageswitch", -1);
                                                Obj.replaceWith(backup);
                                                $(EffectImageId).remove();
                                                EndFunction();                                          
                                        });
                });
        };

        return this.each(function(){
            Obj = $(this);          
            if(!Obj.ImageAnimating())
            {
                EffectID = Obj.attr('id').replace(':', '_');

                //Mark the effect is running                            
                Obj.data("imageswitch", 1);
                EffectImageId = "#GrpEffectImg-" + EffectID;//The id of effect image layer : #GrpEffectImg- + EffectID
                EffectDivId1 = "#GrpEffectDiv1-" + EffectID;//The id of effect div layer : #GrpEffectDiv1- + EffectID
                EffectDivId2 = "#GrpEffectDiv2-" + EffectID;//The id of effect div layer : #GrpEffectDiv2- + EffectID

                var TempImg = new Image();
                TempImg.src = Args.NewImage;
                $.ImagePreload(Args.NewImage,function(){
                    switch(Args.Type){
                        case "FadeIn":          FadeImage();    break;
                        case "FlyIn":           Fly(true);              break;
                        case "FlyOut":          Fly(false);             break;
                        case "FlipIn":          Flip(true);             break;
                        case "FlipOut":         Flip(false);    break;                          
                        case "ScrollIn":        Scroll(true);   break;
                        case "ScrollOut":       Scroll(false);  break;
                        case "SingleDoor":      SingleDoor();   break;
                        case "DoubleDoor":      DoubleDoor();   break;
                    }
            });
        }
    });     
};      
})(jQuery);

//Check if a IS effect is running
(function($){
    $.fn.ImageAnimating = function(){
        if(this.data("imageswitch")>0){
            return true;
        }else{
            return false;
        }
    };
})(jQuery);
//Stop a specific the IS effect if it's running
(function($){
    $.fn.ImageStop = function(clearQueue, gotoEnd, EndFunction){
        return this.each(function(){
            if($(this).ImageAnimating()){
                var EffectID = $.data(this,"imageswitch");
                $("#GrpEffectImg-"+EffectID).stop(clearQueue, gotoEnd);
                $("#GrpEffectDiv-"+EffectID).stop(clearQueue, gotoEnd);
                $("#GrpEffectDiv1-"+EffectID).stop(clearQueue, gotoEnd);
                $(this).stop(clearQueue, gotoEnd);
                $("#GrpEffectImg-"+EffectID).remove();
                $("#GrpEffectDiv-"+EffectID).remove();
                $("#GrpEffectDiv1-"+EffectID).remove();
                if($.isFunction(EndFunction)){
                        EndFunction();
                }
            }
        });
    };
})(jQuery);
//Stop all the IS effect running
(function($){
    $.ImageStopAll = function(clearQueue, gotoEnd, EndFunction){
            $(".GrpEffectImg").stop(clearQueue, gotoEnd);
            $(".GrpEffectDiv").stop(clearQueue, gotoEnd);
            $(".GrpEffectDiv1").stop(clearQueue, gotoEnd);
            $(this).stop(clearQueue, gotoEnd);
            $(".GrpEffectImg").remove();
            $(".GrpEffectDiv").remove();
            $(".GrpEffectDiv1").remove();
            $.data(this, "imageswitch", -1);
            if($.isFunction(EndFunction)){
                    EndFunction();
            }
    };
})(jQuery);
//Preload a specific image
(function($){
    $.ImagePreload = function(FileName, EndFunction){
            var TempImage = new Image();
            TempImage.src = FileName;
            if($.isFunction(EndFunction)){
                    $(TempImage).load(EndFunction());
            }
    };
})(jQuery);

1 个答案:

答案 0 :(得分:1)

这并不总是有效,但您可以尝试jQuery-compat。它试图创建从jQuery 1.4到1.3的向后兼容性(它必须有价值,John Resig写道:):

https://github.com/jquery/jquery-compat-1.3