lesff 发布的帖子
好像找到问题了,滑动太快,用下面的就可以
"auto";
// 调试信息
log("屏幕大小:", device.width, "x", device.height);
toast("2秒后开始滑动+按住测试");
sleep(2000);
// 起点
var startX = 1009;
var startY = 393;
// 目标点:向右滑动75px
var endX = startX + 75;
var endY = startY;
// 滑动时间(毫秒)
var swipeDuration = 1000; // 滑动用300ms,可根据需要调整
// 持续按住时间
var holdTime = 10000; // 2秒,可修改,若希望一直按住可循环或手动结束
// 执行滑动
try {
gesture(swipeDuration, [[startX, startY], [endX, endY]]);
log("滑动完成");
toast("滑动完成,准备持续按住");
} catch (e) {
log("gesture滑动失败:", e.message);
}
// 使用 RootAutomator 持续按住
try {
var ra = new RootAutomator();
ra.touchDown(endX, endY); // 按下
sleep(holdTime); // 持续按住
ra.touchUp(endX, endY); // 抬起
ra.exit();
toast("持续按住完成");
log("持续按住完成");
} catch (e) {
log("RootAutomator持续按住失败:", e.message);
}
各位师傅,请教一下: 非游戏界面,比如设置,autojs app里面都可以滑动,但是妄想山海里面,可以进行点击操作,无法进行滑动,开启了无障碍,root。代码如下:
"auto";
// 调试信息
log("屏幕大小:", device.width, "x", device.height);
toast("2s后开始滑动测试");
sleep(2000);
// 目标滑动:右侧三分之一,从下往上
var x = Math.floor(device.width * 2 / 3);
var yStart = Math.floor(device.height * 3 / 4);
var yEnd = Math.floor(device.height / 4);
var duration = 500;
// 按顺序尝试三种滑动方式
function performSwipe(x1, y1, x2, y2, dur) {
// 1) 尝试 gesture()(如果可用)
try {
if (typeof gesture === "function") {
log("尝试 gesture()");
gesture(dur, [[x1, y1], [x2, y2]]);
toast("gesture() 已执行");
return { ok: true, method: "gesture" };
} else {
log("gesture 未定义");
}
} catch (e) {
log("gesture 报错:", e.message || e);
}
// 2) 尝试内置 swipe()
try {
log("尝试 swipe()");
swipe(x1, y1, x2, y2, dur);
toast("swipe() 已执行");
return { ok: true, method: "swipe" };
} catch (e) {
log("swipe 报错:", e.message || e);
}
// 3) 尝试通过 shell 注入 input swipe(兼容 adb / 模拟器)
try {
log("尝试 shell input swipe");
var cmd = "input swipe " + x1 + " " + y1 + " " + x2 + " " + y2 + " " + dur;
shell(cmd, true);
toast("shell input swipe 已执行(尝试)");
return { ok: true, method: "shell" };
} catch (e) {
log("shell 报错:", e.message || e);
}
return { ok: false, method: null };
}
// ---- 单线程执行 ----
// 先点击屏幕中间,确认点击有效
click(device.width / 2, device.height / 2);
sleep(300);
// 执行一次滑动测试
var r = performSwipe(x, yStart, x, yEnd, duration);
log("performSwipe 返回:", r);
toast("滑动尝试: " + (r.ok ? ("成功 via " + r.method) : "全部失败"));
// 如果成功,再做连续三次滑动,便于观察
if (r.ok) {
for (var i = 0; i < 3; i++) {
if (r.method === "gesture") {
gesture(duration, [[x, yStart], [x, yEnd]]);
} else if (r.method === "swipe") {
swipe(x, yStart, x, yEnd, duration);
} else {
shell("input swipe " + x + " " + yStart + " " + x + " " + yEnd + " " + duration, true);
}
sleep(500); // 每次滑动间隔
}
} else {
toast("所有滑动方法均失败,可能为游戏/模拟器屏蔽。");
}