Javascript image transition / rotation issues with FireFox but not Internet Explorer

Discussion in 'JavaScript' started by smadadi, Nov 12, 2007.

  1. #1
    Hello,

    I am experiencing an error with an image blending / rotation script. It happens only in firefox 2 but not in IE 6.

    You can see a sample of the transition here:

    http://test.sureloc.ca/template.html

    The image in the top banner section is supposed to rotate / transition between three different images. In FireFox the first set of rotations goes smoothly as expected, but once it fades from image 1-2, 2-3 and goes back from 3-1 it shows image 1 at full opacity for a split second before the smooth transition begins. This results in a jerky feel to the transition. This does not happen when viewed in internet explorer 6.

    Any help would be greatly appreciated.

    Here is the javascript I am using:

    function opacity(id, opacStart, opacEnd, millisec) {
    	//speed for each frame
    	var speed = Math.round(millisec / 100);
    	var timer = 0;
    
    	//determine the direction for the blending, if start and end are the same nothing happens
    	if(opacStart > opacEnd) {
    		for(i = opacStart; i >= opacEnd; i--) {
    			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
    			timer++;
    		}
    	} else if(opacStart < opacEnd) {
    		for(i = opacStart; i <= opacEnd; i++)
    			{
    			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
    			timer++;
    		}
    	}
    }
    
    //change the opacity for different browsers
    function changeOpac(opacity, id) {
    	var object = document.getElementById(id).style; 
    	object.opacity = (opacity / 100);
    	object.MozOpacity = (opacity / 100);
    	object.KhtmlOpacity = (opacity / 100);
    	object.filter = "alpha(opacity=" + opacity + ")";
    }
    
    function shiftOpacity(id, millisec) {
    	//if an element is invisible, make it visible, else make it ivisible
    	if(document.getElementById(id).style.opacity == 0) {
    		opacity(id, 0, 100, millisec);
    	} else {
    		opacity(id, 100, 0, millisec);
    	}
    }
    
    function blendimage(divid, imageid, imagefile, millisec) {
    	var speed = Math.round(millisec / 100);
    	var timer = 0;
    	
    	//set the current image as background
    	document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")";
    	
    	//make image transparent
    	changeOpac(0, imageid);
    	
    	//make new image
    	document.getElementById(imageid).src = imagefile;
    
    	//fade in image
    	for(i = 0; i <= 100; i++) {
    		setTimeout("changeOpac(" + i + ",'" + imageid + "')",(timer * speed));
    		timer++;
    	}
    }
    
    function currentOpac(id, opacEnd, millisec) {
    	//standard opacity is 100
    	var currentOpac = 100;
    	
    	//if the element has an opacity set, get it
    	if(document.getElementById(id).style.opacity < 100) {
    		currentOpac = document.getElementById(id).style.opacity * 100;
    	}
    
    	//call for the function that changes the opacity
    	opacity(id, currentOpac, opacEnd, millisec)
    }
    
    		  var curcanvas="test"
    		  var pause=3000
    		  var curimageindex = 0;
    		  var fadeimages=new Array()
    		  //SET IMAGE PATHS. Extend or contract array as needed
    			
    		  fadeimages[0]="images/tp-2-1.jpg"
    		  fadeimages[1]="images/tp-2-2.jpg"
    		  fadeimages[2]="images/tp-2-3.jpg"		  
    		  function rotateimage(){
    			blendimage("test", "bigimage", fadeimages[curimageindex], 1100) 
    			curimageindex=(curimageindex<fadeimages.length-1)? curimageindex+1 : 0
    		  }
    			setInterval("rotateimage()",pause)
    Code (markup):
     
    smadadi, Nov 12, 2007 IP