내가 지금 여기에이 다른 질문에서 가져온 몇 가지 코드를 사용했습니다 : Math: Ease In, ease Out a displacement using Hermite curve with time constraint
을 제가했습니다 이후 5 애니메이션 보간 기능을 축소 된 그것은 확실히 덜 읽기 쉽다.
올바른 접근 방식은 올바른 이미지를 반영하도록 이미지 소스를 업데이트해야합니다.
기본적으로 우리는 50ms를 사용하여 500ms 동안 대상 요소를 페이드 아웃하는 함수를 호출합니다. 이것이 끝나면 이미지의 소스를 변경 한 다음 다시 페이드 인합니다. 이 작업이 완료되면 다시 시작하기 전에 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>