mousemove 停止和性能问题
mousemove stops and perfomance problems
我正在尝试 div 像玩游戏一样用鼠标(水平)移动代码如下:
// Move
setInterval(function () {
$(document.body).one('mousemove',function(e) {
$('.p').animate({
'left': e.pageX
},300);
});
},400);
它运行良好(几乎没有滞后)但它确实有效
问题是如果我在 1 分钟后没有在页面上做任何事情如果我尝试移动鼠标没有任何反应
有时也会有 10 秒的延迟
我该如何解决这个问题(获得更好的性能)
const mouse = document.querySelector('.mouse');
const mousePos = { x: 0, y: 0 };
const lastMousePos = { x: 0, y: 0 };
let speedFollow = 0.15;
document.addEventListener('mousemove', e => {
mousePos.x = e.pageX;
mousePos.y = e.pageY;
});
const lerp = (a, b, n) => (1 - n) * a + n * b;
function animateLoop() {
lastMousePos.x = lerp(
lastMousePos.x,
mousePos.x,
speedFollow
);
lastMousePos.y = lerp(
lastMousePos.y,
mousePos.y,
speedFollow
);
mouse.style.transform = `translate(${lastMousePos.x}px, ${lastMousePos.y}px)`;
requestAnimationFrame(animateLoop);
}
requestAnimationFrame(animateLoop);
// other
const inputRange = document.querySelector('input');
const speedFollowBlock = document.querySelector('p b');
inputRange.addEventListener('input', function() {
speedFollow = this.value;
speedFollowBlock.innerHTML = this.value;
});
body {
min-height: 500vh;
}
.mouse {
position: absolute;
z-index: 1;
width: 30px;
height: 30px;
left: -15px;
top: -15px;
background-color: #e74c3c;
border-radius: 50%;
transform: translate(-100%, -100%);
pointer-events: none;
}
<p>Speed Follow: <b>0.15</b></p>
<input type="range" min="0.05" max="1" step="0.05" value="0.15">
<div class="mouse"></div>
我正在尝试 div 像玩游戏一样用鼠标(水平)移动代码如下:
// Move
setInterval(function () {
$(document.body).one('mousemove',function(e) {
$('.p').animate({
'left': e.pageX
},300);
});
},400);
它运行良好(几乎没有滞后)但它确实有效 问题是如果我在 1 分钟后没有在页面上做任何事情如果我尝试移动鼠标没有任何反应 有时也会有 10 秒的延迟
我该如何解决这个问题(获得更好的性能)
const mouse = document.querySelector('.mouse');
const mousePos = { x: 0, y: 0 };
const lastMousePos = { x: 0, y: 0 };
let speedFollow = 0.15;
document.addEventListener('mousemove', e => {
mousePos.x = e.pageX;
mousePos.y = e.pageY;
});
const lerp = (a, b, n) => (1 - n) * a + n * b;
function animateLoop() {
lastMousePos.x = lerp(
lastMousePos.x,
mousePos.x,
speedFollow
);
lastMousePos.y = lerp(
lastMousePos.y,
mousePos.y,
speedFollow
);
mouse.style.transform = `translate(${lastMousePos.x}px, ${lastMousePos.y}px)`;
requestAnimationFrame(animateLoop);
}
requestAnimationFrame(animateLoop);
// other
const inputRange = document.querySelector('input');
const speedFollowBlock = document.querySelector('p b');
inputRange.addEventListener('input', function() {
speedFollow = this.value;
speedFollowBlock.innerHTML = this.value;
});
body {
min-height: 500vh;
}
.mouse {
position: absolute;
z-index: 1;
width: 30px;
height: 30px;
left: -15px;
top: -15px;
background-color: #e74c3c;
border-radius: 50%;
transform: translate(-100%, -100%);
pointer-events: none;
}
<p>Speed Follow: <b>0.15</b></p>
<input type="range" min="0.05" max="1" step="0.05" value="0.15">
<div class="mouse"></div>