在一个数值范围内进行动画

Animate during a range of values

本文关键字:范围内 动画 一个      更新时间:2023-09-26

我创建了一个光标,当你移动它时,它的颜色会产生动画效果。它从蓝色变成了红色。当您不移动光标时,动画将暂停。

正在计算光标移动的像素量(var mousetravel),并显示在屏幕的左上角。此变量每20毫秒更新一次。

现在,光标的动画是用CSS完成的。然而,这依赖于动画持续时间。现在,持续时间被设置为4秒。

所以,基本上,如果你不断移动光标,颜色的变化将在4秒后完成。我想做的是在光标移动10000像素后完成颜色的改变;我希望颜色变化取决于光标移动的像素量,而不是像现在这样的定时持续时间。

我真不知道该怎么处理这件事。

我希望这有意义。我很乐意澄清任何问题。

这是jsfield

jsfiddle有更多的代码,但我将发布专门处理我在这里谈论的代码:

<div class='cursor_transistion' id='cursor'>
    &nbsp;
</div>
CSS

.cursor_transistion {
    animation-name: cursor_transistion;
    animation-duration: 4s;
    animation-play-state: running;
}
@keyframes cursor_transistion {
    0% {background-color: #7AA8CE;}
    100% {background-color: #CE7A7A;}
}

JS

var $mouseX = 0, $mouseY = 0;
var $xp = 0, $yp =0;
$(document).mousemove(function(e){
    $mouseX = e.pageX;
    $mouseY = e.pageY;    
});
var $loop = setInterval(function(){
// change 12 to alter damping higher is slower
$xp += (($mouseX - $xp)/12);
$yp += (($mouseY - $yp)/12);
$("#cursor").css({left:$xp +'px', top:$yp +'px'});  
}, 30);
var timestamp = null;
var lastMouseX = null;
var lastMouseY = null;
var mrefreshinterval = 500; // update display every 500ms
 var lastmousex=-1; 
 var lastmousey=-1;
 var lastmousetime;
 var mousetravel = 0;
 var lastmousetravel = 0;
//pauses CSS color animation while cursor is not moving
setInterval(function () {
        if (lastmousetravel === mousetravel){
            $('.cursor_transistion').css('animation-play-state', 'paused');
        } else {
            $('.cursor_transistion').css('animation-play-state', 'running');
        }
    }, 20);
 $('html').mousemove(function(e) {
     var mousex = e.pageX;
     var mousey = e.pageY;
     if (lastmousex > -1)
         mousetravel += Math.max( Math.abs(mousex-lastmousex), Math.abs(mousey-lastmousey) );
     lastmousex = mousex;
     lastmousey = mousey;
     var speed = lastmousex + lastmousey;
    setTimeout(function(){
        lastmousetravel = mousetravel;
    }, 20);
});

这只是一个想法,没有经过测试,但也许不是使用CSS过渡来改变颜色,而是使用RGB着色,并在鼠标移动时设置颜色。基本上,在每个间隔(最高10000px)中,根据移动的像素数在每次更新时将其设置为新颜色。如果颜色依赖于移动的像素数,这也将摆脱暂停和停止过渡的需要。但是,使用此解决方案,您需要设计一个公式来确定颜色。