B2B网络软件
标题:
AIWROK双指向中间滑动捏合手势完整示例
[打印本页]
作者:
YYPOST群发软件
时间:
2 小时前
标题:
AIWROK双指向中间滑动捏合手势完整示例
AIWROK双指向中间滑动捏合手势完整示例
1.png
(1.73 MB, 下载次数: 0)
下载附件
2 小时前
上传
2.png
(2.16 MB, 下载次数: 0)
下载附件
2 小时前
上传
3.png
(1.37 MB, 下载次数: 0)
下载附件
2 小时前
上传
/**
* ============================================================
* AIWROK - 双指向中间滑动(捏合手势)完整示例
* ============================================================
* 核心功能:
* 1. auto.dispatchGesture([path1, path2]) —— 同时执行多条路径,实现多点触控
* 2. new path() + setDurTime() + addPoint() —— 构建单根手指的滑动轨迹
*
* 手势说明:
* - 捏合(缩小):左指向右滑 + 右指向左滑,两指同时向中间靠拢
* - 放大(张开):左指向左滑 + 右指向右滑,两指同时向外分开(附带示例)
* ============================================================
*/
function main() {
print.log("========== 双指向中间滑动(捏合手势)示例 ==========");
// =====================================================
// 第一步:获取屏幕尺寸,使用百分比坐标适配所有机型
// =====================================================
var screenW = 1080;
var screenH = 1920;
try {
if (typeof screen !== 'undefined') {
if (typeof screen.getScreenWidth === 'function') screenW = screen.getScreenWidth();
if (typeof screen.getScreenHeight === 'function') screenH = screen.getScreenHeight();
} else if (typeof device !== 'undefined') {
if (typeof device.width === 'number') screenW = device.width;
if (typeof device.height === 'number') screenH = device.height;
}
} catch (e) {
print.log("获取屏幕尺寸失败,使用默认值: " + e);
}
print.log("屏幕尺寸: " + screenW + " x " + screenH);
sleep.millisecond(500);
// =====================================================
// 示例 1:水平方向双指捏合(向中间滑动,缩小图片用)
// 左指:屏幕左侧 1/4 处 → 屏幕中间
// 右指:屏幕右侧 3/4 处 → 屏幕中间
// =====================================================
print.log("\n--- 示例1: 水平捏合(向中间滑动,缩小)---");
{
// 左指路径:从左 1/4 → 中间
var pathLeft1 = new path();
pathLeft1.setDurTime(600);
pathLeft1.addPoint(screenW * 0.25, screenH * 0.5); // 起点
pathLeft1.addPoint(screenW * 0.45, screenH * 0.5); // 终点(中间偏左)
// 右指路径:从右 1/4 → 中间
var pathRight1 = new path();
pathRight1.setDurTime(600);
pathRight1.addPoint(screenW * 0.75, screenH * 0.5); // 起点
pathRight1.addPoint(screenW * 0.55, screenH * 0.5); // 终点(中间偏右)
// 同时传入两个 path 对象 → 双指同时滑动
var ok1 = auto.dispatchGesture([pathLeft1, pathRight1]);
print.log(ok1 ? "✓ 水平捏合执行成功" : "✗ 水平捏合执行失败");
}
sleep.second(1);
// =====================================================
// 示例 2:垂直方向双指捏合(上指下滑 + 下指上滑 → 向中间)
// =====================================================
print.log("\n--- 示例2: 垂直捏合(向中间滑动)---");
{
var pathTop = new path();
pathTop.setDurTime(600);
pathTop.addPoint(screenW * 0.5, screenH * 0.25); // 顶部起点
pathTop.addPoint(screenW * 0.5, screenH * 0.45); // 向中间滑
var pathBottom = new path();
pathBottom.setDurTime(600);
pathBottom.addPoint(screenW * 0.5, screenH * 0.75); // 底部起点
pathBottom.addPoint(screenW * 0.5, screenH * 0.55); // 向中间滑
var ok2 = auto.dispatchGesture([pathTop, pathBottom]);
print.log(ok2 ? "✓ 垂直捏合执行成功" : "✗ 垂直捏合执行失败");
}
sleep.second(1);
// =====================================================
// 示例 3:对角线捏合(左上+右下同时向中心靠拢)
// =====================================================
print.log("\n--- 示例3: 对角线捏合(左上+右下 → 中心)---");
{
var pathLT = new path();
pathLT.setDurTime(700);
pathLT.addPoint(screenW * 0.15, screenH * 0.2); // 左上角
pathLT.addPoint(screenW * 0.42, screenH * 0.46); // 中心左上区域
var pathRB = new path();
pathRB.setDurTime(700);
pathRB.addPoint(screenW * 0.85, screenH * 0.8); // 右下角
pathRB.addPoint(screenW * 0.58, screenH * 0.54); // 中心右下区域
var ok3 = auto.dispatchGesture([pathLT, pathRB]);
print.log(ok3 ? "✓ 对角线捏合执行成功" : "✗ 对角线捏合执行失败");
}
sleep.second(1);
// =====================================================
// 示例 4:放大手势(与捏合相反,双指向外分开)
// 作为对比参考,方便理解方向
// =====================================================
print.log("\n--- 示例4: 水平放大(双指向外分开)---");
{
var pathLeft4 = new path();
pathLeft4.setDurTime(600);
pathLeft4.addPoint(screenW * 0.45, screenH * 0.5); // 中间偏左
pathLeft4.addPoint(screenW * 0.20, screenH * 0.5); // 滑向左边
var pathRight4 = new path();
pathRight4.setDurTime(600);
pathRight4.addPoint(screenW * 0.55, screenH * 0.5); // 中间偏右
pathRight4.addPoint(screenW * 0.80, screenH * 0.5); // 滑向右边
var ok4 = auto.dispatchGesture([pathLeft4, pathRight4]);
print.log(ok4 ? "✓ 水平放大执行成功" : "✗ 水平放大执行失败");
}
sleep.second(1);
// =====================================================
// 示例 5:封装好的通用函数调用
// =====================================================
print.log("\n--- 示例5: 调用封装函数 pinchHorizontal() ---");
pinchHorizontal(0.2, 0.8, 0.5, 0.5, 800); // 从 20% 和 80% 位置向中间捏合
sleep.second(1);
print.log("\n========== 示例全部执行完成 ==========");
}
// ============================================================
// 封装函数:水平捏合(双指向中间滑动)
// 参数:
// leftStartXPercent : 左指起点 X 的百分比 (0~1)
// rightStartXPercent: 右指起点 X 的百分比 (0~1)
// yPercent : 捏合中心线的 Y 百分比 (0~1)
// convergePercent : 向中间收敛到的位置(0.5 = 正中心)
// duration : 持续时间(毫秒)
// ============================================================
function pinchHorizontal(leftStartXPercent, rightStartXPercent, yPercent, convergePercent, duration) {
try {
var w = 1080, h = 1920;
if (typeof screen !== 'undefined') {
if (typeof screen.getScreenWidth === 'function') w = screen.getScreenWidth();
if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
}
var y = h * yPercent;
var cx = w * convergePercent;
// 左指:起点 → 中心左侧(留出一点间距不撞车)
var pL = new path();
pL.setDurTime(duration);
pL.addPoint(w * leftStartXPercent, y);
pL.addPoint(cx - w * 0.05, y);
// 右指:起点 → 中心右侧
var pR = new path();
pR.setDurTime(duration);
pR.addPoint(w * rightStartXPercent, y);
pR.addPoint(cx + w * 0.05, y);
var result = auto.dispatchGesture([pL, pR]);
print.log("水平捏合 " + (result ? "成功" : "失败")
+ " [" + (leftStartXPercent*100).toFixed(0) + "%→" + ((convergePercent-0.05)*100).toFixed(0) + "%"
+ ", " + (rightStartXPercent*100).toFixed(0) + "%→" + ((convergePercent+0.05)*100).toFixed(0) + "%]");
return result;
} catch (e) {
print.log("水平捏合异常: " + e);
return false;
}
}
// ============================================================
// 封装函数:垂直捏合(上指下滑 + 下指上滑)
// ============================================================
function pinchVertical(topStartYPercent, bottomStartYPercent, xPercent, convergePercent, duration) {
try {
var w = 1080, h = 1920;
if (typeof screen !== 'undefined') {
if (typeof screen.getScreenWidth === 'function') w = screen.getScreenWidth();
if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
}
var x = w * xPercent;
var cy = h * convergePercent;
var pT = new path();
pT.setDurTime(duration);
pT.addPoint(x, h * topStartYPercent);
pT.addPoint(x, cy - h * 0.05);
var pB = new path();
pB.setDurTime(duration);
pB.addPoint(x, h * bottomStartYPercent);
pB.addPoint(x, cy + h * 0.05);
var result = auto.dispatchGesture([pT, pB]);
print.log("垂直捏合 " + (result ? "成功" : "失败"));
return result;
} catch (e) {
print.log("垂直捏合异常: " + e);
return false;
}
}
// ============================================================
// 封装函数:通用双指捏合(任意起点 + 指定收敛中心)
// start1 : 起点1 {x, y} (百分比 0~1)
// start2 : 起点2 {x, y}
// center : 收敛中心 {x, y} (百分比)
// duration : 毫秒
// ============================================================
function pinchGeneric(start1, start2, center, duration) {
try {
var w = 1080, h = 1920;
if (typeof screen !== 'undefined') {
if (typeof screen.getScreenWidth === 'function') w = screen.getScreenWidth();
if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
}
var p1 = new path();
p1.setDurTime(duration);
p1.addPoint(start1.x * w, start1.y * h);
// 向中心靠近,但不到绝对中心(留 3% 间距,避免两指坐标相同被系统识别成单指)
p1.addPoint(
start1.x * w + (center.x * w - start1.x * w) * 0.85,
start1.y * h + (center.y * h - start1.y * h) * 0.85
);
var p2 = new path();
p2.setDurTime(duration);
p2.addPoint(start2.x * w, start2.y * h);
p2.addPoint(
start2.x * w + (center.x * w - start2.x * w) * 0.85,
start2.y * h + (center.y * h - start2.y * h) * 0.85
);
var result = auto.dispatchGesture([p1, p2]);
print.log("通用双指捏合 " + (result ? "成功" : "失败"));
return result;
} catch (e) {
print.log("通用捏合异常: " + e);
return false;
}
}
main();
复制代码
欢迎光临 B2B网络软件 (http://bbs.niubt.cn/)
Powered by Discuz! X3.2