Or well something like that. Basically i wrote a little plugin that
load and switching between images, everything works perfectly apart
from the fading transition not working under IE.

I think it might have something to do with the way IE handle new
images loaded in an image tag but I am unsure about it. It's nothing
to do with jQuery either as fading works fine in a simple use. Anyway
no idea what is wrong so I hope someone in here might be able to help
or point me in thr right direction.

Here is the plugin code

// closure
;(function($)
{
        // plugin
        $.fn.nxSwapper = function(settings)
        {
                // private variables
                // old key, new key, old id, new id, new loaded, element 
displayed,
link, container, container height,
                // container width, current effect, new effect to use, fx 
direction,
image array, image array size, link in new window
                var ok, nk, oid, nid, nl, e, url, self = this, sheight, swidth, 
cfx,
nfx, fxdir, img, size, nwin;

                // default settings
                var defaults =
                {
                        // amount of time an image will be displayed (used if 
no time is
set per image)
                        displayTime: 3000,

                        // swapped effect (default effect to use, effect can be 
set per
image. supported: 'squeeze', 'fade', 'slide' or 'toggle')
                        effect: 'fade',

                        // slow, normal, fast or time in ms
                        effectSpeed: 'slow',

                        // effect type ONLY for squeeze and slide ('horizontal' 
or
'vertical')
                        effectDirection: 'vertical',

                        // prefix (use if you need multiple swapper per page)
                        prefix: 'nxSwapper',

                        // url to the file that generate the JSON
                        fileURL: '/assets/jsp/nxswapperimages.jsp',

                        // open links in a new window
                        linkInWindow: false,

                        // randomely pick a record
                        random: false,

                        // used to pass directly the JSON instead of having the 
plugin load
it
                        data: false
                };

                // merge defaults with given settings
                var o = $.extend({}, defaults, settings);

                // public method to allow property value change on the fly
                $.fn.nxSwapper.set = function(property, value)
                {
                        // property exists
                        if (o[property])
                        {
                                // if effect dont change straight away (avoid 
bug if animation in
progress)
                                if ('effect' == property) nfx = value;
                                else o[property] = value;

                                // success
                                return true;
                        }

                        // failed
                        else return false;
                };

                // public method to get property value
                $.fn.nxSwapper.get = function(property)
                {
                        // return property value
                        return o[property];
                };

                // data available?
                if (!o.data)
                {
                        // get the JSON object
                        $.getJSON(o.fileURL, function(d, s)
                        {
                                // loaded with success
                                if (s == 'success')
                                {
                                        // set data & run
                                        data = d;
                                        _init();
                                }
                                else alert(s);
                        });
                }
                else
                {
                        // set data & run
                        data = o.data;
                        _init();
                };

                // initialize function
                function _init()
                {
                        // cache array length
                        size = data.images.length;

                        // cache array
                        img = data.images;

                        // cache container width
                        swidth = $(self).innerWidth();

                        // cache container height
                        sheight = $(self).innerHeight();

                        // check for elements
                        if (size)
                        {
                                // add 2 images tag to the element and hide them
                                $(self).append('<img id="'+o.prefix+'Img1"><img 
id="'+o.prefix
+'Img2">');

                                // image tags css
                                $(self).children('img').css(
                                {
                                        position: 'absolute',
                                        top: 0,
                                        left: 0,
                                        zIndex: 800
                                });

                                // add div for the on mouse event text
                                
$(self).append('<div></div>').children('div').eq(0).css(
                                {
                                        display: 'none',
                                        zIndex: 802,
                                        position: 'absolute'
                                }).attr('id',o.prefix+'Text');

                                // set first image in the first tag and switch 
z-index
                                $('#'+o.prefix+'Img1').attr('src', 
img[0].src).css('zIndex',
801).show();

                                // url?
                                if (img[0].url)
                                {
                                        // save url
                                        url = img[0].url;

                                        // change element cursor
                                        $(self).css('cursor', 'pointer');

                                        // open link in new window
                                        if (img[0].linkInWindow) nwin = true;
                                        else nwin = o.linkInWindow;

                                        // set click event
                                        $(self).click(function()
                                        {
                                                // make sure we have a url
                                                if (!url) return false;

                                                // new window?
                                                if (nwin)
                                                {
                                                        // for new window 
return false
                                                        window.open(url);
                                                        return false;
                                                }
                                                else window.location = url;
                                        });
                                };

                                // text?
                                if (img[0].text) 
$('#'+o.prefix+'Text').text(img[0].text);

                                // on mouse over / out effect
                                $(self).hover(function() { if 
($('#'+o.prefix+'Text').text()) $
('#'+o.prefix+'Text').fadeIn(o.effectSpeed); }
                                , function() { if 
($('#'+o.prefix+'Text').text()) $('#'+o.prefix
+'Text').fadeOut(o.effectSpeed); });

                                // make sure we got more than one image before 
starting process
                                // if not there is nothing else to do
                                if (size > 1)
                                {
                                        // Set src for second image (so it 
preload in background)
                                        $('#'+o.prefix+'Img2').attr('src', 
img[1].src);

                                        // Set array key (old)
                                        ok = 0;

                                        // Set element displayed (1 or 2)
                                        e = 1;

                                        // Set time out swap
                                        if (img[0].time) setTimeout(_swap, 
img[0].time);
                                        else setTimeout(_swap, o.displayTime);
                                };
                        };
                };

                // swapping function (timed out)
                function _swap()
                {
                        // Generate new array key
                        if (o.random) nk = _random();
                        else nk = ok+1;

                        // reset needed?
                        if (nk == size || ok == nk) nk = 0;

                        if (e == 1)
                        {
                                oid = '#'+o.prefix+'Img1';
                                nid = '#'+o.prefix+'Img2';
                                e = 2;
                        }
                        else
                        {
                                oid = '#'+o.prefix+'Img2';
                                nid = '#'+o.prefix+'Img1';
                                e = 1;
                        };

                        // load image into tag
                        $(nid).attr('src', img[nk].src).onload = _load();
                };

                function _load()
                {
                        // reset container
                        _reset();

                        // text?
                        if (img[nk].text) 
$('#'+o.prefix+'Text').text(img[nk].text);

                        // new effect?
                        if (nfx)
                        {
                                o.effect = nfx;
                                nfx = false;
                        };

                        // specific image effect
                        if (img[nk].effect) cfx = img[nk].effect;
                        else cfx = o.effect;

                        // Transition
                        switch (cfx)
                        {
                                // fade
                                case 'fade':
                                        _fade(oid, nid);
                                                break;
                                // squeeze
                                case 'squeeze':
                                        _squeeze(oid, nid);
                                                break;
                                // slide
                                case 'slide':
                                        _slide(oid, nid);
                                                break;
                                // toggle
                                default:
                                        _toggle(oid, nid);
                        };

                        // set old key
                        ok = nk;
                };

                // Generate a random key
                function _random()
                {
                        // generate random key
                        var rk = Math.floor(Math.random() * size);

                        // if random key equal old key just take next key
                        if (rk == ok) rk = rk+1;

                        // return key
                        return rk;
                };

                // reset function
                function _reset()
                {
                        // empty text holder and hide
                        $('#'+o.prefix+'Text').text('').hide();

                        // reset images tag
                        $(self).children('img').css(
                        {
                                height: sheight,
                                width: swidth,
                                opacity:100,
                                top:0,
                                left:0
                        })
                        .show();

                        // reset container cursor css
                        $(self).css('cursor','auto');

                        // reset url
                        url = '';
                };

                // sliding function
                function _slide(oid, nid)
                {
                        // make sure container overflow is hidden
                        $(self).css('overflow','hidden');

                        // image effect direction?
                        if (img[nk].effectDirection) var fxd = 
img[nk].effectDirection;
                        else var fxd = o.effectDirection;

                        // effect direction
                        if ('horizontal' == fxd)
                        {
                                // animation settings
                                var osets = {left:'-'+swidth};
                                var nsets = {left:0};

                                // move nid to the right of oid
                                $(nid).css('left', swidth);
                        }
                        else
                        {
                                // animation settings
                                var osets = {top:'-'+sheight};
                                var nsets = {top:0};

                                // move nid to the bottom of oid
                                $(nid).css('top', sheight);
                        };

                        // animate old out of the way
                        $(oid).animate(osets, o.effectSpeed);

                        // animate new one in
                        $(nid).animate(nsets, o.effectSpeed, function()
                        {
                                _off(oid);
                                _on(nid);
                        });
                };

                // squeezing function
                function _squeeze(oid, nid)
                {
                        // image effect direction?
                        if (img[nk].effectDirection) var fxd = 
img[nk].effectDirection;
                        else var fxd = o.effectDirection;

                        // effect direction
                        if ('horizontal' == fxd) var sets = {width:0, 
height:sheight};
                        else var sets = {height:0, width:swidth};

                        // animate
                        $(oid).animate(sets, o.effectSpeed, function()
                        {
                                // sort elements out
                                _off(oid);
                                _on(nid);
                        });
                };

                // fading function
                function _fade(oid, nid)
                {
                        $(oid).fadeTo(o.effectSpeed, 0, function() { _off(oid); 
});
                        $(nid).fadeTo(o.effectSpeed, 100, function() { 
_on(nid); });
                };

                // toggle function
                function _toggle(oid, nid)
                {
                        _off(oid);
                        $(nid).show();
                        _on(nid);
                };

                // off function (sort out element hidden)
                function _off(id)
                {
                        // switch z-index
                        $(id).css('zIndex', 800);
                };

                // on function (sort out element showed)
                function _on(id)
                {
                        // switch z-index
                        $(id).css('zIndex', 801);

                        // on click url?
                        if (img[nk].url)
                        {
                                // save url
                                url = img[nk].url;

                                // change element cursor
                                $(self).css('cursor','pointer');

                                // new window settings
                                nwin = img[nk].linkInWindow == true ? 
img[nk].linkInWindow :
o.linkInWindow;
                        };

                        // text (used on mouseover)
                        if (img[nk].text) 
$('#'+o.prefix+'Text').text(img[nk].text);

                        // set time out for next swap
                        if (img[nk].time) setTimeout(_swap, img[nk].time);
                        else setTimeout(_swap, o.displayTime);
                };
        };

})(jQuery);

The only markup needed is a div or an other element as the image tag
are added by the system.

The only idea I have is to wrap the img into div and play with the div
tags instead of the image tags, could this ressolve the issue
encountered?

Also feel free to point anything out that could be done better or that
would be an issue.

Thanks in advance




--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to