Results 1 to 3 of 3

Thread: Ajax fade opacity in Safari

  1. #1
    Join Date
    Jul 2008
    Location
    Philippines
    Posts
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Ajax fade opacity in Safari

    Hi Guys,

    I'm new here.

    I got this code here form this site. This code fades-in something gradually (a div, image, etc.) when you mouseover a link. So I edited it, so that when you mouseout of the link it fades out. problem is it's working fine for IE and Mozilla, but it's not working for Safari. Well the fade out in safari is working smoothly, but the fade in part is not.

    Here's the code:

    <html>
    <head>
    <style type="text/css">

    .gradualshine{
    filter:alpha(opacity=0);
    -moz-opacity:0.0;
    opacity:0;
    }

    </style>

    <script type="text/javascript">

    /***********************************************
    * Gradual Highlight image script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
    * This notice MUST stay intact for legal use
    * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
    ***********************************************/

    var baseopacity=0

    function slowhigh(which2){
    imgobj=which2
    browserdetect=which2.filters? "ie" : typeof which2.style.MozOpacity=="string"? "mozilla" : ""
    instantset(baseopacity)
    highlighting=setInterval("gradualfade(imgobj)",30)
    }

    function slowlow(which2){
    cleartimer()
    //instantset(100)
    highlighting=setInterval("gradualfadeout(imgobj)",30)
    }

    function instantset(degree){
    if (browserdetect=="mozilla")
    imgobj.style.MozOpacity=degree/100
    else if (browserdetect=="ie")
    imgobj.filters.alpha.opacity=degree
    else if (this.navigator.vendor.indexOf('Apple') == 0)
    imgobj.style.opacity=degree/100
    }

    function cleartimer(){
    if (window.highlighting) clearInterval(highlighting)
    }

    function gradualfade(cur2){
    if (browserdetect=="mozilla" && cur2.style.MozOpacity<.8)
    cur2.style.MozOpacity=Math.min(parseFloat(cur2.style.MozOpacity)+0.1, 0.99)
    else if (browserdetect=="ie" && cur2.filters.alpha.opacity<80)
    cur2.filters.alpha.opacity+=10
    else if (this.navigator.vendor.indexOf('Apple') == 0 && cur2.style.opacity < .9)
    cur2.style.opacity+=.5 //////////this is the part where everything went wrong
    else if (window.highlighting)
    clearInterval(highlighting)
    }

    function gradualfadeout(cur2){
    if (browserdetect=="mozilla" && cur2.style.MozOpacity>0)
    cur2.style.MozOpacity=Math.min(parseFloat(cur2.style.MozOpacity)-0.1, 0.9)
    else if (browserdetect=="ie" && cur2.filters.alpha.opacity>0)
    cur2.filters.alpha.opacity-=10
    else if (this.navigator.vendor.indexOf('Apple') == 0 && cur2.style.opacity > 0)
    cur2.style.opacity-=.1
    else if (window.highlighting)
    clearInterval(highlighting)
    }

    </script>

    </head>

    <body>

    <table>
    <tr>
    <td width="276" height="110" background="http://www.google.com/intl/en_ALL/images/logo.gif">
    <div id="test" class="gradualshine" style="width:600px; height:450px; font-weight:bold; color:#FFFFFF; background:#000000;"> test caption </div>
    </td>
    </tr>
    </table>

    <a href="#" onMouseover="slowhigh(test)" onMouseout="slowlow(test)">test</a><br>

    </body>
    </html>

    It seems in the gradualfade function, the line :
    else if (this.navigator.vendor.indexOf('Apple') == 0 && cur2.style.opacity < .9)
    cur2.style.opacity+=.5

    is not looping, it should add .5 to the opacity until it exceeds .9

    The weird thing is, in the gradualfadeout function, it's working perfectly.

    Any input would be appreciated.

  2. #2
    Join Date
    Mar 2005
    Location
    SE PA USA
    Posts
    30,495
    Thanks
    82
    Thanked 3,449 Times in 3,410 Posts
    Blog Entries
    12

    Default

    Opacity is a string. If you add to it - say it was 0 and you add .5, it becomes 0.5, but if you then add .5 again, it becomes 0.5.5 - no longer a valid value or even a number. When you subtract though, the browser will convert it to a number automatically if at all possible. Anyway, this works:

    Code:
    <html>
    <head>
    <style type="text/css">
    
    .gradualshine{
    filter:alpha(opacity=0);
    -moz-opacity:0.0;
    opacity:0;
    }
    
    </style>
    
    <script type="text/javascript">
    
    /***********************************************
    * Gradual Highlight image script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
    * This notice MUST stay intact for legal use
    * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
    ***********************************************/
    
    var baseopacity=0
    
    function slowhigh(which2){
    imgobj=which2
    browserdetect=which2.filters? "ie" : typeof which2.style.MozOpacity=="string"? "mozilla" : typeof which2.style.opacity=="string"? "other" : ""
    instantset(baseopacity)
    highlighting=setInterval("gradualfade(imgobj)",30)
    }
    
    function slowlow(which2){
    cleartimer()
    //instantset(100)
    highlighting=setInterval("gradualfadeout(imgobj)",30)
    }
    
    function instantset(degree){
    if (browserdetect=="mozilla")
    imgobj.style.MozOpacity=degree/100
    else if (browserdetect=="ie")
    imgobj.filters.alpha.opacity=degree
    else if (browserdetect=="other")
    imgobj.style.opacity=degree/100
    }
    
    function cleartimer(){
    if (window.highlighting) clearInterval(highlighting)
    }
    
    function gradualfade(cur2){
    if (browserdetect=="mozilla" && cur2.style.MozOpacity<.8)
    cur2.style.MozOpacity=Math.min(parseFloat(cur2.style.MozOpacity)+0.1, 0.99)
    else if (browserdetect=="ie" && cur2.filters.alpha.opacity<80)
    cur2.filters.alpha.opacity+=10
    else if (browserdetect=="other" && cur2.style.opacity < .8)
    cur2.style.opacity=Math.min(parseFloat(cur2.style.opacity)+0.1, 0.99)
    else if (window.highlighting)
    clearInterval(highlighting)
    }
    
    function gradualfadeout(cur2){
    if (browserdetect=="mozilla" && cur2.style.MozOpacity>0)
    cur2.style.MozOpacity=Math.min(parseFloat(cur2.style.MozOpacity)-0.1, 0.9)
    else if (browserdetect=="ie" && cur2.filters.alpha.opacity>0)
    cur2.filters.alpha.opacity-=10
    else if (browserdetect=="other" && cur2.style.opacity > 0)
    cur2.style.opacity-=.1
    else if (window.highlighting)
    clearInterval(highlighting)
    }
    
    </script>
    
    </head>
    
    <body>
    
    <table>
    <tr>
    <td width="276" height="110" background="http://www.google.com/intl/en_ALL/images/logo.gif">
    <div id="test" class="gradualshine" style="width:600px; height:450px; font-weight:bold; color:#FFFFFF; background:#000000;"> test caption </div>
    </td>
    </tr>
    </table>
    
    <a href="#" onMouseover="slowhigh(test)" onMouseout="slowlow(test)">test</a><br>
    
    </body>
    </html>
    - John
    ________________________

    Show Additional Thanks: International Rescue Committee - Donate or: The Ocean Conservancy - Donate or: PayPal - Donate

  3. #3
    Join Date
    Jul 2008
    Location
    Philippines
    Posts
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    Wow, that's some new insight. That explains why the gradualfadeout works because its subtracting.

    Thanks, man. Really appreciate the help.

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
  •