【问题标题】:Animate during a range of values在一系列值期间进行动画处理
【发布时间】:2015-12-24 14:00:14
【问题描述】:

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

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

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

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

我真的不知道我应该如何处理这个问题。

我希望这是有道理的。我很乐意澄清任何事情。

Here is the jsfiddle

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

HTML

<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);
});

【问题讨论】:

  • 非常酷的小提琴。

标签: javascript jquery css animation css-transitions


【解决方案1】:

这只是一个想法,未经测试,但可能不是使用 CSS 过渡来更改颜色,而是使用 RGB 着色并在鼠标移动时设置颜色。基本上,在每个间隔高达 10000 像素时,根据移动的像素数在每次更新时将其设置为新颜色。如果颜色取决于移动的像素数,这也将消除暂停和停止过渡的需要。但是,使用此解决方案,您需要设计一个公式来确定颜色。

【讨论】:

  • 这听起来是个好主意。我想我有一个可行的公式。我稍后会尝试一下。谢谢!
  • 如果您想出解决方案,请告诉我们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多