【发布时间】:2015-12-24 14:00:14
【问题描述】:
我创建了一个光标,当你移动它时它的颜色会产生动画。它从蓝色变为红色。当您不移动光标时,动画将暂停。
正在计算光标移动的像素数量 (var mousetravel),并显示在屏幕的左上角。此变量每 20 毫秒更新一次。
现在,光标的动画是用 CSS 完成的。但是,这依赖于动画持续时间。现在,持续时间设置为 4 秒。
所以,基本上,如果你不断移动光标,颜色的变化将在 4 秒后完成。我想要做的是在光标移动 10000 像素后完成颜色的变化;我希望颜色变化取决于光标移动的像素数量,而不是像现在这样的定时持续时间。
我真的不知道我应该如何处理这个问题。
我希望这是有道理的。我很乐意澄清任何事情。
jsfiddle 有更多代码,但我将发布专门处理我在这里谈论的代码:
HTML
<div class='cursor_transistion' id='cursor'>
</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