| 
        
        
        
       | 
       | 
      
          An image slideshow enhanced with random transitional effects
        It's time to get real now. Lets create an image slideshow that incorporates IE transitions into the mix. Apart from using just one transition, lets define an array of all IE transitions and have our slideshow randomly pick one from the list to utilize each time the page loads. We start out with such an array: 
        var global_transitions=[ //array of IE transition strings 
         "progid:DXImageTransform.Microsoft.Barn()", 
         "progid:DXImageTransform.Microsoft.Blinds()", 
         "progid:DXImageTransform.Microsoft.CheckerBoard()", 
         "progid:DXImageTransform.Microsoft.Fade()", 
         "progid:DXImageTransform.Microsoft.GradientWipe()", 
         "progid:DXImageTransform.Microsoft.Inset()", 
         "progid:DXImageTransform.Microsoft.Iris()", 
         "progid:DXImageTransform.Microsoft.Pixelate()", 
         "progid:DXImageTransform.Microsoft.RadialWipe()", 
         "progid:DXImageTransform.Microsoft.RandomBars()", 
         "progid:DXImageTransform.Microsoft.RandomDissolve()", 
         "progid:DXImageTransform.Microsoft.Slide()", 
         "progid:DXImageTransform.Microsoft.Spiral()", 
         "progid:DXImageTransform.Microsoft.Stretch()", 
         "progid:DXImageTransform.Microsoft.Strips()", 
         "progid:DXImageTransform.Microsoft.Wheel()", 
         "progid:DXImageTransform.Microsoft.Zigzag()" 
        ] 
        Notice the absence of any attributes (ie: duration). We'll just let them fall back to their default values when undefined for simplicity here. 
        Next, it's time to create the main slideshow function that rotates a series of images by changing a wrapper DIV's .innerHTML property (so text can be shown as well). We check for support for IE filters/transitions, and if found, call apply() and play() just before each slide change. Here is the complete function: 
        function flashyslideshow(setting){ 
         this.wrapperid=setting.wrapperid 
         this.imagearray=setting.imagearray 
         this.pause=setting.pause 
         this.transduration=setting.transduration/1000 //convert from miliseconds to seconds unit to pass into el.filters.play() 
         this.currentimg=0 
         var preloadimages=[] //temp array to preload images 
          for (var i=0; i<this.imagearray.length; i++){ 
          preloadimages[i]=new Image() 
          preloadimages[i].src=this.imagearray[i][0] 
         } 
         document.write('<div id="'+this.wrapperid+'" class="'+setting.wrapperclass+'">'+this.getSlideHTML(this.currentimg)+'</div>') 
         var effectindex=Math.floor(Math.random()*global_transitions.length) //randomly pick a transition to utilize 
         var wrapperdiv=document.getElementById(this.wrapperid) 
         if (wrapperdiv.filters){ //if the filters[] collection is defined on element (only in IE) 
          wrapperdiv.style.filter=global_transitions[effectindex] //define transition on element 
          this.pause+=setting.transduration //add transition time to pause 
         } 
         this.filtersupport=(wrapperdiv.filters && wrapperdiv.filters.length>0)? true : false //test if element supports transitions and has one defined 
         var slideshow=this 
         setInterval(function(){slideshow.rotate()}, this.pause) 
        } 
         
        flashyslideshow.prototype.getSlideHTML=function(index){ 
         var slideHTML=(this.imagearray[index][1])? '<a href="'+this.imagearray[index][1]+'" target="'+this.imagearray[index][1]+'">\n' : '' //hyperlink slide? 
         slideHTML+='<img src="'+this.imagearray[index][0]+'" />' 
         slideHTML+=(this.imagearray[index][1])? '</a><br />' : '<br />' 
         slideHTML+=(this.imagearray[index][3])? this.imagearray[index][3] : '' //text description? 
         return slideHTML //return HTML for the slide at the specified index 
        } 
         
        flashyslideshow.prototype.rotate=function(){ 
         var wrapperdiv=document.getElementById(this.wrapperid) 
         this.currentimg=(this.currentimg<this.imagearray.length-1)? this.currentimg+1 : 0 
         if (this.filtersupport) 
          wrapperdiv.filters[0].apply() 
         wrapperdiv.innerHTML=this.getSlideHTML(this.currentimg) 
         if (this.filtersupport) 
          wrapperdiv.filters[0].play(this.transduration) 
        } 
        For your convenience the script is also presented as an external js file: flashyslideshow.js. 
        To display an image slideshow, you'd call new flashyslideshow() and pass in a "setting" object containing the various desired settings for the slideshow. Here's an example: 
        var flashyshow=new flashyslideshow({ //create instance of slideshow 
         wrapperid: "myslideshow", //unique ID for this slideshow 
         wrapperclass: "flashclass", //desired CSS class for this slideshow 
         imagearray: [ 
          ["summer.jpg", "http://en.wikipedia.org/wiki/Summer", "_new", "Such a nice Summer getaway."], 
          ["winter.jpg", "http://en.wikipedia.org/wiki/Winter", "", "Winter is nice, as long as there's snow right?"], 
          ["spring.jpg", "", "", "Flowers spring back to life in Spring."], 
          ["autumn.jpg", "", "", "Ah the cool breeze of autumn."] 
         ], 
         pause: 2000, //pause between slides (milliseconds) 
         transduration: 1000 //transition duration (milliseconds) 
        }) 
        Demo: 
        
         
        The above slideshow works in all browsers, though in IE browsers that support transitions, a random transition will be applied to it when the page loads. Reload the page to see a different transition being used. 
        FYI the above demo also uses the following CSS to style it: 
        <style type="text/css"> 
         
        #myslideshow{ 
        width: 200px; /*a width should be defined for transition to work*/ 
        border: 5px solid orange; 
        padding: 5px; 
        } 
         
        #myslideshow img{ 
        border-width: 0; 
        } 
         
        </style> 
        
       |