Results 1 to 2 of 2

Thread: elastic trail script

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

    Default elastic trail script

    1) Script Title: elastic trail script

    2) Script URL (on DD): http://www.dynamicdrive.com/dynamicindex13/trailer2.htm

    3) Describe problem: when you scroll down the pag the trail is offset by the amount scrolled it does reaquire the correct mouse pos.

    also i was wondering how i would add a sound that plays when the object is chasing the mouse and stops playing when it gets to the mouse and continues like this ie you had a car trailing the mouse and while it is chasing the mouse it plays an engine sound which stops playing within a radius of the mouse and tires screeching sound plays once inside the radius that stops once the object gets to the mouse cursor position.

  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

    That script is way out of date. Put this in the head of your page:

    Code:
    <style type="text/css">
    .dot {
    position: fixed;
    }
    #dot0 {
    visibility: hidden;
    }
    </style>
    Put this right after the <body> tag:

    Code:
    <script type="text/javascript">
    /*
    Elastic Trail script (By Philip Winston @ pwinston@yahoo.com, URL: http://www.geocities.com/pwinston/)
    TOS featured on Dynamicdrive.com
    For this and 100's more DHTML scripts, visit http://dynamicdrive.com
    Updated by jscheuer1 in http://dynamicdrive.com/forums for modern browsers & DOCTYPES
    */
    
    function elastic_trail(){
    
    var nDots = 7;
    var dotSrc = 'bullet.gif';
    
    var Xpos = 0;
    var Ypos = 0;
    
      // fixed time step, no relation to real time
    var DELTAT = .01;
      // size of one spring in pixels
    var SEGLEN = 10;
      // spring constant, stiffness of springs
    var SPRINGK = 10;
      // all the physics is bogus, just picked stuff to
      // make it look okay
    var MASS = 1;
    // Positive XGRAVITY pulls right, negative pulls left
    // Positive YGRAVITY pulls down, negative up
    var XGRAVITY = 0;
    var YGRAVITY = 50;
    // RESISTANCE determines a slowing force proportional to velocity
    var RESISTANCE = 10;
      // stopping criterea to prevent endless jittering
      // doesn't work when sitting on bottom since floor
      // doesn't push back so acceleration always as big
      // as gravity
    var STOPVEL = 0.1;
    var STOPACC = 0.1;
    var DOTSIZE = 11;
      // BOUNCE is percent of velocity retained when 
      // bouncing off a wall
    var BOUNCE = 0.75;
    
    /////////////////Stop Editing the Script///////////////
    
    for (var i = nDots - 1; i > -1; --i)
    
    with(document){
    write('<div class="dot" id="dot' + i +'">\n');
    write('<img src="' + dotSrc + '" height="' + DOTSIZE + '" width="' + DOTSIZE + '" alt="">\n');
    write('</div>\n');
    }
    
    /*@cc_on @*/
    /*@if(@_jscript_version >= 5)
    if(navigator.appVersion.replace(/^.*MSIE (\d+).*$/, '$1') <= 6){
     var fixedIE = function(tl, n){
     var sc='scroll'+tl, d=document, c='compatMode';
     return d[c] && d[c]=='CSS1Compat'? d.documentElement[sc]+n+'px' : d.body[sc]+n+'px';
     };
     document.write('<style type="text/css">.dot {position: absolute;}body {background: url(foo) fixed;}<\/style>');
    };
    @end @*/
    
    var iecompattest=function(){
    return (document.compatMode && document.compatMode.indexOf("CSS")!=-1)? document.documentElement : document.body
    }
    
    var PX = document.layers? '' : 'px';
    
    elastic_trail.prototype.dot=function(i) 
    {
        this.X = Xpos;
        this.Y = Ypos;
        this.dx = 0;
        this.dy = 0;
        if (document.layers) 	
           this.obj = document['dot' + i];
        else if (document.all)
           this.obj = document.all['dot' + i].style;
        else if (document.getElementById)
           this.obj = document.getElementById('dot' + i).style;
        else
        return;
    }
    
    var dots = new Array();
    
        for (var i = 0; i < nDots; i++)
            dots[i] = new this.dot(i);    
        
        // set their positions
        for (i = 0; i < nDots; i++) {
            dots[i].obj.left = typeof fixedIE == 'function' ? fixedIE('Left', dots[i].X) : Math.round(dots[i].X) + PX;
            dots[i].obj.top = typeof fixedIE == 'function' ? fixedIE('Top', dots[i].Y) : dots[i].Y + PX;
        }
        var cacheobj=this;
            setInterval(function(){cacheobj.animate();}, 20);
    
    // just save mouse position for animate() to use
    function MoveHandler(e){
        Xpos = e.pageX - pageXOffset;
        Ypos = e.pageY - pageYOffset;	  
        return true;
    }
    
    // just save mouse position for animate() to use
    function MoveHandlerIE() {
        Xpos = window.event.x;
        Ypos = window.event.y;	  
    }
    
    if (document.addEventListener)
        document.addEventListener('mousemove', MoveHandler, false);
    else if (document.attachEvent)
        document.attachEvent('onmousemove', MoveHandlerIE);
    else if (document.captureEvents){
        document.captureEvents(Event.MOUSEMOVE);
        document.onmousemove = MoveHandler;
    }
    
    
    elastic_trail.prototype.vec=function(X, Y)
    {
        this.X = X;
        this.Y = Y;
    }
    
    // adds force in X and Y to spring for dot[i] on dot[j]
    elastic_trail.prototype.springForce=function(i, j, spring)
    {
        var dx = (dots[i].X - dots[j].X);
        var dy = (dots[i].Y - dots[j].Y);
        var len = Math.sqrt(dx*dx + dy*dy);
        if (len > SEGLEN) {
            var springF = SPRINGK * (len - SEGLEN);
            spring.X += (dx / len) * springF;
            spring.Y += (dy / len) * springF;
        }
    }
    
    
    elastic_trail.prototype.animate=function() {	
        // dots[0] follows the mouse,
        // though no dot is drawn there
        var start = 0;
            dots[0].X = Xpos;
            dots[0].Y = Ypos;	
            start = 1;
        
        for (var i = start ; i < nDots; i++ ) {
            
            var spring = new this.vec(0, 0);
            if (i > 0) {
                this.springForce(i-1, i, spring);
            }
            if (i < (nDots - 1)) {
                this.springForce(i+1, i, spring);
            }
            
            // air resisitance/friction
            var resist = new this.vec(-dots[i].dx * RESISTANCE,
                -dots[i].dy * RESISTANCE);
            
            // compute new accel, including gravity
            var accel = new this.vec((spring.X + resist.X)/MASS + XGRAVITY,
                (spring.Y + resist.Y)/ MASS + YGRAVITY);
            
            // compute new velocity
            dots[i].dx += (DELTAT * accel.X);
            dots[i].dy += (DELTAT * accel.Y);
            
            // stop dead so it doesn't jitter when nearly still
            if (Math.abs(dots[i].dx) < STOPVEL &&
                Math.abs(dots[i].dy) < STOPVEL &&
                Math.abs(accel.X) < STOPACC &&
                Math.abs(accel.Y) < STOPACC) {
                dots[i].dx = 0;
                dots[i].dy = 0;
            }
            
            // move to new position
            dots[i].X += dots[i].dx;
            dots[i].Y += dots[i].dy;
            
            // get size of window
            var height, width;
            if (window.innerWidth) {
                height = window.innerHeight;
                width = window.innerWidth;
            } else {	
                height = iecompattest().clientHeight - Math.ceil(DOTSIZE/2);
                width = iecompattest().clientWidth;
            }
            
            // bounce off 3 walls (leave ceiling open)
            if (dots[i].Y >=  height - DOTSIZE - 1) {
                if (dots[i].dy > 0) {
                    dots[i].dy = BOUNCE * -dots[i].dy;
                }
                dots[i].Y = height - DOTSIZE - 1;
            }
            if (dots[i].X >= width - DOTSIZE) {
                if (dots[i].dx > 0) {
                    dots[i].dx = BOUNCE * -dots[i].dx;
                }
                dots[i].X = width - DOTSIZE - 1;
            }
            if (dots[i].X < 0) {
                if (dots[i].dx < 0) {
                    dots[i].dx = BOUNCE * -dots[i].dx;
                }
                dots[i].X = 0;
            }
            
            // move img to new position
            dots[i].obj.left = typeof fixedIE == 'function' ? fixedIE('Left', dots[i].X) : Math.round(dots[i].X) + PX;
            dots[i].obj.top = typeof fixedIE == 'function' ? fixedIE('Top', dots[i].Y) : dots[i].Y + PX;
        }
    }
    }
    new elastic_trail();
    </script>
    Do not use anything from the old script or its markup. That will fix the problems with scrolling. As far as the audio, I haven't a clue.


    Note: If you want a background image for the page in IE 6, replace foo in this line:

    Code:
     document.write('<style type="text/css">.dot {position: absolute;}body {background: url(foo) fixed;}<\/style>');
    with the quoted URL of your background image, ex:

    Code:
     document.write('<style type="text/css">.dot {position: absolute;}body {background: url("some.jpg") fixed;}<\/style>');
    Last edited by jscheuer1; 10-30-2008 at 03:24 PM. Reason: add detail on quoting for IE6 BG image.
    - John
    ________________________

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

  3. The Following User Says Thank You to jscheuer1 For This Useful Post:

    john criten (10-30-2008)

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
  •