javascript中真实的鼠标移动坐标?

javascript中真实的鼠标移动坐标?,javascript,Javascript,在javascript中,有没有一种方法可以创建一个变量和一个“模拟”平滑鼠标移动的函数?i、 例如,假设该函数模拟用户从浏览器窗口的左下角开始,然后缓慢地沿随机方向移动鼠标 该函数将返回鼠标每次被调用时移动的下一个位置的x和y值(可能会使用类似于setInterval的东西来不断调用它以获取下一个鼠标位置)。移动应该限制在屏幕的宽度和高度,假设鼠标永远不会离开屏幕 我不想让鼠标在这个地方跳得太快。我喜欢平滑的移动/位置被返回。上次我听说浏览器的鼠标位置不能用JavaScript更改,所以这个问

在javascript中,有没有一种方法可以创建一个变量和一个“模拟”平滑鼠标移动的函数?i、 例如,假设该函数模拟用户从浏览器窗口的左下角开始,然后缓慢地沿随机方向移动鼠标

该函数将返回鼠标每次被调用时移动的下一个位置的x和y值(可能会使用类似于setInterval的东西来不断调用它以获取下一个鼠标位置)。移动应该限制在屏幕的宽度和高度,假设鼠标永远不会离开屏幕


我不想让鼠标在这个地方跳得太快。我喜欢平滑的移动/位置被返回。

上次我听说浏览器的鼠标位置不能用JavaScript更改,所以这个问题实际上没有“原样”的答案。但可以锁定鼠标位置。我不确定是否可以实现一个允许设置位置的自定义光标。这可能包括隐藏或锁定股票光标。

没有上下文,“真实的鼠标移动”并不意味着什么:

每个鼠标用户在这个设备上都有不同的行为,他们甚至不会在屏幕上做相同的手势

如果你玩FPS游戏,大部分动作都会在一个小的垂直范围内,沿着整个水平屏幕。

但是,如果我们用鼠标,我甚至不用鼠标。输入已经聚焦,我只用键盘

在一些无限滚动的网站上,我的鼠标可以在同一个位置停留几十分钟,然后在某个点指向链接

我认为,为了让鼠标的移动更加逼真,你必须记录下所有用户的手势,并重新调整它们

此外,一个好的策略可能是获得元素的坐标,这将更可能吸引用户的光标(如SO问题下的“关闭”链接),并使运动转到这些元素的坐标

无论如何,我在这里制作了一个片段,它使用了
Math.random()
requestAnimationFrame()
,以使对象平稳移动,并有一些暂停时间和可变速度

//画布仅用于显示函数的输出
var canvas=document.createElement('canvas');
var ctx=canvas.getContext('2d');
document.body.appendChild(画布);
var maxX=canvas.width=window.innerWidth;
var maxY=canvas.height=window.innerHeight;
window.onresize=函数(){
maxX=canvas.width=window.innerWidth;
maxY=canvas.height=window.innerHeight;
}
gc.onclick=函数(){
var coords=mouse.getCoords();
out.innerHTML='x:'+coords.x+'
y:'+coords.y; } var Mouse=function(){ var that={}, 尺寸=15, 边框=大小/2, maxSpeed=50,//每帧像素 maxTimePause=5000;//毫秒 that.draw=函数(){ 如果(那.暂停) 返回; 更新(); //举个例子 clearRect(0,0,canvas.width,canvas.height); 如果(显示已选中){ drawImage(that.img,that.x-border,that.y-border,size,size) } //使用requestAnimationFrame进行平滑更新 requestAnimationFrame(即.draw); } that.update=函数(){ //在同一个方向上随机选择一个位置 that.x+=Math.random()*that.speedX; that.y+=Math.random()*that.speedY; //如果我们出界了或者时间间隔过了 如果(that.x=maxX-border | | that.y=maxY-border | |+that.i>that.interval) 那.重置(); } that.reset=函数(){ that.i=0;//重置计数器 that.interval=Math.random()*50;//重置间隔 that.speedX=(Math.random()*(maxSpeed))-(maxSpeed/2);//重置水平方向 that.speedY=(Math.random()*(maxSpeed))-(maxSpeed/2);//重置垂直方向 //我们在一个角落里,random返回了更远的边界 如果(that.x=maxX-border&&that.speedX>0) //改变方向 即.speedX*=-1; 如果(that.y=maxY-border&&that.s>0) 即*=-1; //检查间隔是否已完成 if(that.x>border&&that.xborder&&that.y.5){ //设置暂停并在一段时间后将其删除 那是真的; setTimeout(函数(){ 暂停=错误; 那。画(); },(Math.random()*maxTimePause)); } } } that.init=函数(){ x=0; y=0; that.img=新图像(); 那就是="数据:图片/png;base64,Ivborw0KgoaaAnsuhueugaab4aaaaaaaaa7MK6iaaaaBjuleqvriIc2WxHeiAyFi6eskgejkvIjKvLyGlyCqE9Od3F5R5MpHwbTgNipJfchiagbGgG7PmgaDy2BgQ40BasqiOkZatGhWnWgHgHgHgHgHgHgHgHgHgHgHbBbBhBhBhBhBhYrWwYrYYYrWwWwWwWfVwWfWfL7Ff1Of1Of1Of1Oy7F7F7F0FfKf1OyKf1OyKfKf1OyKf1OyKf1OyKf7F0F7Fwizkuh8svpqdi3zgndpqaudkzvdesm8xzvbh4mvz7k8ud/+ar0c3ypk7mvgkczvrdzv3dhvem6bju1compnmbamq8kg+/ynd7zwnsavz9dl0ahbrzq7f+CSQAAAAASUVORK5CYII=“; 那.重置(); } that.getCoords=函数(){ 返回{x:that.x,y:that.y}; } this.init() 归还; } var mouse=新鼠标() mouse.draw();
html,正文{margin:0}
画布{位置:绝对;顶部:0;左侧:0;z索引:-1}
#out{font size:0.8em}
显示光标
获取光标坐标

让某些东西平滑地跟随光标是非常直接的。您可以反转此过程以实现所需。下面是一个代码片段,它只需计算光标与div之间的距离,然后将div移动到光标距离的10%:


若用户在随机方向上移动鼠标,那个么它就不会平滑,你们也无法预测它的位置
var p = document.getElementById('nextmove')
var lastX,lastY,cursorX,cursorY;

window.addEventListener('mousemove', function(e){
    cursorX = e.pageX;
    cursorY = e.pageY;
})
setInterval(function(){
    var newX = p.offsetLeft + (cursorX - lastX)/10
    var newY = p.offsetTop + (cursorY - lastY)/10

    p.style.left = newX+'px'
    p.style.top = newY+'px'

    lastX = p.offsetLeft
    lastY = p.offsetTop
},20)