Results 1 to 3 of 3

Thread: Problems with DD Gradual Image Fader

  1. #1
    Join Date
    Dec 2008
    Posts
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Problems with DD Gradual Image Fader

    Hi all!

    For my portfolio website I'm using the Dynamic Drive Gradual Element Fader, but as you see it isn't working properly, as I want to use the script twice: once on the div and once on the image. The reason? I want the div-background (the orange border and green text) to have a higher base-opacity than the real image.

    I editted the scripts so I could duplicate them succesfully. See beneath:
    divfader.js:
    Code:
    //Gradual Elements Fader- By Dynamic Drive at http://www.dynamicdrive.com
    //Last updated: Nov 8th, 07'
    
    var gradualDivFader={}
    
    gradualDivFader.baseopacity=0.4 //set base opacity when mouse isn't over element (decimal below 1)
    gradualDivFader.increment=0.1 //amount of opacity to increase after each iteration (suggestion: 0.1 or 0.2)
    
    document.write('<style type="text/css">\n') //write out CSS to enable opacity on "gradualFader" class
    document.write('.divfader{filter:progid:DXImageTransform.Microsoft.alpha(opacity='+gradualDivFader.baseopacity*100+'); -moz-opacity:'+gradualDivFader.baseopacity+'; opacity:'+gradualDivFader.baseopacity+';}\n')
    document.write('</style>')
    
    gradualDivFader.setopacity=function(obj, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
    	var targetobject=obj
    	if (targetobject && targetobject.filters && targetobject.filters[0]){ //IE syntax
    		if (typeof targetobject.filters[0].opacity=="number") //IE6
    			targetobject.filters[0].opacity=value*100
    		else //IE 5.5
    			targetobject.style.filter="alpha(opacity="+value*100+")"
    		}
    	else if (targetobject && typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
    		targetobject.style.MozOpacity=value
    	else if (targetobject && typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
    		targetobject.style.opacity=value
    	targetobject.currentopacity=value
    }
    
    gradualDivFader.fadeupdown=function(obj, direction){
    	var targetobject=obj
    	var fadeamount=(direction=="fadeup")? this.increment : -this.increment
    	if (targetobject && (direction=="fadeup" && targetobject.currentopacity<1 || direction=="fadedown" && targetobject.currentopacity>this.baseopacity)){
    		this.setopacity(obj, targetobject.currentopacity+fadeamount)
    		window["opacityfader"+obj._fadeorder]=setTimeout(function(){gradualDivFader.fadeupdown(obj, direction)}, 50)
    	}
    }
    
    gradualDivFader.clearTimer=function(obj){
    if (typeof window["opacityfader"+obj._fadeorder]!="undefined")
    	clearTimeout(window["opacityfader"+obj._fadeorder])
    }
    
    gradualDivFader.isContained=function(m, e){
    	var e=window.event || e
    	var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
    	while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
    	if (c==m)
    		return true
    	else
    		return false
    }
    
    gradualDivFader.fadeinterface=function(obj, e, direction){
    	if (!this.isContained(obj, e)){
    		gradualDivFader.clearTimer(obj)
    		gradualDivFader.fadeupdown(obj, direction)
    	}
    }
    
    gradualDivFader.collectElementbyClass=function(classname){ //Returns an array containing DIVs with specified classname
    	var classnameRE=new RegExp("(^|\\s+)"+classname+"($|\\s+)", "i") //regular expression to screen for classname within element
    	var pieces=[]
    	var alltags=document.all? document.all : document.getElementsByTagName("*")
    	for (var i=0; i<alltags.length; i++){
    		if (typeof alltags[i].className=="string" && alltags[i].className.search(classnameRE)!=-1)
    			pieces[pieces.length]=alltags[i]
    	}
    	return pieces
    }
    
    gradualDivFader.init=function(){
    	var targetobjects=this.collectElementbyClass("divfader")
    	for (var i=0; i<targetobjects.length; i++){
    		targetobjects[i]._fadeorder=i
    		this.setopacity(targetobjects[i], this.baseopacity)
    		targetobjects[i].onmouseover=function(e){gradualDivFader.fadeinterface(this, e, "fadeup")}
    		targetobjects[i].onmouseout=function(e){gradualDivFader.fadeinterface(this, e, "fadedown")}
    	}
    }
    imgfader.js:
    Code:
    //Gradual Elements Fader- By Dynamic Drive at http://www.dynamicdrive.com
    //Last updated: Nov 8th, 07'
    
    var gradualImgFader={}
    
    gradualImgFader.baseopacity=0.1 //set base opacity when mouse isn't over element (decimal below 1)
    gradualImgFader.increment=0.1 //amount of opacity to increase after each iteration (suggestion: 0.1 or 0.2)
    
    document.write('<style type="text/css">\n') //write out CSS to enable opacity on "gradualFader" class
    document.write('.imgfader{filter:progid:DXImageTransform.Microsoft.alpha(opacity='+gradualImgFader.baseopacity*100+'); -moz-opacity:'+gradualImgFader.baseopacity+'; opacity:'+gradualImgFader.baseopacity+';}\n')
    document.write('</style>')
    
    gradualImgFader.setopacity=function(obj, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
    	var targetobject=obj
    	if (targetobject && targetobject.filters && targetobject.filters[0]){ //IE syntax
    		if (typeof targetobject.filters[0].opacity=="number") //IE6
    			targetobject.filters[0].opacity=value*100
    		else //IE 5.5
    			targetobject.style.filter="alpha(opacity="+value*100+")"
    		}
    	else if (targetobject && typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
    		targetobject.style.MozOpacity=value
    	else if (targetobject && typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
    		targetobject.style.opacity=value
    	targetobject.currentopacity=value
    }
    
    gradualImgFader.fadeupdown=function(obj, direction){
    	var targetobject=obj
    	var fadeamount=(direction=="fadeup")? this.increment : -this.increment
    	if (targetobject && (direction=="fadeup" && targetobject.currentopacity<1 || direction=="fadedown" && targetobject.currentopacity>this.baseopacity)){
    		this.setopacity(obj, targetobject.currentopacity+fadeamount)
    		window["opacityfader"+obj._fadeorder]=setTimeout(function(){gradualImgFader.fadeupdown(obj, direction)}, 50)
    	}
    }
    
    gradualImgFader.clearTimer=function(obj){
    if (typeof window["opacityfader"+obj._fadeorder]!="undefined")
    	clearTimeout(window["opacityfader"+obj._fadeorder])
    }
    
    gradualImgFader.isContained=function(m, e){
    	var e=window.event || e
    	var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
    	while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
    	if (c==m)
    		return true
    	else
    		return false
    }
    
    gradualImgFader.fadeinterface=function(obj, e, direction){
    	if (!this.isContained(obj, e)){
    		gradualImgFader.clearTimer(obj)
    		gradualImgFader.fadeupdown(obj, direction)
    	}
    }
    
    gradualImgFader.collectElementbyClass=function(classname){ //Returns an array containing DIVs with specified classname
    	var classnameRE=new RegExp("(^|\\s+)"+classname+"($|\\s+)", "i") //regular expression to screen for classname within element
    	var pieces=[]
    	var alltags=document.all? document.all : document.getElementsByTagName("*")
    	for (var i=0; i<alltags.length; i++){
    		if (typeof alltags[i].className=="string" && alltags[i].className.search(classnameRE)!=-1)
    			pieces[pieces.length]=alltags[i]
    	}
    	return pieces
    }
    
    gradualImgFader.init=function(){
    	var targetobjects=this.collectElementbyClass("imgfader")
    	for (var i=0; i<targetobjects.length; i++){
    		targetobjects[i]._fadeorder=i
    		this.setopacity(targetobjects[i], this.baseopacity)
    		targetobjects[i].onmouseover=function(e){gradualImgFader.fadeinterface(this, e, "fadeup")}
    		targetobjects[i].onmouseout=function(e){gradualImgFader.fadeinterface(this, e, "fadedown")}
    	}
    }
    But, as you can see on my website, the combination doesn't work properly. The browser picks just one of the two scripts: sometimes it's imgfader.js, sometimes it's divfader.js. That way, the image never gets a opacity of 100%: or it sticks at its base-opacity (10%) or the fader ís activated, but the div-opacity stays 40% (its base-opacity).

    As I'm not a JS-pro (I'm more of a noob, really xD) I'm asking you guys if you can help me out. I tried some other forum, but there nobody could help me.

    Many, many, many thanks in advance to anybody helping me out!
    Bram(os)
    Last edited by bramos; 12-20-2008 at 05:40 PM. Reason: Language-error :$

  2. #2
    Join Date
    Dec 2008
    Location
    Portsmouth, UK
    Posts
    1,891
    Thanks
    2
    Thanked 441 Times in 435 Posts

    Default

    as the image is nested in the div wich is faded the image opacity will as the div opacity.

    using my own animator for my convenience

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    
    <head>
      <title></title>
    <style type="text/css">
    /*<![CDATA[*/
    .cls {
      position:relative;width:250px;height:190px;
    }
    .cls IMG {
     position:absolute;left:0px;top:0px;
    
    }
    
    /*]]>*/
    </style>
    
    <script language="JavaScript" type="text/javascript">
    /*<![CDATA[*/
    // Basic Element Animator (11-October-2008) DRAFT
    // by Vic Phillips http://www.vicsjavascripts.org.uk
    
    // To progressively change the Left, Top, Width, Height or Opacity of an element over a specified period of time.
    
    // **** Application Notes
    
    // **** The HTML Code
    //
    // when moving an element the inline or class rule style position of the element should be assigned as
    // 'position:relative;' or 'position:absolute;'
    //
    // The element would normally be assigned a unique ID name.
    //
    
    // **** Executing the Effect(Script)
    //
    // The effect is executed by an event call to function 'zxcBAnimator('left','tst1',20,260,2000);'
    // where:
    // parameter 0 = the mode(see Note 1).                                                                     (string)
    // parameter 1 = the unique ID name or element object.                                                     (string or element object)
    // parameter 2 = the start position of the effect.                                                         (digits, for opacity minimum 0, maximum 100)
    // parameter 3 = the finish position of the effect.                                                        (digits, for opacity minimum 0, maximum 100)
    // parameter 4 = (optional) period of time between the start and finish of the effect in milliseconds.     (digits or defaults to 2000 milliSeconds)
    //
    //  Note 1:  The default units(excepting opacity) are 'px'.
    //  Note 2:  Examples modes: 'left', 'top', 'width', 'height', 'opacity.
    //           For hyphenated modes, the first character after the hyphen must be upper case, all others lower case.
    //  Note 3:  To 'toggle' the effect include '#' in parameter 0.
    //           The first call will set the toggle parameters.
    //           Subsequent calls with '#' in parameter 0 and the same start and finish parameters will 'toggle' the effect.
    //  Note 4:  The function may be re-executed with a different set of parameters (start/finish time or period)
    //           whenever required, say from an onclick/mouseover/out event.
    //           The period parameter will be retained unless re-specified.
    //
    // **** Advanced Applications
    //
    //  It may be required to access the current value of the effect.
    //  The element effect is accessible from the element property
    //  element effect = elementobject[mode.replace(/[-#]/g,'')+'oop'];
    //  where mode is parameter 0 of the initial call.
    //  An array storing the current, start and finish values of the element effect may be accessed
    //  from the element effect.data as fields 0, 1 and 2 respectively
    //
    
    // **** General
    //
    // All variable, function etc. names are prefixed with 'zxc' to minimise conflicts with other JavaScripts.
    // These characters may be changed to characters of choice using global find and replace.
    //
    // The Functional Code(about 1.7K) is best as an External JavaScript.
    //
    // Tested with IE7 and Mozilla FireFox on a PC.
    //
    
    
    
    // **** Functional Code - NO NEED to Change
    
    
    function zxcBAnimator(mde,obj,srt,fin,time){
     if (typeof(obj)=='string'){ obj=document.getElementById(obj); }
     if (!obj||(!srt&&!fin)||srt==fin) return;
     var oop=obj[mde.replace(/[-#]/g,'')+'oop'];
     if (oop){
      clearTimeout(oop.to);
      if (oop.srtfin[0]==srt&&oop.srtfin[1]==fin&&mde.match('#')) oop.update([oop.data[0],(oop.srtfin[0]==oop.data[2])?fin:srt],time);
      else oop.update([srt,fin],time);
     }
     else obj[mde.replace(/[-#]/g,'')+'oop']=new zxcBAnimatorOOP(mde,obj,srt,fin,time);
    }
    
    function zxcBAnimatorOOP(mde,obj,srt,fin,time){
     this.srtfin=[srt,fin];
     this.to=null;
     this.obj=obj;
     this.mde=mde.replace(/[-#]/g,'');
     this.update([srt,fin],time);
    }
    
    zxcBAnimatorOOP.prototype.update=function(srtfin,time){
     this.time=time||this.time||2000;
     this.data=[srtfin[0],srtfin[0],srtfin[1]];
     this.srttime=new Date().getTime();
     this.cng();
    }
    
    zxcBAnimatorOOP.prototype.cng=function(){
     var ms=new Date().getTime()-this.srttime;
     this.data[0]=(this.data[2]-this.data[1])/this.time*ms+this.data[1];
     if (this.mde!='left'&&this.mde!='top'&&this.data[0]<0) this.data[0]=0;
     if (this.mde!='opacity') this.obj.style[this.mde]=this.data[0]+'px';
     else  zxcOpacity(this.obj,this.data[0]);
     if (ms<this.time) this.to=setTimeout(function(oop){return function(){oop.cng();}}(this),10);
     else {
      this.data[0]=this.data[2];
      if (this.mde!='opacity') this.obj.style[this.mde]=this.data[0]+'px';
      else zxcOpacity(this.obj,this.data[0]);
     }
    }
    
    function zxcOpacity(obj,opc){
     if (opc<0||opc>100) return;
     obj.style.filter='alpha(opacity='+opc+')';
     obj.style.opacity=obj.style.MozOpacity=obj.style.KhtmlOpacity=opc/100-.001;
    }
    
    /*]]>*/
    </script>
    <script language="JavaScript" type="text/javascript">
    /*<![CDATA[*/
    // where:
    // parameter 0 = the class name. (string)
    // parameter 1 = the mimimum opacity. (digits)
    // parameter 2 = the maximum opacity of the first image. (digits)
    // parameter 3 = the maximum opacity of the second  image. (digits)
    // parameter 4 = the the speed of the effect. (digits)
    
    function Init(cls,min,max1,max2,time){
     var objs=zxcByClassName(cls,null,'DIV');
     for (var z0=0;z0<objs.length;z0++){
      objs[z0].data=[min,max1,max2,time];
      var imgs=objs[z0].getElementsByTagName('IMG');
      zxcBAnimator('opacity',imgs[0],min-1,min,10);
      zxcBAnimator('opacity',imgs[1],min-1,min,10);
      objs[z0].onmouseover=function(){ MseOO(this,true); }
      objs[z0].onmouseout=function(){ MseOO(this,false); }
     }
    }
    
    function MseOO(obj,ud){
     var imgs=obj.getElementsByTagName('IMG');
     var oop=imgs[0].opacityoop;
     zxcBAnimator('opacity',imgs[0],oop.data[0],ud?obj.data[1]:obj.data[0],obj.data[3]);
     var oop=imgs[1].opacityoop;
     zxcBAnimator('opacity',imgs[1],oop.data[0],ud?obj.data[2]:obj.data[0],obj.data[3]);
    }
    
    function zxcByClassName(nme,el,tag){
     if (typeof(el)=='string') el=document.getElementById(el);
     el=el||document;
     for (var tag=tag||'*',reg=new RegExp('(^|\\s)'+nme+'(\\s|$)'),els=el.getElementsByTagName(tag),ary=[],z0=0; z0<els.length;z0++){
      if(reg.test(els[z0].className)) ary.push(els[z0]);
     }
     return ary;
    }
    
    /*]]>*/
    </script>
    </head>
    
    <body onload="Init('cls',20,50,100,1000);">
    <div class="cls" >
    <img src="http://dev.aplus-webdesigns.nl/peerlingspictures/images/layout/background/aircraft.gif" />
    <img class="index imgfader" src="http://dev.aplus-webdesigns.nl/peerlingspictures/images/layout/photo/aircraft.gif" />
    </div>
    </body>
    
    </html>

  3. #3
    Join Date
    Dec 2008
    Posts
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    I'll check it out tonight, but I think it will work great! Thanks a lot!

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •