Results 1 to 3 of 3

Thread: Dynamic Animation: Making it CrossBrowser

  1. #1
    Join Date
    May 2007
    Posts
    5
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Dynamic Animation: Making it CrossBrowser

    Hey All,

    There's this awesome dynamic animiation script that was released in FrontPage98 (Not that I use such a hideous tool), and I was wondering if it was at all possible to make it cross-browser.

    From my understanding it only works in IE.


    Here's the Code Below:
    The Script:
    Code:
    <script LANGUAGE="JavaScript" FPTYPE="mydynamicanimation">
    
      dynamicanimAttr = "mydynamicanimation"
      animateElements = new Array()
      currentElement = 0
      speed = 0
      stepsZoom = 8
      stepsWord = 8
      stepsFly = 12
      stepsSpiral = 25
      steps = stepsZoom
      step = 0
      outString = ""
      function mydynAnimation()
      {
        var ms = navigator.appVersion.indexOf("MSIE")
        ie4 = (ms>0) && (parseInt(navigator.appVersion.substring(ms+5, ms+6)) >= 4)
        if(!ie4)
        {
          if((navigator.appName == "Netscape") &&
             (parseInt(navigator.appVersion.substring(0, 1)) >= 4))
          {
            for (index=document.layers.length-1; index >= 0; index--)
            {
                layer=document.layers[index]
                if (layer.left==10000)
                    layer.left=0
            }
          }
          return
        }
        for (index=document.all.length-1; index >= document.body.sourceIndex; index--)
        {
          el = document.all[index]
          animation = el.getAttribute(dynamicanimAttr, false)
          if(null != animation)
          {
            if(animation == "dropWord" || animation == "flyTopRightWord" || animation == "flyBottomRightWord")
            {
              ih = el.innerHTML
              outString = ""
              i1 = 0
              iend = ih.length
              while(true)
              {
                i2 = startWord(ih, i1)
                if(i2 == -1)
                  i2 = iend
                outWord(ih, i1, i2, false, "")
                if(i2 == iend)
                  break
                i1 = i2
                i2 = endWord(ih, i1)
                if(i2 == -1)
                  i2 = iend
                outWord(ih, i1, i2, true, animation)
                if(i2 == iend)
                  break
                i1 = i2
              }
              document.all[index].innerHTML = outString
              document.all[index].style.posLeft = 0
              document.all[index].setAttribute(dynamicanimAttr, null)
            }
            if(animation == "zoomIn" || animation == "zoomOut")
            {
              ih = el.innerHTML
              outString = "<SPAN " + dynamicanimAttr + "=\"" + animation + "\" style=\"position: relative; left: 10000;\">"
              outString += ih
              outString += "</SPAN>"
              document.all[index].innerHTML = outString
              document.all[index].style.posLeft = 0
              document.all[index].setAttribute(dynamicanimAttr, null)
            }
          }
        }
        i = 0
        for (index=document.body.sourceIndex; index < document.all.length; index++)
        {
          el = document.all[index]
          animation = el.getAttribute(dynamicanimAttr, false)
          if (null != animation)
          {
            if(animation == "flyLeft")
            {
              el.style.posLeft = 10000-offsetLeft(el)-el.offsetWidth
              el.style.posTop = 0
            }
            else if(animation == "flyRight")
            {
              el.style.posLeft = 10000-offsetLeft(el)+document.body.offsetWidth
              el.style.posTop = 0
            }
            else if(animation == "flyTop" || animation == "dropWord")
            {
              el.style.posLeft = 0
              el.style.posTop = document.body.scrollTop-offsetTop(el)-el.offsetHeight
            }
            else if(animation == "flyBottom")
            {
              el.style.posLeft = 0
              el.style.posTop = document.body.scrollTop-offsetTop(el)+document.body.offsetHeight
            }
            else if(animation == "flyTopLeft")
            {
              el.style.posLeft = 10000-offsetLeft(el)-el.offsetWidth
              el.style.posTop = document.body.scrollTop-offsetTop(el)-el.offsetHeight
            }
            else if(animation == "flyTopRight" || animation == "flyTopRightWord")
            {
              el.style.posLeft = 10000-offsetLeft(el)+document.body.offsetWidth
              el.style.posTop = document.body.scrollTop-offsetTop(el)-el.offsetHeight
            }
            else if(animation == "flyBottomLeft")
            {
              el.style.posLeft = 10000-offsetLeft(el)-el.offsetWidth
              el.style.posTop = document.body.scrollTop-offsetTop(el)+document.body.offsetHeight
            }
            else if(animation == "flyBottomRight" || animation == "flyBottomRightWord")
            {
              el.style.posLeft = 10000-offsetLeft(el)+document.body.offsetWidth
              el.style.posTop = document.body.scrollTop-offsetTop(el)+document.body.offsetHeight
            }
            else if(animation == "spiral")
            {
              el.style.posLeft = 10000-offsetLeft(el)-el.offsetWidth
              el.style.posTop = document.body.scrollTop-offsetTop(el)-el.offsetHeight
            }
            else if(animation == "zoomIn")
            {
              el.style.posLeft = 10000
              el.style.posTop = 0
            }
            else if(animation == "zoomOut")
            {
              el.style.posLeft = 10000
              el.style.posTop = 0
            }
            else
            {
              el.style.posLeft = 10000-offsetLeft(el)-el.offsetWidth
              el.style.posTop = 0
            }
            el.initLeft = el.style.posLeft
            el.initTop = el.style.posTop
            animateElements[i++] = el
          }
        }
        window.setTimeout("animate();", speed)
      }
      function offsetLeft(el)
      {
        x = el.offsetLeft
        for (e = el.offsetParent; e; e = e.offsetParent)
          x += e.offsetLeft;
        return x
      } 
      function offsetTop(el)
      {
        y = el.offsetTop
        for (e = el.offsetParent; e; e = e.offsetParent)
          y += e.offsetTop;
        return y
      } 
      function startWord(ih, i)
      {
        for(tag = false; i < ih.length; i++)
        {
          c = ih.charAt(i)
          if(c == '<')
            tag = true
          if(!tag)
            return i
          if(c == '>')
            tag = false
        }
        return -1
      }
      function endWord(ih, i)
      {
        nonSpace = false
        space = false
        while(i < ih.length)
        {
          c = ih.charAt(i)
          if(c != ' ')
            nonSpace = true
          if(nonSpace && c == ' ')
            space = true
          if(c == '<')
            return i
          if(space && c != ' ')
            return i
          i++
        }
        return -1
      }
      function outWord(ih, i1, i2, dyn, anim)
      {
        if(dyn)
          outString += "<SPAN " + dynamicanimAttr + "=\"" + anim + "\" style=\"position: relative; left: 10000;\">"
        outString += ih.substring(i1, i2)
        if(dyn)
          outString += "</SPAN>"
      }
      function animate()
      {
        el = animateElements[currentElement]
        animation = el.getAttribute(dynamicanimAttr, false)
        step++
        if(animation == "spiral")
        {
          steps = stepsSpiral
          v = step/steps
          rf = 1.0 - v
          t = v * 2.0*Math.PI
          rx = Math.max(Math.abs(el.initLeft), 300)
          ry = Math.max(Math.abs(el.initTop),  300)
          el.style.posLeft = Math.ceil(-rf*Math.cos(t)*rx)
          el.style.posTop  = Math.ceil(-rf*Math.sin(t)*ry)
        }
        else if(animation == "zoomIn")
        {
          steps = stepsZoom
          el.style.fontSize = Math.ceil(50+50*step/steps) + "%"
          el.style.posLeft = 0
        }
        else if(animation == "zoomOut")
        {
          steps = stepsZoom
          el.style.fontSize = Math.ceil(100+200*(steps-step)/steps) + "%"
          el.style.posLeft = 0
        }
        else
        {
          steps = stepsFly
          if(animation == "dropWord" || animation == "flyTopRightWord" || animation == "flyBottomRightWord")
            steps = stepsWord
          dl = el.initLeft / steps
          dt = el.initTop  / steps
          el.style.posLeft = el.style.posLeft - dl
          el.style.posTop = el.style.posTop - dt
        }
        if (step >= steps) 
        {
          el.style.posLeft = 0
          el.style.posTop = 0
          currentElement++
          step = 0
    
        }
        if(currentElement < animateElements.length)
          window.setTimeout("animate();", speed)
      }
    //-->
    </script>
    The Body Onload:
    Code:
    onload="mydynAnimation()"
    The Code to implement it:
    Code:
    mydynamicanimation="flyTopRight" style="position: relative !important; left: 10000 !important"

  2. #2
    Join Date
    Feb 2007
    Location
    England
    Posts
    254
    Thanks
    0
    Thanked 5 Times in 5 Posts

    Default

    Wow, that's a long script to rewrite. I would suggest trying some of the established scripts like Moo/moo tools, Dojo, Prototype, etc. They should have what you need.

    As for the script, you *could* rewrite it, but it would be a lot of work.


  3. #3
    Join Date
    Jun 2005
    Location
    英国
    Posts
    11,876
    Thanks
    1
    Thanked 180 Times in 172 Posts
    Blog Entries
    2

    Default

    Agreed, go MooFX or D&#244;j&#244;.
    Twey | I understand English | 日本語が分かります | mi jimpe fi le jbobau | mi esperanton komprenas | je comprends français | entiendo español | tôi ít hiểu tiếng Việt | ich verstehe ein bisschen Deutsch | beware XHTML | common coding mistakes | tutorials | various stuff | argh PHP!

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
  •