我用從這裏本的其他問題上的SO得出了一些代碼:Math: Ease In, ease Out a displacement using Hermite curve with time constraint
因爲我已經過壓縮5動畫插補功能,它肯定不容易閱讀。
下面是一個工作得很好的方法 - 確保您更新圖像源以反映有效圖像。
基本上,我們調用一個函數,它會在500ms內使用50個步驟淡出目標元素。完成此操作後,我們更改圖像的來源,然後再次將其淡入。一旦完成,我們設置3秒的超時時間,然後再重新開始。
<!DOCTYPE html>
<html>
<head>
<script>
///////////////////////////////////////////////////////////////////////////////////////////function cubicHermite(a,b,d,e,c){var g=a*a,f=g*a;return(2*f-3*g+1)*b+(f-2*g+a)*e+(-2*f+3*g)*d+(f-g)*c}
function interp(a,b,d,e,c){var g,f;f=e/(a/2+b+d/2);g=f*a/2;f*=b;return result=c<=a?cubicHermite(c/a,0,g,0,f/b*a):c<=a+b?g+f*(c-a)/b:cubicHermite((c-a-b)/d,g+f,e,f/b*d,0)}
function linear(a){return a}
function cubic(a){return interp(0.35,0.3,0.35,1,a)}
function doAnim(a,b,d,e){var c=a/b;setTimeout(function(){doAnimStep(0,b,c,d,e)},c)}
function doAnimStep(a,b,d,e,c){a<=b?(setTimeout(function(){doAnimStep(a,b,d,e,c)},d),e(a/b),a++):void 0!=c&&null!=c&&c()}
///////////////////////////////////////////////////////////////////////////////////////////function animFadeIn(elem, callback)
{
doAnim(250,20,function(raw){elem.style.opacity=cubic(raw)},callback);
}
function animFadeOut(elem, callback)
{
doAnim(500,50,function(raw){elem.style.opacity=1-cubic(raw)},callback);
}
///////////////////////////////////////////////////////////////////////////////////////////
window.addEventListener('load', onDocLoaded, false);
function onDocLoaded()
{
slideChange();
}
var imgNames = ["img/girl.png", "img/redbaron.png"];
var imgNum = 0;
function slideChange()
{
animFadeOut(document.images.slide, afterSlideFadedOut);
function afterSlideFadedOut()
{
document.images.slide.src = imgNames[imgNum];
imgNum++;
if (imgNum > imgNames.length-1)
imgNum=0;
animFadeIn(document.images.slide, afterSlideFadedIn);
}
function afterSlideFadedIn()
{
setTimeout(slideChange, 3000);
}
}
</script>
</head>
<body>
<img name="slide" width="300" height="269" />
</body>
</html>