Files
2015-08-23 15:24:46 -05:00

81 lines
2.7 KiB
JavaScript

// Copyright 2014 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
(function(shared, scope, testing) {
function EffectTime(timing) {
var timeFraction = 0;
var activeDuration = shared.calculateActiveDuration(timing);
var effectTime = function(localTime) {
return shared.calculateTimeFraction(activeDuration, localTime, timing);
};
effectTime._totalDuration = timing.delay + activeDuration + timing.endDelay;
effectTime._isCurrent = function(localTime) {
var phase = shared.calculatePhase(activeDuration, localTime, timing);
return phase === PhaseActive || phase === PhaseBefore;
};
return effectTime;
}
scope.KeyframeEffect = function(target, effectInput, timingInput) {
var effectTime = EffectTime(shared.normalizeTimingInput(timingInput));
var interpolations = scope.convertEffectInput(effectInput);
var timeFraction;
var keyframeEffect = function() {
WEB_ANIMATIONS_TESTING && console.assert(typeof timeFraction !== 'undefined');
interpolations(target, timeFraction);
};
// Returns whether the keyframeEffect is in effect or not after the timing update.
keyframeEffect._update = function(localTime) {
timeFraction = effectTime(localTime);
return timeFraction !== null;
};
keyframeEffect._clear = function() {
interpolations(target, null);
};
keyframeEffect._hasSameTarget = function(otherTarget) {
return target === otherTarget;
};
keyframeEffect._isCurrent = effectTime._isCurrent;
keyframeEffect._totalDuration = effectTime._totalDuration;
return keyframeEffect;
};
scope.NullEffect = function(clear) {
var nullEffect = function() {
if (clear) {
clear();
clear = null;
}
};
nullEffect._update = function() {
return null;
};
nullEffect._totalDuration = 0;
nullEffect._isCurrent = function() {
return false;
};
nullEffect._hasSameTarget = function() {
return false;
};
return nullEffect;
};
if (WEB_ANIMATIONS_TESTING) {
testing.webAnimations1KeyframeEffect = scope.KeyframeEffect;
testing.effectTime = EffectTime;
}
})(webAnimationsShared, webAnimations1, webAnimationsTesting);