This is similar with my previous post except this is for moving HTML elements instead of fading them.
Note: Again, this is not to replace the existing JQuery codes. This is just for those who are curious about how things are moved with only Javascript codes without JQuery.
Here are the codes:
<html> <script> var moveSpeed = 100; // interval in ms, smaller means faster var moveStep = 10; // pixel count in every move, bigger means faster function moveObj(elemID) { this.id = elemID; this.x = -1; this.y = -1; this.targetX; this.targetY; this.timerX; this.timerY; this.directionX; this.directionY; this.moveHorizontal = function(x1,x2,delay) { clearInterval(this.timerX); // cancel earlier movement if any x2<x1? this.directionX = 'left':this.directionX = 'right'; this.x = x1; document.getElementById(this.id).style.left = x1+'px'; this.targetX = x2; var tempObj = this; this.timerX = setInterval(function() { move(tempObj,'hor'); },moveSpeed); }; this.moveVertical = function(y1,y2,delay) { clearInterval(this.timerY); // cancel earlier movement if any y2<y1? this.directionY = 'up':this.directionY = 'down'; this.y = y1; document.getElementById(this.id).style.top = y1+'px'; this.targetY = y2; var tempObj = this; this.timerY = setInterval(function() { move(tempObj,'ver'); },moveSpeed); }; } function move(obj,movement) { if (movement == 'hor') { obj.directionX == 'left'? obj.x-=moveStep:obj.x+=moveStep; //You can change it to non-linear movement here by applying formula instead just adding/subtracting in a linear fashion if ((obj.directionX == 'left' && obj.x < obj.targetX) || (obj.directionX == 'right' && obj.x > obj.targetX)) { clearInterval(obj.timerX); } else { document.getElementById(obj.id).style.left = obj.x + 'px'; } } else { obj.directionY == 'up'? obj.y-=moveStep:obj.y+=moveStep; //You can change it to non-linear movement here as above if ((obj.directionY == 'up' && obj.y < obj.targetY) || (obj.directionY == 'down' && obj.y > obj.targetY)) { clearInterval(obj.timerY); } else { document.getElementById(obj.id).style.top = obj.y + 'px'; } } } </script> <body> <span id="moveMe" style="position:absolute;top:100px">Hello</span> <br> <script> var helloElem = new moveObj('moveMe'); helloElem.moveHorizontal(200,100,0); helloElem.moveVertical(100,260,0); setTimeout(function() {helloElem.moveHorizontal(100,500);},2000); // run this movement 2000ms later setTimeout(function() {helloElem.moveVertical(260,100);},6000); // run this movement 6000ms later setTimeout(function() {helloElem.moveHorizontal(500,100);},6000); // run this movement 6000ms later </script> </body> </html> |
You can try it out and see if it works almost like JQuery. With these codes, you have more control over the speed. You can change it to non-linear movement like JQuery with adding/subtracting pixel movement with a non-linear formula.
I have also combined the moving and fading function together to make it more interesting:
http://webtrick101.blogspot.com/2014/12/simple-javascript-to-move-and-fade.html
No comments:
Post a Comment