【问题标题】:javaScript Animating Images onmouseover/onmouseoutjavaScript 动画图像 onmouseover/onmouseout
【发布时间】:2012-12-01 10:33:20
【问题描述】:

我有一个开门动画(41 帧),我想使用 javaScript 让它在鼠标悬停时打开,我希望它回到第 1 帧 onmouseout。我不认为我在 onmouseout 部分做得很正确。提前感谢您的帮助!

HTML:
    <div onmouseover="startAnimation()" onmouseout="stopAnimation()" id="door2"></div>
    <div id="door">
    <img src="images/Animation_Door/0001.png">
    <img src="images/Animation_Door/0002.png">
    <img src="images/Animation_Door/0003.png">
    ...etc...(41 frames)

css:
    #door img{
    display: none;
    }

    #door img:first-child {
    display: block;
    }

javaScript:
    function startAnimation() { 
    var frames = document.getElementById("door").children;
    var frameCount = frames.length;

    for (i=0; i<41; i++) {
    setTimeout(function(){
    frames[i % frameCount].style.display = "none";
    frames[++i % frameCount].style.display = "block";
    }, 50*i);
    }
    }

    function stopAnimation() {
    var frames = document.getElementById("door").children;
    var frameCount = frames.length;

    for (i=0; i<1; i++){
    setTimeout(function(){
    frames[++i % frameCount].style.display = "none";
    frames[i % frameCount].style.display = "block";
    }, 50*i);
    }
    }

这里有一个链接: http://www.reveriesrefined.com/test

【问题讨论】:

  • 链接返回 403 禁止状态
  • stopAnimation 中的 for 循环不应该有“i
  • 我似乎无法修复链接,但如果您只是将其粘贴到浏览器中,它应该可以工作。
  • 当 stopAnimation 中的 for 循环有 i
  • 它直接进入第一帧,对我来说没有动画。你想改变什么?

标签: javascript animation settimeout onmouseover onmouseout


【解决方案1】:

我认为这可能更像你想要的:

var ti, frame = 0,
frames = document.getElementById('door').children;

function resetAnimation() {
    frame = 0;
    frames[0].style.display = 'block';
    for (var i = 1; i < frames.length; i++) {
        frames[i].style.display = 'none';
    }
}
function startAnimation() {
    console.log('start animation');
    resetAnimation();
    ti = setInterval(function() {
        frames[frame].style.display = 'none';
        frame ++;
        if (frame >= frames.length) frame = 0;
        frames[frame].style.display = 'block';
    }, 50);
}
function stopAnimation() {
    if (ti) {
        clearInterval(ti);
        ti = undefined;
    }
    resetAnimation();
}​

请注意,当您想要连续动画时,通常使用 setInterval 比使用 setTimeout 更合适。一个全局变量存储我们当前正在查看的帧。 resetAnimation 将帧设置为零并相应地设置显示。 startAnimation 设置一个间隔计时器,它隐藏旧帧,将帧增加一帧,并显示新帧,每 50 毫秒。停止动画只是清除间隔计时器并重置动画。

【讨论】:

  • 我试过你的代码,但它不起作用。它甚至不会启动动画。我试过 onmouseover="startAnimation()" onmouseout="stopAnimation()" 也试过 onClick,但它不会启动动画。知道为什么吗?我正在尝试很多事情,但似乎无法让动画与您的代码一起使用。
  • 为我工作here。在您的原始代码中,事件处理程序位于一个空的 div (id="door2") 上,因此您甚至可能看不到需要将鼠标放在上面的 div?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2011-06-27
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多