Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
62
rated 0 times [  68] [ 6]  / answers: 1 / hits: 17236  / 8 Years ago, thu, july 21, 2016, 12:00:00

I've been trying to find a pure JavaScript ease implementation for some hours, but couldn't find any. The ones that came close didn't make any sense. All I could find was bunch of easing functions without implementation.



For example, functions like these:



function linear(time, begin, change, duration) {
return change * time / duration + begin;
}

function easeInQuad(t) {
return t*t
},

function easeOutQuad(t) {
return t*(2-t)
},


One of the things that trouble me is where does fps come in to play? It's directly related to the duration. I've seen no mention of it.



How would I implement the above easing functions in the following animation?



JSFiddle





var box = document.getElementById(box);

var fps = 60;
var duration = 2; // seconds
var start = 0; // pixel
var finish = window.innerWidth - box.clientWidth;
var distance = finish - start;
var increment = distance / (duration * fps);

var position = start;

function move() {
position += increment;
if (position >= finish) {
clearInterval(handler);
box.style.left = finish + px;
return;
}
box.style.left = position + px;
}

var handler = setInterval(move, 1000 / fps);

body {
background: gainsboro;
}
#box {
width: 100px;
height: 100px;
background: white;
box-shadow: 1px 1px 1px rgba(0, 0, 0, .2);
position: absolute;
left: 0;
}

<div id=box></div>




More From » animation

 Answers
78

You could use a time variable and increment it for every frame and use the easing functions for the right position with the values you already have.







// formula     http://easings.net/
// description https://stackoverflow.com/questions/8316882/what-is-an-easing-function
// x: percent
// t: current time,
// b: beginning value,
// c: change in value,
// d: duration
function easeInOutQuad(x, t, b, c, d) {
if ((t /= d / 2) < 1) {
return c / 2 * t * t + b;
} else {
return -c / 2 * ((--t) * (t - 2) - 1) + b;
}
}

function move() {
//position += increment;
time += 1 / fps;
position = easeInOutQuad(time * 100 / duration, time, start, finish, duration);

if (position >= finish) {
clearInterval(handler);
box.style.left = finish + px;
return;
}
box.style.left = position + px;
}

var box = document.getElementById(box),
fps = 60,
duration = 2, // seconds
start = 0, // pixel
finish = window.innerWidth - box.clientWidth,
distance = finish - start,
increment = distance / (duration * fps),
position = start,
time = 0,
handler = setInterval(move, 1000 / fps);

body {
background: gainsboro;
}
#box {
width: 100px;
height: 100px;
background: white;
box-shadow: 1px 1px 1px rgba(0, 0, 0, .2);
position: absolute;
left: 0;
}

<div id=box></div>




[#61298] Monday, July 18, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
micheleb

Total Points: 275
Total Questions: 103
Total Answers: 103

Location: Macau
Member since Sat, Jul 11, 2020
4 Years ago
micheleb questions
;