我创建了一个光标,当您移动它时可以使其具有动画效果。它从一片蓝色变成红色。当您不移动光标时,动画将暂停。在一系列值中动画效果
光标移动的像素数量正在计数(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);
});
很酷的小提琴顺便说一句。 – Jesse
@Jesse谢谢! :) –