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