autojs如何实现拖住滑动,滑动后并不松开直到执行按下或者松开的动作?

请教下autojs如何实现拖住滑动,滑动后并不松开直到执行按下或者松开的动作?
我使用 gesture方法执行完成后就松开了导致验证码被执行,我需要验证完继续拖住滑动的

gestures(
[delay, dur, [x1, y1], [x2,y2] ],
[(delay+dur-1), dur2, [x2, y2], [x2, y2] ],
)
随便点击一个位置就可以松开
整个手势总时长应该不能超过一分钟 ( delay + dur + dur2 < 60000 )

最后由 ibozo 编辑

在Auto.js中,如果你希望实现一个拖住并保持滑动的动作,直到执行按下或松开的效果,可以使用gesture方法结合setInterval和手动控制手指的位置来实现。在这种情况下,我们将手指保持在某个相对位置不动,然后在需要的时候再松开手指。

示例代码

以下是一个实现这种功能的示例代码:

// 按下手指,开始滑动
function startSwipe(x, y, duration) {
    // 使用 setInterval 来保持手指拖着滑动
    let startTime = new Date().getTime();
    let interval = setInterval(() => {
        let now = new Date().getTime();
        let elapsed = now - startTime;

        let progress = Math.min(elapsed / duration, 1); // 确保进度不会超过 1

        // 计算当前拖动的位置
        let currentX = x + (targetX - x) * progress; // 根据目标位置调整
        let currentY = y + (targetY - y) * progress; // 根据目标位置调整

        // 有效地模拟手指当前位置
        // 需要根据你的需求调整目标的位置
        if (progress < 1) {
            // 保持在当前拖动的位置
            setPosition(currentX, currentY);
        } else {
            clearInterval(interval); // 完成滑动
        }
    }, 100); // 调整间隔时间以适应你的需求
}

// 设置手指的位置
function setPosition(x, y) {
    // 这里可以用 `gesture` 方法来定义滑动
    // 也可以使用 `setTouch` 方法保持位置
    // 因为 Auto.js 不支持手指位置的持续移动,
    // 这里需要用定时器保持手动的位移
}

// 松开手指
function releaseTouch() {
    // 这里实现松开手指的动作
}

// 实际调用示例
let startX = 300; // 起始位置
let startY = 500; // 起始位置
let targetX = 300; // 目标位置
let targetY = 200; // 目标位置
let duration = 1000; // 滑动持续时间

startSwipe(startX, startY, duration);

// 在某些条件下松开手指
// 如需要按下某个按钮的条件
setTimeout(() => {
    releaseTouch();
}, 2000); // 2秒后松开手指,调整时间以适应你的实际需求

注意事项

  • 以上代码只是一个逻辑示例,实际的实现可能需要根据你的需求进行调整。
  • 没有直接的方法来持续保持手指划动,具体的实现依赖于在目标位置的持续更新。
  • 请注意监控UI变化,以决定何时释放手指。
  • 根据Auto.js的版本和设备性能,可能需要进一步调试以获得平滑的效果。