如何在网页端用js模拟鼠标移动点击等操作

发布于 2022-09-12 13:55:58 字数 3146 浏览 11 评论 0

网页端没有直接的api可以实现鼠标点击,移动等操作。
我目前的思路是,自己创建点击,移动等事件,然后通过元素的dispatchEvent方法,直接把事件发给目标元素。但是这种方式非常麻烦,需要先找到监听鼠标操作的元素,然后才能用dispatchEvent方法,没有通用性,有没有更好的思路或方法。
三种操作的封装

function creatpointerdown(x, y, offsetX, offsetY) {
    let downEvent = new PointerEvent("pointerdown", {
        pointerId: 1,
        bubbles: true, //如果事件是冒泡类型,则返回 true,否则返回 fasle。
        button: 0, // 按下 0(通常是左按钮)  移动时为-1
        buttons: 1, // pointerdown 1(通常是左键)   pointerup时候为 0(没有键被按下)
        cancelable: true, //如果用 preventDefault() 方法可以取消与事件关联的默认动作,则为 true,否则为 fasle。
        composed: true, //用来指示该事件是否可以从 Shadow DOM 传递到一般的 DOM。
        pointerType: "mouse",
        which: 1, //按下和抬起为1  移动时为0
        width: 1, //触摸的物体,与屏幕接触的面积
        height: 1, //触摸的物体,与屏幕接触的面积
        isPrimary: true, //是否为主指针
        isTrusted: true, //是否可信任  判断是脚本操作还是真人操作 ,其实并不能设置,脚本操作则为false
        tiltX: 0, //Y和Z轴的角度 -90到90度
        tiltY: 0,
        view: document.defaultView, //与事件关联的窗口
        clientX: x,
        clientY: y,
        screenX: x, //鼠标在屏幕上的x坐标
        screenY: y + 71, //鼠标在屏幕上的y坐标
        movementX: 0,
        movementY: 0,
        pressure: 0.5 //压力  鼠标点击时为 0.5  鼠标按下为抬起移动时为0  抬起了移动时为0
    });
    return downEvent;
}


//按下时移动
function creatpointermove(x, y, offsetX, offsetY) {

    let moveEvent = new PointerEvent("pointermove", {
        pointerId: 1,
        bubbles: true, //如果事件是冒泡类型,则返回 true,否则返回 fasle。
        button: -1, // 按下 0(通常是左按钮)  移动时为-1
        buttons: 1, // pointerdown 1(通常是左键)   pointerup时候为 0(没有键被按下)
        cancelable: true, //如果用 preventDefault() 方法可以取消与事件关联的默认动作,则为 true,否则为 fasle。
        composed: true, //用来指示该事件是否可以从 Shadow DOM 传递到一般的 DOM。
        pointerType: "mouse",
        which: 0, //按下和抬起为1  移动时为0
        width: 1, //触摸的物体,与屏幕接触的面积
        height: 1, //触摸的物体,与屏幕接触的面积
        isPrimary: true,
        tiltX: 0,
        tiltY: 0,
        view: document.defaultView, //与事件关联的窗口
        clientX: x,
        clientY: y,
        screenX: x, //鼠标在屏幕上的x坐标
        screenY: y + 71, //鼠标在屏幕上的y坐标
        movementX: offsetX,
        movementY: offsetY,
        pressure: 0.5 //压力  鼠标点击时为 0.5  鼠标按下为抬起移动时为0  抬起了移动时为0  抬起时为0
    });

    return moveEvent;
}



function creatpointerup(x, y, offsetX, offsetY) {

    let upEvent = new PointerEvent("pointerup", {
        pointerId: 1,
        bubbles: true, //如果事件是冒泡类型,则返回 true,否则返回 fasle。
        button: -1, // 按下 0(通常是左按钮)  移动时为-1
        buttons: 0, // pointerdown 1(通常是左键)   pointerup时候为 0(没有键被按下)
        cancelable: true, //如果用 preventDefault() 方法可以取消与事件关联的默认动作,则为 true,否则为 fasle。
        composed: true, //用来指示该事件是否可以从 Shadow DOM 传递到一般的 DOM。
        pointerType: "mouse",
        which: 1, //按下和抬起为1  移动时为0
        width: 1, //触摸的物体,与屏幕接触的面积
        height: 1, //触摸的物体,与屏幕接触的面积
        isPrimary: true,
        tiltX: 0,
        tiltY: 0,
        view: document.defaultView, //与事件关联的窗口
        clientX: x,
        clientY: y,
        screenX: x, //鼠标在屏幕上的x坐标
        screenY: y + 71, //鼠标在屏幕上的y坐标
        movementX: offsetX,
        movementY: offsetY,
        pressure: 0 //压力  鼠标点击时为 0.5  鼠标按下为抬起移动时为0  抬起了移动时为0  抬起时为0
    });

    return upEvent;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九厘米的零° 2022-09-19 13:55:58

这个问题的关键点在于如何准确的拿到目标元素。如果你是模拟了一个鼠标指针在页面上移动,那么你只有指针的坐标信息,该如何通过坐标信息拿到对应位置的元素,这个目前可能无法实现。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文