This is just a combination of my previous post on moving and fading elements without JQuery. I just combine the two functions so that I can move elements and at the same time fade them. Here are the links to my previous posts:
1. Simple Javascript Fade In/Out Function without JQuery
2. Simple Javascript Element Moving Function without JQuery
The combination of these two functions:
Here they are! You can also add more functions to this animation Javascript library such as the resizing element function. The easiest way is to use JQuery. But this post is not about replacing JQuery. It's about showing those who are curious about how animation can be done without JQuery in simple Javascript functions.
Read More »
1. Simple Javascript Fade In/Out Function without JQuery
2. Simple Javascript Element Moving Function without JQuery
The combination of these two functions:
<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) { 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) { 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'; } } } var fadeSpeed = 100; function fadeObj(elemName) { this.name = elemName; this.opacity = -1; // -1 indicates a new obj this.timer; this.fadeOut = function(delay) { if (this.opacity == -1) { setOpacity(this.name,10); this.opacity = 10; } var tempObj = this; setTimeout(function(){tempObj.timer = setInterval(function() { fade(tempObj,'out'); },fadeSpeed)},delay); }; this.fadeIn = function(delay) { if (this.opacity == -1) { setOpacity(this.name,0); this.opacity = 0; } var tempObj = this; setTimeout(function(){tempObj.timer = setInterval(function() { fade(tempObj,'in'); },fadeSpeed)},delay); }; } function fade(obj,direction) { if (direction == 'out') { obj.opacity--; if (obj.opacity >= 0) { setOpacity(obj.name,obj.opacity); } else { clearInterval(obj.timer); } } else { obj.opacity++; if (obj.opacity <= 10) { setOpacity(obj.name,obj.opacity); } else { clearInterval(obj.timer); } } } function setOpacity(elemName,value) { // opacity from 0 to 10 document.getElementById(elemName).style.MozOpacity = value/10; document.getElementById(elemName).style.opacity = value/10; document.getElementById(elemName).style.filter = 'alpha(opacity=' + value*10 + ')'; } </script> <body> <span id="animateMe" style="position:absolute;top:100px">Hello</span> <br> <script> var moveElem = new moveObj('animateMe'); var fadeElem = new fadeObj('animateMe'); moveElem.moveHorizontal(200,100); moveElem.moveVertical(100,260); fadeElem.fadeOut(); setTimeout(function() {moveElem.moveHorizontal(100,500);},2000); // run this movement 2000ms later setTimeout(function() {moveElem.moveVertical(260,100);},2000); // run this movement 2000ms later fadeElem.fadeIn(2000); // run this movement 2000ms later </script> </body> </html> |
Here they are! You can also add more functions to this animation Javascript library such as the resizing element function. The easiest way is to use JQuery. But this post is not about replacing JQuery. It's about showing those who are curious about how animation can be done without JQuery in simple Javascript functions.