Пример использования (я думаю, мне нужна помощь @drjerry)
У меня есть функция синхронизации css3, она называется easy-in-out: cubic-bezier(.42,0,.58,1)
. Графически это выглядит так: http://cubic -bezier.com / #. 42,0, .58,1
Я хочу создать новую функцию синхронизации, которая будет только нижней половиной, а затем верхней половиной этого графика.
Таким образом, нижняя половина - ease-in
: cubic-bezier(.42,0,1,1)
. Графически: http://cubic -bezier.com / #. 42,0,1,1
А верхняя половина - ease-out
: cubic-bezier(0,0,.58,1)
. Графически: http://cubic -bezier.com / # 0,0, .58,1
Итак, что меня смущает, так это то, что в соответствии со сценарием в iScriptDesign он говорит мне, что они разные.
iScriptDeisgn говорит, что начальная половина ease-in-out
(то есть ease-in
): cubic-bezier(.21, 0, .355, .25)
. Графически: http://cubic -bezier.com / #. 21,0, .35, .25
iScriptDeisgn говорит, что конечная половина ease-in-out
равна (то есть ease-out
): cubic-bezier(.145, .25, .29, .5)
. Графически: http://cubic -bezier.com / #. 14, .25, .29, .5
Почему ease-in
и ease-out
, возвращаемые функцией разделения iScriptDesign, отличаются от реального ease-in
и реального ease-out
? Я не понимаю.
Код для этого примера.
//////////////////START FROM ISCRIPTDESIGN
var splitBezier = function(array, perc) {
array.unshift({x:0, y:0});
var coll = [];
while (array.length > 0) {
for (var i = 0;i < array.length-1; i++) {
coll.unshift(array[i]);
array[i] = interpolate(array[i], array[i+1], perc);
}
coll.unshift(array.pop());
}
return {b1: [{x:coll[5].x, y:coll[5].y}, {x:coll[2].x, y:coll[2].y},{x:coll[0].x, y:coll[0].y}]
, b2: [{x:coll[1].x - coll[0].x,y:coll[1].y-coll[0].y}, {x:coll[3].x - coll[0].x,y:coll[3].y-coll[0].y}, {x:coll[6].x - coll[0].x,y:coll[6].y-coll[0].y}]};
}
var interpolate = function (p0, p1, percent) {
if (typeof percent === 'undefined') percent = 0.5;
return {x: p0.x + (p1.x - p0.x) * percent
, y: p0.y + (p1.y - p0.y) * percent};
}
//////////////////END FROM ISCRIPTDESIGN
var coord = function (x,y) {
if(!x) var x=0;
if(!y) var y=0;
return {x: x, y: y};
}
var easeInOut = [new coord(.42,0), new coord(.58,1), new coord(1,1)];
var split50percent = splitBezier(easeInOut.slice(), .5);
Итак, split50percent
имеет значение:
({
b1: [{
x: 0.21,
y: 0
}, {
x: 0.355,
y: 0.25
}, {
x: 0.5,
y: 0.5
}],
b2: [{
x: 0.14500000000000002,
y: 0.25
}, {
x: 0.29000000000000004,
y: 0.5
}, {
x: 0.5,
y: 0.5
}]
})
То же самое с easeInOutSine
easeInOutSine
:. 44, +0,05, +0,55, +0,95
- РЕАЛЬНЫЙ
easeInSine
: 0,47, 0, 0,745, 0,715
easeOutSine
: 0,39, 0,575, 0,565, 1
- iScriptDesign
easeInSine
:. 22, +0,03, +0,36, +0,26
easeOutSine
:. 14, +0,24, +0,28, +0,48