Velocitr, velocity and drag helper

I needed a way of applying velocity and drag to a new UI I am putting together, much like the one I built in to jQuery.kinetic. So I have pulled it out in to a simple reusable object.

I have called it Velocitr and it’s source is on Github.

Usage

// create an instance
var v = new Velocitr();
// set starting point
v.move(30, true);
// move
v.move(50);
// get velocity
assert(v.velocity).equals(20);
// apply drag
v.drag = 0.9 // => default
v.decelerate()
assert(v.velocity).equals(18);

Chaining

var v = new Velocitr();
v.move(30, true)
 .move(60)
 .decelerate();
assert(v.velocity).equals(27);

Tests

It comes with a suite of tests which are written with the help of QUnit and Pavlov and can be found in the test/ folder.

I have written a few QUnit tests but this is the first time I used Pavlov and I much prefer the syntax.

Here’s a little taster.

pavlov.specify('Velocitr', function(){

  describe('velocitr', function(){

    it('should cap the velocity', function(){
      var v = new Velocitr();
      v.set(30);
      assert(v.velocity).equals(30);
      v.set(100);
      assert(v.velocity).equals(40);
      v.set(-100);
      assert(v.velocity).equals(-40);
    });
    it('should create positive velocity when moved forward', function(){
      var v = new Velocitr();
      v.move(30);
      assert(v.velocity).equals(30);
      v.move(-30, true);
      v.move(-10);
      assert(v.velocity).equals(20);
    });
    it('should be able to chain', function(){
      var v = new Velocitr();
      v.move(30, true)
          .move(60)
          .decelerate();
      assert(v.velocity).equals(27);
    });

  });

});

Enjoy

I thought this might be useful for others wanting a similar functionality.

Work with me

Dave is a cohesive team member, widely popular with his colleagues and always inspiring quality, exploration and innovation. One of the true ‘greats’ we’ve had the pleasure to work with

I believe in community, in inspiration and creativity. I believe it's an inspired team and a laser focus on the user's experiece that will produce the best results. I want to help frontend teams live inspired, be productive and scale better.