tween24
Version:
Tween24.js is animation library that enables fast coding using method chains.
1,326 lines (1,164 loc) • 127 kB
text/typescript
import { Ticker24 } from "./core/Ticker24";
import { Ease24 } from "./Ease24";
import { Tween24Event } from "./core/Tween24Event";
import { Updater } from "./core/updaters/Updater";
import { ObjectUpdater } from "./core/updaters/ObjectUpdater";
import { TransformUpdater } from "./core/updaters/TransformUpdater";
import { FunctionExecuter } from "./core/FunctionExecuter";
import { StyleUpdater } from "./core/updaters/StyleUpdater";
import { MultiUpdater } from "./core/updaters/MultiUpdater";
import { ClassUtil } from "./utils/ClassUtil";
import { HTMLUtil } from "./utils/HTMLUtil";
import { StringUtil } from "./utils/StringUtil";
import { Sort24 } from "./index";
import { Text24 } from "./utils/Text24";
import { Event24 } from "./Event24";
import { ParamUpdater } from "./core/updaters/ParamUpdater";
import { LinkedList } from "./core/data/LinkedList";
import { LinkedListItem } from "./core/data/LinkedListItem";
export class Tween24 {
// Static
static readonly VERSION:string = "1.5.0";
private static readonly _TYPE_TWEEN :string = "tween";
private static readonly _TYPE_TWEEN_VELOCITY :string = "tween_velocity";
private static readonly _TYPE_TWEEN_TEXT :string = "tween_text";
private static readonly _TYPE_TWEEN_TEXT_VELOCITY:string = "tween_text_velocity";
private static readonly _TYPE_PROP :string = "prop";
private static readonly _TYPE_PROP_TEXT :string = "prop_text";
private static readonly _TYPE_WAIT :string = "wait";
private static readonly _TYPE_WAIT_EVENT :string = "wait_event";
private static readonly _TYPE_WAIT_EVENT_AND_FUNC:string = "wait_event_and_func";
private static readonly _TYPE_SERIAL :string = "serial";
private static readonly _TYPE_PARALLEL :string = "parallel";
private static readonly _TYPE_LAG :string = "lag";
private static readonly _TYPE_LOOP :string = "loop";
private static readonly _TYPE_FUNC :string = "func";
private static readonly _TYPE_IF_CASE :string = "if_case";
private static readonly _TYPE_IF_CASE_BY_FUNC :string = "if_case_by_func";
private static readonly _STATUS_PLAYING:string = "playing";
private static readonly _STATUS_PAUSING:string = "pausing";
private static readonly _STATUS_SKIPING:string = "skiping";
private static readonly _STATUS_STOPING:string = "stoping";
private static readonly _STATUS_WAITING:string = "waiting";
static ticker:Ticker24;
static ease :Ease24;
private static _playingTweens :LinkedList;
private static _manualPlayingTweens :LinkedList;
private static _playingTweensByTarget:Map<any, LinkedList>;
private static _tweensById :Map<string, Tween24>;
private static _tweensByGroupId:Map<string, Tween24[]>;
private static _defaultEasing :Function = Ease24._Linear;
private static _debugMode :boolean = false;
private static _numCreateTween :number = 0;
private static _globalTimeScale:number = 1;
private static _isSkipHello :boolean = false;
private _playingTweensItem:LinkedListItem|undefined;
private _playingTweensByTargetItem:LinkedListItem|undefined;
private _playingTweensByTargetList:LinkedList|undefined;
private _playingTweensByMultiTargetItem:Map<any, LinkedListItem>|undefined;
// Tween param
private _singleTarget:any |null = null;
private _multiTarget :any[]|null = null;
private _easing :Function = Tween24._defaultEasing;;
private _type :string = "";
private _time :number = NaN;
private _velocity :number = NaN;
private _delayTime:number = NaN;
private _startTime:number = NaN;
private _progress :number = 0;
private _timeScale :number = 1;
private _delayTimeScale :number = 1;
private _totalTimeScale :number = 1;
private _totalDelayTimeScale:number = 1;
private _debugMode :boolean = false;
private _numLayers :number = 0;
private _serialNumber :number = 0;
private _tweenId :string = "";
private _tweenGroupId :string = "";
private _targetString :string = "";
private _targetQuery :string|null = null;
private _useWillChange:boolean = false;
// Updater
private _objectUpdater :ObjectUpdater |null = null;
private _objectMultiUpdater :MultiUpdater |null = null;
private _transformUpdater :TransformUpdater|null = null;
private _transformMultiUpdater:MultiUpdater |null = null;
private _styleUpdater :StyleUpdater |null = null;
private _styleMultiUpdater :MultiUpdater |null = null;
private _allUpdaters :LinkedList |null = null;
// Refer
private _root :Tween24|null = null;
private _parent:Tween24|null = null;
private _next :Tween24|null = null;
__next :Tween24|null = null;
__prev :Tween24|null = null;
// Status
private _isDOM :boolean = false;
private _isRoot :boolean = false;
private _isManual :boolean = false;
private _isTrigger:boolean = false;
private _inited :boolean = false;
private _status :string = Tween24._STATUS_STOPING;
private _firstUpdated :boolean = false;
private _isContainerTween :boolean = false;
private _createdBasicUpdater:boolean = false;
// Action & Callback
private _functionExecuters:{[key:string]:FunctionExecuter}|null = null;
// Container Tween
private _firstTween :Tween24 |null = null;
private _childTween :Tween24[] |null = null;
private _playingChildTween :LinkedList|null = null;
private _originalChildTween :Tween24[] |null = null;
private _numCompleteChildren:number = 0;
// Lag
private _lagTime :number = NaN;
private _totalLagTime:number = NaN;
private _lagSort :Function|null = null;
private _lagEasing :Function|null = null;
// Loop & Repeat
private _numIterations :number = 1;
private _currentIterations:number = 0;
// If Case
private _ifFunc :Function|null = null;
private _trueTween :Tween24 |null = null;
private _falseTween:Tween24 |null = null;
// Dispatch event
private _dispatchEventTarget:any;
private _dispatchEventType :string|null = null;
// Trigger & Jump
private _useJump :boolean = false;
private _triggered :boolean = false;
private _jumped :boolean = false;
private _jumpProg :number = NaN;
// Tween FPS
__fps:number = 0;
__beforeTime:number = 0;
constructor() {
// Initialize
if (!Tween24.ease) {
if (!Tween24._isSkipHello) {
if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) {
var args = [
"\n %c %c %c Tween24.js - ver." + Tween24.VERSION + " %c << https://github.com/a24/tween24js >> \n",
"background: #247570; padding:5px 0;",
"background: #3CC2B9; padding:5px 0;",
"color: #247570; background: #fff2cd; padding:5px 0;",
"color: #ffffff; background: #247570; padding:5px 0;"
];
console.log.apply(console.log, args);
}
else if (console) {
console.log("\n Tween24.js - ver." + Tween24.VERSION + " << https://github.com/a24/tween24js >> \n ");
}
}
Tween24.ease = new Ease24();
Tween24.ticker = new Ticker24();
Tween24._playingTweens = new LinkedList();
Tween24._playingTweensByTarget = new Map<any, LinkedList>();
}
}
// ------------------------------------------
//
// Tween control
//
// ------------------------------------------
/**
* トゥイーンを再生します。
* @memberof Tween24
*/
play = () => {
this._isManual = false;
this._commonRootPlay();
}
/**
* トゥイーンを手動アップデート式で再生します。
* 関数 manualUpdate() を実行すると更新されます。
* @memberof Tween24
*/
manualPlay = () => {
Tween24._manualPlayingTweens ||= new LinkedList();
this._isManual = true;
this._commonRootPlay();
}
private _commonRootPlay = () => {
if (this._status == Tween24._STATUS_PAUSING) {
this._resume();
if (!this._isManual) Tween24.ticker.add(this);
else Tween24._manualPlayingTweens.push(this);
this._functionExecute(Tween24Event.RESUME);
}
else {
if (this._status != Tween24._STATUS_PLAYING && this._status != Tween24._STATUS_WAITING) {
this._root = this;
this._isRoot = true;
this._inited = false;
this._firstUpdated = false;
this._play();
if (!this._isManual) Tween24.ticker.add(this);
else Tween24._manualPlayingTweens.push(this);
this._functionExecute(Tween24Event.PLAY);
}
}
}
private _play = () => {
if (this._isRoot) {
this._numLayers = 0;
}
else {
this._root = this._parent?._root || this._parent;
this._numLayers = this._parent ? this._parent._numLayers + 1 : 1;
}
this._status = Tween24._STATUS_PLAYING;
// Time scale
this._updateTimeScale();
// Velocity
if (this._type == Tween24._TYPE_TWEEN_VELOCITY || this._type == Tween24._TYPE_TWEEN_TEXT_VELOCITY) {
const deltas = [0];
this._allUpdaters?.map((updater:Updater) => {
updater.init(false);
deltas.push(updater.getMaxAbsDelta());
});
this._time = Math.max(...deltas) / this._velocity;
}
this._playingTweensItem = Tween24._playingTweens.push(this);
// Skip
if (this._root?._status == Tween24._STATUS_SKIPING || this._parent?._status == Tween24._STATUS_SKIPING) {
this._skip();
}
this._debugLog("play");
// Init
if (!this._delayTime || this._delayTime < 1 / 60) this._init();
// Start time
if (this._isManual) this._setStartTime(Ticker24.getTime());
else Tween24.ticker.setPlayTIme();
}
private _resume = () => {
this._status = Tween24._STATUS_PLAYING;
this._updateStartTime();
this._playingTweensItem = Tween24._playingTweens.push(this);
}
private _updateTimeScale = () => {
if (this._parent) {
this._totalTimeScale = this._timeScale * this._parent._totalTimeScale;
this._totalDelayTimeScale = this._delayTimeScale * this._parent._totalDelayTimeScale;
}
else {
this._totalTimeScale = this._timeScale * Tween24._globalTimeScale;
this._totalDelayTimeScale = this._delayTimeScale;
}
}
private _updateStartTime = () => {
const nowTime = Ticker24.getTime();
if (this._progress > 0) this._startTime = nowTime - this._time * this._progress * this._totalTimeScale * 1000;
else this._startTime = nowTime - this._delayTime * this._progress * this._totalTimeScale * this._totalDelayTimeScale * 1000;
if (this._playingChildTween) {
this._playingChildTween.map((tween) => {
if (tween._playingChildTween) tween._resume();
else {
if (tween._progress > 0) tween._startTime = nowTime - tween._time * tween._progress * tween._totalTimeScale * 1000;
else tween._startTime = nowTime - tween._delayTime * tween._progress * tween._totalTimeScale * tween._totalDelayTimeScale * 1000;
}
});
}
}
/**
* トゥイーンを一時停止します。
* @memberof Tween24
*/
pause = () => {
if (this._isRoot) {
this._status = Tween24._STATUS_PAUSING;
if (this._isManual) Tween24._manualPlayingTweens.delete(this);
else Tween24.ticker.remove(this);
if (this._playingTweensItem) Tween24._playingTweens.remove(this._playingTweensItem);
this._functionExecute(Tween24Event.PAUSE);
}
}
/**
* トゥイーンを終点までスキップします。
* @memberof Tween24
*/
skip = () => {
this._skip();
}
private _skip = () => {
this._status = Tween24._STATUS_SKIPING;
if (this._playingChildTween) {
this._playingChildTween.map((tween) => {
tween.skip();
});
}
this.__update(0);
}
/**
* トゥイーンを停止します。
* @memberof Tween24
*/
stop = () => {
this._stop();
this._functionExecute(Tween24Event.STOP);
}
private _stop = () => {
this._tweenStop();
if (this._childTween) {
for (const tween of this._childTween) {
if (tween._childTween) tween._stop();
else tween._tweenStop();
}
}
}
// ------------------------------------------
//
// Tween work
//
// ------------------------------------------
private _init = () => {
this._inited = true;
this._initParam();
this._functionExecute(Tween24Event.INIT);
}
private _initParam = () => {
// Pseudo element setting
if (this._isDOM && this._targetQuery && HTMLUtil.isPseudoQuery(this._targetQuery))
HTMLUtil.setTweenElementQuery(this._singleTarget || this._multiTarget, this._targetQuery);
// Updater init
if (this._allUpdaters) {
const useWillChange = this._root?._useWillChange || this._parent?._useWillChange || this._useWillChange;
this._allUpdaters.map((updater:Updater) => {
updater.init(useWillChange);
});
}
// Overwrite
if (this._singleTarget)
this._overwrite(this._singleTarget);
else if (this._multiTarget) {
for (const target of this._multiTarget) {
this._overwrite(target);
}
}
}
private _overwrite = (target:any) => {
this._playingTweensByTargetList = Tween24._playingTweensByTarget.get(target);
if (this._playingTweensByTargetList) {
this._playingTweensByTargetList.map((tween, index) => {
if (this !== tween) {
if (this._singleTarget) {
if (this._objectUpdater ) (tween._objectMultiUpdater ||tween._objectUpdater )?.overwrite(this._objectUpdater);
if (this._transformUpdater) (tween._transformMultiUpdater||tween._transformUpdater)?.overwrite(this._transformUpdater);
if (this._styleUpdater ) (tween._styleMultiUpdater ||tween._styleUpdater )?.overwrite(this._styleUpdater);
}
else if (this._multiTarget) {
if (tween._objectMultiUpdater ) this._objectMultiUpdater ?.overwriteMultiTo(tween._objectMultiUpdater);
else if (tween._objectUpdater ) this._objectMultiUpdater ?.overwriteTo (tween._objectUpdater);
if (tween._transformMultiUpdater) this._transformMultiUpdater?.overwriteMultiTo(tween._transformMultiUpdater);
else if (tween._transformUpdater ) this._transformMultiUpdater?.overwriteTo (tween._transformUpdater);
if (tween._styleMultiUpdater ) this._styleMultiUpdater ?.overwriteMultiTo(tween._styleMultiUpdater);
else if (tween._styleUpdater ) this._styleMultiUpdater ?.overwriteTo (tween._styleUpdater);
}
}
});
}
else {
this._playingTweensByTargetList = new LinkedList();
Tween24._playingTweensByTarget.set(target, this._playingTweensByTargetList);
}
if (this._singleTarget) {
this._playingTweensByTargetItem = this._playingTweensByTargetList.push(this);
}
else {
this._playingTweensByMultiTargetItem ||= new Map();
this._playingTweensByMultiTargetItem.set(target, this._playingTweensByTargetList.push(this));
}
}
private _setIfCaseTween = (flag:boolean) => {
if (this._childTween) this._childTween.length = 0;
else this._childTween = [];
if (flag && this._trueTween)
this._childTween = [this._trueTween];
else if (this._falseTween)
this._childTween = [this._falseTween];
else
this._childTween = [];
}
private _setStartTime = (playTime:number) => {
this._startTime = playTime + this._delayTime * this._totalDelayTimeScale * this._totalTimeScale * 1000;
}
manualUpdate = () => {
this.__update(Ticker24.getTime());
}
public __update = (nowTime:number) => {
// Set start time
if (!this._startTime) this._setStartTime(Tween24.ticker.getLastPLayTime());
// Delay
if (this._delayTime) {
if (nowTime < this._startTime) {
this._progress = (nowTime - this._startTime) / (this._delayTime * 1000);
return;
}
}
const time = this._time * this._totalTimeScale;
// Skip
if (this._status == Tween24._STATUS_SKIPING || time == 0) {
this._progress = 1;
}
// Else
else {
this._progress = (nowTime - this._startTime) / (time * 1000);
this._progress = (this._progress > 1) ? 1 : this._progress;
}
// Init
if (!this._inited) {
this._init();
}
// Container Tween
if (this._isContainerTween) {
if (this._firstUpdated == false) {
this._firstUpdated = true;
// If case
if (this._type == Tween24._TYPE_IF_CASE_BY_FUNC) {
this._setIfCaseTween(this._ifFunc ? Boolean(this._ifFunc()) : false);
}
switch (this._type) {
case Tween24._TYPE_SERIAL:
case Tween24._TYPE_LOOP :
if (this._firstTween) {
this._playingChildTween?.push(this._firstTween);
this._firstTween._play();
}
break;
case Tween24._TYPE_PARALLEL:
case Tween24._TYPE_LAG :
case Tween24._TYPE_IF_CASE :
case Tween24._TYPE_IF_CASE_BY_FUNC :
if (this._childTween) {
for (const tween of this._childTween) {
this._playingChildTween?.push(tween);
tween._play();
}
}
break;
}
}
// Update
if (this._playingChildTween) {
this._playingChildTween.map((tween) => {
tween.__update(nowTime);
});
}
this._functionExecute(Tween24Event.UPDATE);
if (this._childTween?.length == this._numCompleteChildren) this._complete();
}
// Child Tween
else {
if (!this._firstUpdated)
this._firstUpdated = true;
if (this._allUpdaters) {
// Update propety
const prog = this._easing(this._progress, 0, 1, 1);
this._allUpdaters.map((updater:Updater) => {
updater.update(prog);
});
this._functionExecute(Tween24Event.UPDATE);
}
else {
this._functionExecute(Tween24Event.UPDATE);
}
// Jump
if (this._useJump && !this._jumped && this._progress >= this._jumpProg) {
this._jumped = true;
this._parent?._playNextTween(this);
}
// Complete
if (this._progress >= 1) {
// Wait event
if ((this._type == Tween24._TYPE_WAIT_EVENT || this._type == Tween24._TYPE_WAIT_EVENT_AND_FUNC) && this._dispatchEventTarget && this._dispatchEventType) {
if (this._status != Tween24._STATUS_WAITING) {
this._status = Tween24._STATUS_WAITING;
const waitHandler = () => {
if (this._dispatchEventType) Event24.remove(this._dispatchEventTarget, this._dispatchEventType);
// End
this._complete();
}
Event24.__addCallback(this._dispatchEventTarget, this._dispatchEventType, waitHandler);
if (this._type == Tween24._TYPE_WAIT_EVENT_AND_FUNC)
this._functionExecute(Tween24._TYPE_WAIT_EVENT_AND_FUNC);
}
}
else {
// Func
if (this._type == Tween24._TYPE_FUNC) {
this._functionExecute(Tween24._TYPE_FUNC);
}
// End
this._complete();
}
}
}
}
private _complete = () => {
this._currentIterations ++;
if (this._numIterations != this._currentIterations) {
if (this._isContainerTween) {
if (this._type == Tween24._TYPE_LOOP) {
this._debugLog("loop");
this._numCompleteChildren = 0;
this._firstTween?._play();
return;
}
}
else {
this._debugLog("repeat");
this._setStartTime(this._startTime + (this._time + this._delayTime) * 1000);
this._allUpdaters?.map((updater:Updater) => {
updater.update(0);
});
return;
}
}
this._debugLog("complete");
if (this._parent) this._parent._completeChildTween(this);
this._functionExecute(Tween24Event.COMPLATE);
this._tweenStop();
}
private _tweenStop = () => {
if (this._isRoot) Tween24.ticker.remove(this);
if (this._playingChildTween) this._playingChildTween.dispose();
this._numCompleteChildren = 0;
this._currentIterations = 0;
this._startTime = 0;
this._inited = false;
this._jumped = false;
this._triggered = false;
this._firstUpdated = false;
this._status = Tween24._STATUS_STOPING;
if (this._singleTarget) {
this._removePlayingTweenLinkedList(this._singleTarget, this._playingTweensByTargetList, this._playingTweensByTargetItem);
}
else {
this._playingTweensByMultiTargetItem?.forEach((item, target) => {
this._removePlayingTweenLinkedList(target, Tween24._playingTweensByTarget.get(target), item);
});
}
if (this._playingTweensItem) Tween24._playingTweens.remove(this._playingTweensItem);
if (this._isManual) Tween24._manualPlayingTweens.delete(this);
}
private _removePlayingTweenLinkedList(target:any, list:LinkedList|undefined, item:LinkedListItem|undefined) {
if (list && item) {
list.remove(item);
if (list.length == 0) {
Tween24._playingTweensByTarget.delete(target);
}
}
}
private _completeChildTween = (tween:Tween24) => {
// this._debugLog("completeChildTween");
this._numCompleteChildren ++;
if (!this._triggered && tween._isTrigger) {
if (this._parent) {
this._triggered = true;
this._parent._playNextTween(this);
}
}
if (this._childTween?.length == this._numCompleteChildren) {
this._complete();
}
else if (this._playingChildTween) {
this._playingChildTween.delete(tween);
if (!tween._triggered && !tween._jumped) {
this._playNextTween(tween);
}
}
}
private _playNextTween = (childTween:Tween24) => {
var next:Tween24|null = childTween._next;
if (this._playingChildTween && next) {
this._playingChildTween.push(next);
next._play();
}
}
// ------------------------------------------
//
// Tween Transform
//
// ------------------------------------------
/**
* 目標とするX座標を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* また、パーセント値で指定された場合は、囲みボックスの寸法に対する相対値が設定されます。
* @param {number|string} value X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
x (value:number|string): Tween24 { return ClassUtil.isNumber(value) ? this._setPropety("x", parseFloat(value as string)) : this._setPropetyStr("x", value as string); }
/**
* 目標とするX座標を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
x$ (value:number): Tween24 { return this._setPropety("x", value, ParamUpdater.RELATIVE_AT_SETTING); }
/**
* 目標とするX座標を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
x$$ (value:number): Tween24 { return this._setPropety("x", value, ParamUpdater.RELATIVE_AT_RUNNING); }
/**
* 目標とするY座標を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* また、パーセント値で指定された場合は、囲みボックスの寸法に対する相対値が設定されます。
* @param {number|string} value Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
y (value:number|string): Tween24 { return ClassUtil.isNumber(value) ? this._setPropety("y", parseFloat(value as string)) : this._setPropetyStr("y", value as string); }
/**
* 目標とするX座標を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
y$ (value:number): Tween24 { return this._set$Propety("y", value); }
/**
* 目標とするX座標を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
y$$ (value:number): Tween24 { return this._set$Propety("y", value); }
/**
* 目標とするXとY座標を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* また、パーセント値で指定された場合は、囲みボックスの寸法に対する相対値が設定されます。
* @param {number|string} x X座標
* @param {number|string} y Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
xy (x:number|string, y:number|string): Tween24 { return this.x(x).y(y); }
/**
* 目標とするXとY座標を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} x X座標
* @param {number} y Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
xy$ (x:number, y:number): Tween24 { return this.x$(x).y$(y); }
/**
* 目標とするXとY座標を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} x X座標
* @param {number} y Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
xy$$ (x:number, y:number): Tween24 { return this.x$$(x).y$$(y); }
/**
* 座標のトゥイーンにベジェ曲線を適応し、アンカーポイントを追加します。
* @param {number} bezierX X座標のアンカーポイント
* @param {number} bezierY Y座標のアンカーポイント
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
bezier(bezierX:number, bezierY:number): Tween24 {
this._transformUpdater ?.setBezier(bezierX, bezierY);
this._transformMultiUpdater?.setBezier(bezierX, bezierY);
this._objectUpdater ?.setBezier(bezierX, bezierY);
this._objectMultiUpdater ?.setBezier(bezierX, bezierY);
return this;
}
/**
* 目標とする透明度を設定します。
* 対象が HTMLElement の場合は、CSS:opacity が適用されます。
* @param {number} value 透明度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
alpha (value:number): Tween24 { return this._isDOM ? this._setStyle("opacity", value) : this._setPropety("alpha", value); }
/**
* 目標とする透明度を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:opacity が適用されます。
* @param {number} value 透明度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
alpha$ (value:number): Tween24 { return this._isDOM ? this._set$Style("opacity", value) : this._set$Propety("alpha", value); }
/**
* 目標とする透明度を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:opacity が適用されます。
* @param {number} value 透明度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
alpha$$ (value:number): Tween24 { return this._isDOM ? this._set$$Style("opacity", value) : this._set$$Propety("alpha", value); }
/**
* 目標とする透明度を設定します。
* @param {number} value 透明度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
opacity (value:number): Tween24 { return this._isDOM ? this._setStyle("opacity", value) : this._setPropety("opacity", value); }
/**
* 目標とする透明度を、トゥイーンを作成した時の値の相対値で設定します。
* @param {number} value 透明度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
opacity$ (value:number): Tween24 { return this._isDOM ? this._set$Style("opacity", value) : this._set$Propety("opacity", value); }
/**
* 目標とする透明度を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {number} value 透明度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
opacity$$ (value:number): Tween24 { return this._isDOM ? this._set$$Style("opacity", value) : this._set$$Propety("opacity", value); }
/**
* 目標とする水平スケールを設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleX (value:number): Tween24 { return this._setPropety("scaleX", value); }
/**
* 目標とする水平スケール、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleX$ (value:number): Tween24 { return this._set$Propety("scaleX", value); }
/**
* 目標とする水平スケール、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleX$$ (value:number): Tween24 { return this._set$$Propety("scaleX", value); }
/**
* 目標とする垂直スケールを設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleY (value:number): Tween24 { return this._setPropety("scaleY", value); }
/**
* 目標とする垂直スケールを、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleY$ (value:number): Tween24 { return this._set$Propety("scaleY", value); }
/**
* 目標とする垂直スケールを、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleY$$ (value:number): Tween24 { return this._set$$Propety("scaleY", value); }
/**
* 目標とするスケールを設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平&垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scale (value:number): Tween24 { return this._setPropety("scaleX", value)._setPropety("scaleY", value); }
/**
* 目標とするスケールを、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平&垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scale$ (value:number): Tween24 { return this._set$Propety("scaleX", value)._set$Propety("scaleY", value); }
/**
* 目標とするスケールを、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平&垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scale$$ (value:number): Tween24 { return this._set$$Propety("scaleX", value)._set$$Propety("scaleY", value); }
/**
* 目標とする水平・垂直スケールを設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} scaleX 水平方向のスケール
* @param {number} scaleY 垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleXY (scaleX:number, scaleY:number): Tween24 { return this._setPropety("scaleX", scaleX)._setPropety("scaleY", scaleY); }
/**
* 目標とする水平・垂直スケールを、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} scaleX 水平方向のスケール
* @param {number} scaleY 垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleXY$ (scaleX:number, scaleY:number): Tween24 { return this._set$Propety("scaleX", scaleX)._set$Propety("scaleY", scaleY); }
/**
* 目標とする水平・垂直スケールを、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} scaleX 水平方向のスケール
* @param {number} scaleY 垂直方向のスケール
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
scaleXY$$ (scaleX:number, scaleY:number): Tween24 { return this._set$$Propety("scaleX", scaleX)._set$$Propety("scaleY", scaleY); }
/**
* 目標とする水平傾斜を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewX (value:number): Tween24 { return this._setPropety("skewX", value); }
/**
* 目標とする水平傾斜を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewX$ (value:number): Tween24 { return this._set$Propety("skewX", value); }
/**
* 目標とする水平傾斜を設定、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewX$$ (value:number): Tween24 { return this._set$$Propety("skewX", value); }
/**
* 目標とする垂直傾斜を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewY (value:number): Tween24 { return this._setPropety("skewY", value); }
/**
* 目標とする垂直傾斜を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewY$ (value:number): Tween24 { return this._set$Propety("skewY", value); }
/**
* 目標とする垂直傾斜を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewY$$ (value:number): Tween24 { return this._set$$Propety("skewY", value); }
/**
* 目標とする水平&垂直傾斜を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平&垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skew (value:number): Tween24 { return this._setPropety("skewX", value)._setPropety("skewY", value); }
/**
* 目標とする水平&垂直傾斜を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平&垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skew$ (value:number): Tween24 { return this._set$Propety("skewX", value)._set$Propety("skewY", value); }
/**
* 目標とする水平&垂直傾斜を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 水平&垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skew$$ (value:number): Tween24 { return this._set$$Propety("skewX", value)._set$$Propety("skewY", value); }
/**
* 目標とする水平・垂直傾斜を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} skewX 水平方向の傾斜
* @param {number} skewY 垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewXY (skewX:number, skewY:number): Tween24 { return this._setPropety("skewX", skewX)._setPropety("skewY", skewY); }
/**
* 目標とする水平・垂直傾斜を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} skewX 水平方向の傾斜
* @param {number} skewY 垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewXY$ (skewX:number, skewY:number): Tween24 { return this._set$Propety("skewX", skewX)._set$Propety("skewY", skewY); }
/**
* 目標とする水平・垂直傾斜を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} skewX 水平方向の傾斜
* @param {number} skewY 垂直方向の傾斜
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
skewXY$$ (skewX:number, skewY:number): Tween24 { return this._set$$Propety("skewX", skewX)._set$$Propety("skewY", skewY); }
/**
* 目標とする回転角度を設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 回転角度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
rotation (value:number): Tween24 { return this._setPropety("rotation", value); }
/**
* 目標とする回転角度を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 回転角度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
rotation$ (value:number): Tween24 { return this._set$Propety("rotation", value); }
/**
* 目標とする回転角度を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:Transform が適用されます。
* @param {number} value 回転角度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
rotation$$ (value:number): Tween24 { return this._set$$Propety("rotation", value); }
/**
* CSS:Transform の基準点を設定します。
* @param {number} x X方向の基準点
* @param {number} y Y方向の基準点
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
transformOrigin (x:number|string, y:number|string): Tween24 { return this._setStyle("transform-origin", StringUtil.addUnit(x) + " " + StringUtil.addUnit(y)); }
/**
* 目標とする角度を設定します。
* @param {number} value 角度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
angle (value:number): Tween24 { return this._isDOM ? this._setStyle("rotation", value) : this._setPropety("angle", value); }
/**
* 目標とする角度を、トゥイーンを作成した時の値の相対値で設定します。
* @param {number} value 角度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
angle$ (value:number): Tween24 { return this._isDOM ? this._set$Style("rotation", value) : this._set$Propety("angle", value); }
/**
* 目標とする角度を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {number} value 角度
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
angle$$ (value:number): Tween24 { return this._isDOM ? this._set$$Style("rotation", value) : this._set$$Propety("angle", value); }
/**
* 目標とする幅を設定します。
* 対象が HTMLElement の場合は、CSS:width が適用されます。
* @param {number|string} value 要素の幅
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
width (value:number|string): Tween24 { return this._isDOM ? this._setStyle("width", StringUtil.addUnit(value)) : this._setPropety("width", parseFloat(value as string)); }
/**
* 目標とする幅を、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:width が適用されます。
* @param {number|string} value 要素の幅
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
width$ (value:number|string): Tween24 { return this._isDOM ? this._set$Style("width", StringUtil.addUnit(value)) : this._set$Propety("width", parseFloat(value as string)); }
/**
* 目標とする幅を、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:width が適用されます。
* @param {number|string} value 要素の幅
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
width$$ (value:number|string): Tween24 { return this._isDOM ? this._set$$Style("width", StringUtil.addUnit(value)) : this._set$$Propety("width", parseFloat(value as string)); }
/**
* 目標とする高さを設定します。
* 対象が HTMLElement の場合は、CSS:height が適用されます。
* @param {number|string} value 要素の高さ
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
height (value:number|string): Tween24 { return this._isDOM ? this._setStyle("height", StringUtil.addUnit(value)) : this._setPropety("height", parseFloat(value as string)); }
/**
* 目標とする高さを、トゥイーンを作成した時の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:height が適用されます。
* @param {number|string} value 要素の高さ
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
height$ (value:number|string): Tween24 { return this._isDOM ? this._set$Style("height", StringUtil.addUnit(value)) : this._set$Propety("height", parseFloat(value as string)); }
/**
* 目標とする高さを、トゥイーンが実行される直前の値の相対値で設定します。
* 対象が HTMLElement の場合は、CSS:height が適用されます。
* @param {number|string} value 要素の高さ
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
height$$ (value:number|string): Tween24 { return this._isDOM ? this._set$$Style("height", StringUtil.addUnit(value)) : this._set$$Propety("height", parseFloat(value as string)); }
// ------------------------------------------
//
// CSS Propety
//
// ------------------------------------------
/**
* CSS:top を設定します。
* @param {number|string} 上からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
top (value:number|string): Tween24 { return this._setStyle("top", StringUtil.addUnit(value)); }
/**
* CSS:top を、トゥイーンを作成した時の値の相対値で設定します。
* @param {number|string} 上からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
top$ (value:number|string): Tween24 { return this._set$Style("top", StringUtil.addUnit(value)); }
/**
* CSS:top を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {number|string} 上からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
top$$ (value:number|string): Tween24 { return this._set$$Style("top", StringUtil.addUnit(value)); }
/**
* CSS:right を設定します。
* @param {number|string} 右からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
right (value:number|string): Tween24 { return this._setStyle("right", StringUtil.addUnit(value)); }
/**
* CSS:right を、トゥイーンを作成した時の値の相対値で設定します。
* @param {number|string} 右からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
right$ (value:number|string): Tween24 { return this._set$Style("right", StringUtil.addUnit(value)); }
/**
* CSS:right を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {number|string} 右からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
right$$ (value:number|string): Tween24 { return this._set$$Style("right", StringUtil.addUnit(value)); }
/**
* CSS:bottom を設定します。
* @param {number|string} value 下からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
bottom (value:number|string): Tween24 { return this._setStyle("bottom", StringUtil.addUnit(value)); }
/**
* CSS:bottom を、トゥイーンを作成した時の値の相対値で設定します。
* @param {number|string} value 下からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
bottom$ (value:number|string): Tween24 { return this._set$Style("bottom", StringUtil.addUnit(value)); }
/**
* CSS:bottom を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {number|string} value 下からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
bottom$$ (value:number|string): Tween24 { return this._set$$Style("bottom", StringUtil.addUnit(value)); }
/**
* CSS:left を設定します。
* @param {number|string} value 左からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
left (value:number|string): Tween24 { return this._setStyle("left", StringUtil.addUnit(value)); }
/**
* CSS:left を、トゥイーンを作成した時の値の相対値で設定します。
* @param {number|string} value 左からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
left$ (value:number|string): Tween24 { return this._set$Style("left", StringUtil.addUnit(value)); }
/**
* CSS:left を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {number|string} value 左からの配置位置(距離)
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
left$$ (value:number|string): Tween24 { return this._set$$Style("left", StringUtil.addUnit(value)); }
/**
* CSS:color を設定します。
* @param {string} colorCode 「#」「rgb()」フォーマットのカラーコード
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
color (colorCode:string): Tween24 { return this._setStyle("color", colorCode); }
/**
* CSS:background-color(背景色)を設定します。
* @param {string} colorCode 「#」「rgb()」フォーマットのカラーコード
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundColor (colorCode:string): Tween24 { return this._setStyle("background-color", colorCode); }
/**
* CSS:background-position-x(背景X座標)を設定します。
* @param {string} x 背景X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundPositionX (x:number|string): Tween24 { return this._setStyle("background-position-x", StringUtil.addUnit(x)); }
/**
* CSS:background-position-x(背景X座標)を、トゥイーンを作成した時の値の相対値で設定します。
* @param {string} x 背景X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundPositionX$ (x:number|string): Tween24 { return this._set$Style("background-position-x", StringUtil.addUnit(x)); }
/**
* CSS:background-position-x(背景X座標)を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {string} x 背景X座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundPositionX$$ (x:number|string): Tween24 { return this._set$$Style("background-position-x", StringUtil.addUnit(x)); }
/**
* CSS:background-position-y(背景Y座標)を設定します。
* @param {string} y 背景Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundPositionY (y:number|string): Tween24 { return this._setStyle("background-position-y", StringUtil.addUnit(y)); }
/**
* CSS:background-position-y(背景Y座標)を、トゥイーンを作成した時の値の相対値で設定します。
* @param {string} y 背景Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundPositionY$ (y:number|string): Tween24 { return this._set$Style("background-position-y", StringUtil.addUnit(y)); }
/**
* CSS:background-position-y(背景Y座標)を、トゥイーンが実行される直前の値の相対値で設定します。
* @param {string} y 背景Y座標
* @return {Tween24} Tween24インスタンス
* @memberof Tween24
*/
backgroundPositionY$$ (y:number|string):