信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 1|回复: 0
打印 上一主题 下一主题

[宣传软件网站动态] 无障碍方式双指向中间滑动放大缩小完整示例

[复制链接]

1957

主题

1967

帖子

1万

积分

积分
11470

资讯缩略图:

资讯发布日期:2026-08-18

资讯发布简介:无障碍方式双指向中间滑动放大缩小完整示例

资讯关键词:无障碍方式双指向中间滑动放大缩小完整示例

资讯所属分类:IT资讯 SEO资讯 

联系:

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件网站分类目录 网址:http://www.postbbs.com/

资讯详细描述
无障碍方式双指向中间滑动放大缩小完整示例

无障碍方式双指向中间滑动放大缩小完整示例 b2b软件

  1. /**
  2. * ============================================================
  3. * AIWROK - 双指向中间滑动(捏合手势)完整示例【无碍模式】
  4. * ============================================================
  5. * 核心功能:
  6. *   1. auto.dispatchGesture([path1, path2])  —— 同时执行多条路径,实现多点触控
  7. *   2. new path() + setDurTime() + addPoint() —— 构建单根手指的滑动轨迹
  8. *
  9. * 手势说明:
  10. *   - 捏合(缩小):左指向右滑 + 右指向左滑,两指同时向中间靠拢
  11. *   - 放大(张开):左指向左滑 + 右指向右滑,两指同时向外分开(附带示例)
  12. *
  13. * 无碍模式特性:
  14. *   1. 环境自检:运行前自动检查 path / auto.dispatchGesture 是否可用
  15. *   2. 安全封装:创建路径、执行手势全部走 try-catch,任何一步失败都不崩溃
  16. *   3. 参数校验:百分比参数越界自动纠正到合法范围
  17. *   4. 单个手势失败不影响后续手势继续执行
  18. *   5. 失败降级:返回 false 并给出排查建议,方便上层逻辑做备选方案
  19. *
  20. * 【重要】本文件仅适配"无碍模式"(无障碍服务)运行:
  21. *   - 手势一律使用 auto.dispatchGesture([path1, path2]) + new path()
  22. *   - 运行前请确认已开启 AIWROK 无障碍服务权限
  23. * ============================================================
  24. */

  25. // =====================================================
  26. //  0. 环境自检(脚本运行时会自动执行一次)
  27. // =====================================================
  28. var _GESTURE_OK = true;

  29. (function _gestureSelfCheck() {
  30.     var msg = "【自检】捏合手势运行环境:\n";
  31.     try {
  32.         if (typeof path === 'undefined') {
  33.             msg += "  × path 对象不可用(无法创建手势路径)\n";
  34.             _GESTURE_OK = false;
  35.         } else {
  36.             msg += "  ✓ path 对象可用\n";
  37.         }

  38.         if (typeof auto === 'undefined' || typeof auto.dispatchGesture !== 'function') {
  39.             msg += "  × auto.dispatchGesture 不可用(无法执行手势)\n";
  40.             _GESTURE_OK = false;
  41.         } else {
  42.             msg += "  ✓ auto.dispatchGesture 可用\n";
  43.         }

  44.         // 屏幕尺寸检测(可选,失败可用默认值)
  45.         try {
  46.             if (typeof screen !== 'undefined'
  47.                 && typeof screen.getScreenWidth === 'function'
  48.                 && typeof screen.getScreenHeight === 'function') {
  49.                 msg += "  ✓ screen 尺寸可用: " + screen.getScreenWidth() + " x " + screen.getScreenHeight() + "\n";
  50.             } else if (typeof device !== 'undefined' && typeof device.width === 'number') {
  51.                 msg += "  ✓ device 尺寸可用: " + device.width + " x " + device.height + "\n";
  52.             } else {
  53.                 msg += "  ⚠ 尺寸获取不可用,将回退 1080 x 1920\n";
  54.             }
  55.         } catch (e) {
  56.             msg += "  ⚠ 尺寸读取异常: " + e + ",将回退 1080 x 1920\n";
  57.         }

  58.         if (_GESTURE_OK) {
  59.             msg += "  ✓ 自检通过,可以正常执行捏合手势";
  60.         } else {
  61.             msg += "  ✗ 自检未通过!请检查是否已开启 AIWROK 无障碍服务权限";
  62.         }
  63.     } catch (e) {
  64.         msg += "  ✗ 自检过程异常: " + e + "\n";
  65.         _GESTURE_OK = false;
  66.     }
  67.     _log(msg);
  68. })();

  69. // =====================================================
  70. //  1. 安全工具函数
  71. // =====================================================

  72. /**
  73. * 安全获取屏幕尺寸(任何异常都回退默认值)
  74. */
  75. function _gestureGetScreen() {
  76.     var w = 1080, h = 1920;
  77.     try {
  78.         if (typeof screen !== 'undefined') {
  79.             if (typeof screen.getScreenWidth === 'function')  w = screen.getScreenWidth();
  80.             if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
  81.         } else if (typeof device !== 'undefined') {
  82.             if (typeof device.width === 'number')  w = device.width;
  83.             if (typeof device.height === 'number') h = device.height;
  84.         }
  85.         // 防脏数据:尺寸为 0 或非数字时回退默认
  86.         w = (typeof w === 'number' && w > 0) ? w : 1080;
  87.         h = (typeof h === 'number' && h > 0) ? h : 1920;
  88.     } catch (e) {
  89.         _log("⚠ 获取屏幕尺寸异常,使用默认值: " + e);
  90.     }
  91.     return { w: w, h: h };
  92. }

  93. /**
  94. * 参数校验:把百分比约束到 0~1 之间(防止越界导致手势报错)
  95. */
  96. function _clampPercent(v, fallback) {
  97.     try {
  98.         v = parseFloat(v);
  99.         if (isNaN(v)) return fallback;
  100.         if (v < 0) return 0;
  101.         if (v > 1) return 1;
  102.         return v;
  103.     } catch (e) {
  104.         return fallback;
  105.     }
  106. }

  107. /**
  108. * 安全创建单指路径
  109. * @param points 坐标点数组,如 [[x1,y1],[x2,y2]]
  110. * @param duration 时长(毫秒)
  111. * @return path 对象;创建失败返回 null
  112. */
  113. function _safeCreatePath(points, duration) {
  114.     try {
  115.         if (typeof path === 'undefined') {
  116.             _log("✗ path 对象不可用,无法创建路径");
  117.             return null;
  118.         }
  119.         if (!points || points.length < 2) {
  120.             _log("✗ 路径点不足(至少需要 2 个点)");
  121.             return null;
  122.         }
  123.         var p = new path();
  124.         p.setDurTime(duration > 0 ? duration : 600);
  125.         for (var i = 0; i < points.length; i++) {
  126.             var pt = points[i];
  127.             if (!pt || typeof pt[0] !== 'number' || typeof pt[1] !== 'number') {
  128.                 _log("✗ 路径点[" + i + "]非法,跳过该点: " + JSON.stringify(pt));
  129.                 continue;
  130.             }
  131.             p.addPoint(pt[0], pt[1]);
  132.         }
  133.         return p;
  134.     } catch (e) {
  135.         _log("✗ 创建路径异常: " + e);
  136.         return null;
  137.     }
  138. }

  139. /**
  140. * 安全执行手势(无碍核心:任何情况都不抛出异常)
  141. * @param paths path 对象数组
  142. * @return true/false
  143. */
  144. function _safeDispatchGesture(paths) {
  145.     try {
  146.         if (!_GESTURE_OK) {
  147.             _log("✗ 环境自检未通过(path/dispatchGesture 不可用),跳过手势");
  148.             return false;
  149.         }
  150.         if (!paths || paths.length === 0) {
  151.             _log("✗ 手势路径数组为空,不执行");
  152.             return false;
  153.         }
  154.         if (typeof auto === 'undefined' || typeof auto.dispatchGesture !== 'function') {
  155.             _log("✗ auto.dispatchGesture 不可用,无法执行手势");
  156.             return false;
  157.         }
  158.         // 过滤掉创建失败(null)的路径,至少要有一条有效路径
  159.         var valid = [];
  160.         for (var i = 0; i < paths.length; i++) {
  161.             if (paths[i]) valid.push(paths[i]);
  162.         }
  163.         if (valid.length === 0) {
  164.             _log("✗ 没有有效的路径对象,不执行手势");
  165.             return false;
  166.         }
  167.         var result = auto.dispatchGesture(valid);
  168.         if (result === true || result === 1) {
  169.             return true;
  170.         }
  171.         _log("✗ dispatchGesture 返回失败(可能是权限不足或当前界面不支持手势)");
  172.         return false;
  173.     } catch (e) {
  174.         _log("✗ 执行手势异常: " + e);
  175.         return false;
  176.     }
  177. }

  178. /**
  179. * 手势失败时的排查提示(无碍模式:失败不静默,给线索)
  180. */
  181. function _gestureFailHint() {
  182.     _log("  └─ 排查建议:");
  183.     _log("      1. 确认已开启 AIWROK 的【无障碍服务】权限");
  184.     _log("      2. 确认当前处于支持双指捏合的界面(如看图/地图,桌面可能没反应)");
  185.     _log("      3. 确认无障碍服务没有与其他应用冲突");
  186. }

  187. /**
  188. * 日志工具:兼容 print.log / console.log
  189. */
  190. function _log(msg) {
  191.     try {
  192.         if (typeof print !== 'undefined' && typeof print.log === 'function') {
  193.             print.log(msg);
  194.         } else if (typeof console !== 'undefined' && typeof console.log === 'function') {
  195.             console.log(msg);
  196.         }
  197.     } catch (e) {
  198.         // 日志失败直接忽略,不影响主体功能
  199.     }
  200. }

  201. // =====================================================
  202. //  2. 无碍模式捏合工具函数(可直接复用)
  203. // =====================================================

  204. /**
  205. * 水平捏合(左指向右 + 右指向左 → 向中间滑动)
  206. * @param leftStartXPercent  左指起点 X 百分比 0~1
  207. * @param rightStartXPercent 右指起点 X 百分比 0~1
  208. * @param yPercent           捏合中心线 Y 百分比 0~1
  209. * @param convergePercent    向中间收敛位置(0.5 = 正中心)
  210. * @param duration           时长(毫秒)
  211. */
  212. function pinchHorizontal(leftStartXPercent, rightStartXPercent, yPercent, convergePercent, duration) {
  213.     try {
  214.         leftStartXPercent  = _clampPercent(leftStartXPercent, 0.25);
  215.         rightStartXPercent = _clampPercent(rightStartXPercent, 0.75);
  216.         yPercent           = _clampPercent(yPercent, 0.5);
  217.         convergePercent    = _clampPercent(convergePercent, 0.5);
  218.         duration           = (typeof duration === 'number' && duration > 0) ? duration : 600;

  219.         var s = _gestureGetScreen();
  220.         var y  = s.h * yPercent;
  221.         var cx = s.w * convergePercent;
  222.         var gap = s.w * 0.05;

  223.         // 左指:起点 → 中心左侧(留间距不撞车)
  224.         var pL = _safeCreatePath([
  225.             [s.w * leftStartXPercent, y],
  226.             [cx - gap, y]
  227.         ], duration);
  228.         // 右指:起点 → 中心右侧
  229.         var pR = _safeCreatePath([
  230.             [s.w * rightStartXPercent, y],
  231.             [cx + gap, y]
  232.         ], duration);

  233.         _log("水平捏合: 左 " + (leftStartXPercent * 100).toFixed(0) + "% → 中心左"
  234.              + ",右 " + (rightStartXPercent * 100).toFixed(0) + "% → 中心右"
  235.              + ",Y=" + (yPercent * 100).toFixed(0) + "%,时长 " + duration + "ms");

  236.         var ok = _safeDispatchGesture([pL, pR]);
  237.         _log(ok ? "✓ 水平捏合执行成功" : "✗ 水平捏合执行失败");
  238.         if (!ok) _gestureFailHint();
  239.         return ok;
  240.     } catch (e) {
  241.         _log("✗ 水平捏合函数异常: " + e);
  242.         return false;
  243.     }
  244. }

  245. /**
  246. * 垂直捏合(上指下滑 + 下指上滑 → 向中间)
  247. * @param topStartYPercent    上指起点 Y 百分比 0~1
  248. * @param bottomStartYPercent 下指起点 Y 百分比 0~1
  249. * @param xPercent            捏合中心线 X 百分比 0~1
  250. * @param convergePercent     向中间收敛位置(0.5 = 正中心)
  251. * @param duration            时长(毫秒)
  252. */
  253. function pinchVertical(topStartYPercent, bottomStartYPercent, xPercent, convergePercent, duration) {
  254.     try {
  255.         topStartYPercent    = _clampPercent(topStartYPercent, 0.25);
  256.         bottomStartYPercent = _clampPercent(bottomStartYPercent, 0.75);
  257.         xPercent            = _clampPercent(xPercent, 0.5);
  258.         convergePercent     = _clampPercent(convergePercent, 0.5);
  259.         duration            = (typeof duration === 'number' && duration > 0) ? duration : 600;

  260.         var s = _gestureGetScreen();
  261.         var x  = s.w * xPercent;
  262.         var cy = s.h * convergePercent;
  263.         var gap = s.h * 0.05;

  264.         // 上指:顶部 → 中心上方
  265.         var pT = _safeCreatePath([
  266.             [x, s.h * topStartYPercent],
  267.             [x, cy - gap]
  268.         ], duration);
  269.         // 下指:底部 → 中心下方
  270.         var pB = _safeCreatePath([
  271.             [x, s.h * bottomStartYPercent],
  272.             [x, cy + gap]
  273.         ], duration);

  274.         _log("垂直捏合: 上 " + (topStartYPercent * 100).toFixed(0) + "% + 下 "
  275.              + (bottomStartYPercent * 100).toFixed(0) + "% → 中心,X="
  276.              + (xPercent * 100).toFixed(0) + "%,时长 " + duration + "ms");

  277.         var ok = _safeDispatchGesture([pT, pB]);
  278.         _log(ok ? "✓ 垂直捏合执行成功" : "✗ 垂直捏合执行失败");
  279.         if (!ok) _gestureFailHint();
  280.         return ok;
  281.     } catch (e) {
  282.         _log("✗ 垂直捏合函数异常: " + e);
  283.         return false;
  284.     }
  285. }

  286. /**
  287. * 对角线捏合(左上 + 右下 → 中心,看图缩小最常用)
  288. * @param duration 时长(毫秒)
  289. */
  290. function pinchDiagonal(duration) {
  291.     try {
  292.         duration = (typeof duration === 'number' && duration > 0) ? duration : 700;
  293.         var s = _gestureGetScreen();
  294.         var cx = s.w * 0.5, cy = s.h * 0.5;
  295.         var gx = s.w * 0.05, gy = s.h * 0.05;

  296.         var p1 = _safeCreatePath([
  297.             [s.w * 0.15, s.h * 0.20],
  298.             [cx - gx, cy - gy]
  299.         ], duration);
  300.         var p2 = _safeCreatePath([
  301.             [s.w * 0.85, s.h * 0.80],
  302.             [cx + gx, cy + gy]
  303.         ], duration);

  304.         _log("对角线捏合: 左上(15%,20%) + 右下(85%,80%) → 中心,时长 " + duration + "ms");

  305.         var ok = _safeDispatchGesture([p1, p2]);
  306.         _log(ok ? "✓ 对角线捏合执行成功" : "✗ 对角线捏合执行失败");
  307.         if (!ok) _gestureFailHint();
  308.         return ok;
  309.     } catch (e) {
  310.         _log("✗ 对角线捏合函数异常: " + e);
  311.         return false;
  312.     }
  313. }

  314. /**
  315. * 通用双指捏合(任意起点 + 指定收敛中心)
  316. * @param start1   起点1 {x:0~1, y:0~1}
  317. * @param start2   起点2 {x:0~1, y:0~1}
  318. * @param center   收敛中心 {x:0~1, y:0~1}
  319. * @param duration 时长(毫秒)
  320. */
  321. function pinchGeneric(start1, start2, center, duration) {
  322.     try {
  323.         if (!start1 || !start2 || typeof start1.x !== 'number' || typeof start2.x !== 'number') {
  324.             _log("✗ pinchGeneric 参数错误:start1/start2 必填且必须含 x/y 百分比");
  325.             return false;
  326.         }
  327.         var s = _gestureGetScreen();
  328.         center   = center   || { x: 0.5, y: 0.5 };
  329.         duration = (typeof duration === 'number' && duration > 0) ? duration : 700;
  330.         var ratio = 0.85; // 向中心靠近比例(留间距避免两指重合被识别成单指)

  331.         var cx = s.w * _clampPercent(center.x, 0.5);
  332.         var cy = s.h * _clampPercent(center.y, 0.5);

  333.         var p1 = _safeCreatePath([
  334.             [s.w * _clampPercent(start1.x, 0.25), s.h * _clampPercent(start1.y, 0.25)],
  335.             [s.w * _clampPercent(start1.x, 0.25) + (cx - s.w * _clampPercent(start1.x, 0.25)) * ratio,
  336.              s.h * _clampPercent(start1.y, 0.25) + (cy - s.h * _clampPercent(start1.y, 0.25)) * ratio]
  337.         ], duration);

  338.         var p2 = _safeCreatePath([
  339.             [s.w * _clampPercent(start2.x, 0.75), s.h * _clampPercent(start2.y, 0.75)],
  340.             [s.w * _clampPercent(start2.x, 0.75) + (cx - s.w * _clampPercent(start2.x, 0.75)) * ratio,
  341.              s.h * _clampPercent(start2.y, 0.75) + (cy - s.h * _clampPercent(start2.y, 0.75)) * ratio]
  342.         ], duration);

  343.         _log("通用捏合: (" + start1.x + "," + start1.y + ") + (" + start2.x + "," + start2.y
  344.              + ") → 中心(" + center.x + "," + center.y + "),时长 " + duration + "ms");

  345.         var ok = _safeDispatchGesture([p1, p2]);
  346.         _log(ok ? "✓ 通用捏合执行成功" : "✗ 通用捏合执行失败");
  347.         if (!ok) _gestureFailHint();
  348.         return ok;
  349.     } catch (e) {
  350.         _log("✗ 通用捏合函数异常: " + e);
  351.         return false;
  352.     }
  353. }

  354. /**
  355. * 水平放大(与捏合相反,双指向外分开)
  356. * @param duration 时长(毫秒)
  357. */
  358. function zoomHorizontal(duration) {
  359.     try {
  360.         duration = (typeof duration === 'number' && duration > 0) ? duration : 600;
  361.         var s = _gestureGetScreen();
  362.         var y   = s.h * 0.5;
  363.         var gap = s.w * 0.05;

  364.         var pL = _safeCreatePath([
  365.             [s.w * 0.5 - gap, y],
  366.             [s.w * 0.20, y]
  367.         ], duration);
  368.         var pR = _safeCreatePath([
  369.             [s.w * 0.5 + gap, y],
  370.             [s.w * 0.80, y]
  371.         ], duration);

  372.         _log("水平放大: 中间 → 左右张开,时长 " + duration + "ms");

  373.         var ok = _safeDispatchGesture([pL, pR]);
  374.         _log(ok ? "✓ 水平放大执行成功" : "✗ 水平放大执行失败");
  375.         if (!ok) _gestureFailHint();
  376.         return ok;
  377.     } catch (e) {
  378.         _log("✗ 水平放大函数异常: " + e);
  379.         return false;
  380.     }
  381. }

  382. // =====================================================
  383. //  3. 主流程(无碍模式:每个示例独立 try-catch,互不影响)
  384. // =====================================================
  385. function main() {
  386.     _log("========== 双指向中间滑动(捏合手势)示例【无碍模式】 ==========");

  387.     if (!_GESTURE_OK) {
  388.         _log("✗ 环境自检未通过,跳过所有手势执行(请先开启无障碍服务权限)");
  389.         return;
  390.     }

  391.     var s = _gestureGetScreen();
  392.     var screenW = s.w, screenH = s.h;
  393.     _log("屏幕尺寸: " + screenW + " x " + screenH);

  394.     // ---------- 示例 1:水平方向双指捏合(向中间滑动,缩小图片用) ----------
  395.     _log("\n--- 示例1: 水平捏合(向中间滑动,缩小)---");
  396.     try {
  397.         var pathLeft1 = new path();
  398.         pathLeft1.setDurTime(600);
  399.         pathLeft1.addPoint(screenW * 0.25, screenH * 0.5);
  400.         pathLeft1.addPoint(screenW * 0.45, screenH * 0.5);

  401.         var pathRight1 = new path();
  402.         pathRight1.setDurTime(600);
  403.         pathRight1.addPoint(screenW * 0.75, screenH * 0.5);
  404.         pathRight1.addPoint(screenW * 0.55, screenH * 0.5);

  405.         var ok1 = _safeDispatchGesture([pathLeft1, pathRight1]);
  406.         _log(ok1 ? "✓ 水平捏合执行成功" : "✗ 水平捏合执行失败");
  407.         if (!ok1) _gestureFailHint();
  408.     } catch (e) {
  409.         _log("✗ 示例1 异常: " + e);
  410.     }
  411.     try { sleep.second(1); } catch (e) {}

  412.     // ---------- 示例 2:垂直方向双指捏合(上指下滑 + 下指上滑 → 向中间) ----------
  413.     _log("\n--- 示例2: 垂直捏合(向中间滑动)---");
  414.     try {
  415.         var pathTop = new path();
  416.         pathTop.setDurTime(600);
  417.         pathTop.addPoint(screenW * 0.5, screenH * 0.25);
  418.         pathTop.addPoint(screenW * 0.5, screenH * 0.45);

  419.         var pathBottom = new path();
  420.         pathBottom.setDurTime(600);
  421.         pathBottom.addPoint(screenW * 0.5, screenH * 0.75);
  422.         pathBottom.addPoint(screenW * 0.5, screenH * 0.55);

  423.         var ok2 = _safeDispatchGesture([pathTop, pathBottom]);
  424.         _log(ok2 ? "✓ 垂直捏合执行成功" : "✗ 垂直捏合执行失败");
  425.         if (!ok2) _gestureFailHint();
  426.     } catch (e) {
  427.         _log("✗ 示例2 异常: " + e);
  428.     }
  429.     try { sleep.second(1); } catch (e) {}

  430.     // ---------- 示例 3:对角线捏合(左上+右下同时向中心靠拢) ----------
  431.     _log("\n--- 示例3: 对角线捏合(左上+右下 → 中心)---");
  432.     try {
  433.         var pathLT = new path();
  434.         pathLT.setDurTime(700);
  435.         pathLT.addPoint(screenW * 0.15, screenH * 0.2);
  436.         pathLT.addPoint(screenW * 0.42, screenH * 0.46);

  437.         var pathRB = new path();
  438.         pathRB.setDurTime(700);
  439.         pathRB.addPoint(screenW * 0.85, screenH * 0.8);
  440.         pathRB.addPoint(screenW * 0.58, screenH * 0.54);

  441.         var ok3 = _safeDispatchGesture([pathLT, pathRB]);
  442.         _log(ok3 ? "✓ 对角线捏合执行成功" : "✗ 对角线捏合执行失败");
  443.         if (!ok3) _gestureFailHint();
  444.     } catch (e) {
  445.         _log("✗ 示例3 异常: " + e);
  446.     }
  447.     try { sleep.second(1); } catch (e) {}

  448.     // ---------- 示例 4:放大手势(与捏合相反,双指向外分开) ----------
  449.     _log("\n--- 示例4: 水平放大(双指向外分开)---");
  450.     try {
  451.         var pathLeft4 = new path();
  452.         pathLeft4.setDurTime(600);
  453.         pathLeft4.addPoint(screenW * 0.45, screenH * 0.5);
  454.         pathLeft4.addPoint(screenW * 0.20, screenH * 0.5);

  455.         var pathRight4 = new path();
  456.         pathRight4.setDurTime(600);
  457.         pathRight4.addPoint(screenW * 0.55, screenH * 0.5);
  458.         pathRight4.addPoint(screenW * 0.80, screenH * 0.5);

  459.         var ok4 = _safeDispatchGesture([pathLeft4, pathRight4]);
  460.         _log(ok4 ? "✓ 水平放大执行成功" : "✗ 水平放大执行失败");
  461.         if (!ok4) _gestureFailHint();
  462.     } catch (e) {
  463.         _log("✗ 示例4 异常: " + e);
  464.     }
  465.     try { sleep.second(1); } catch (e) {}

  466.     // ---------- 示例 5:调用封装函数 ----------
  467.     _log("\n--- 示例5: 调用封装函数 pinchHorizontal() ---");
  468.     try {
  469.         var ok5 = pinchHorizontal(0.2, 0.8, 0.5, 0.5, 800);
  470.         _log(ok5 ? "✓ 封装函数调用成功" : "✗ 封装函数调用失败(不影响脚本继续)");
  471.     } catch (e) {
  472.         _log("✗ 示例5 异常: " + e);
  473.     }
  474.     try { sleep.second(1); } catch (e) {}

  475.     // ---------- 示例 6:封装函数集合演示(垂直/对角线/放大/通用) ----------
  476.     _log("\n--- 示例6: 封装函数集合演示 ---");
  477.     try {
  478.         pinchVertical(0.2, 0.8, 0.5, 0.5, 700);
  479.         try { sleep.second(1); } catch (e) {}
  480.         pinchDiagonal(800);
  481.         try { sleep.second(1); } catch (e) {}
  482.         zoomHorizontal(700);
  483.         try { sleep.second(1); } catch (e) {}
  484.         pinchGeneric({x: 0.1, y: 0.1}, {x: 0.9, y: 0.9}, {x: 0.5, y: 0.5}, 800);
  485.     } catch (e) {
  486.         _log("✗ 示例6 异常: " + e);
  487.     }

  488.     _log("\n========== 示例全部执行完成(无碍模式) ==========");
  489. }

  490. // 执行主函数
  491. main();
复制代码



untoAIWROK双指向中间滑动捏合手势完整示例nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
群发软件无障碍方式双指向中间滑动放大缩小完整示例
无障碍方式双指向中间滑动放大缩小完整示例
群发软件AIWROK双指向中间滑动捏合手势完整示例
AIWROK双指向中间滑动捏合手势完整示例
群发软件实战使用桌面控制WebSocket
实战使用桌面控制WebSocket
群发软件WebSocket调试okhttp版
WebSocket调试okhttp版
群发软件快手极速版自动刷视频
快手极速版自动刷视频
群发软件极速视频APP刷金币
极速视频APP刷金币
群发软件语音合成核心模块AIWROK 单文件版
语音合成核心模块AIWROK 单文件版
群发软件AIWROK软件自动文字转语音例子
AIWROK软件自动文字转语音例子
群发软件AIWROK adb.exec() 实用工具库 —— 常用功能直接调用版
AIWROK adb.exec() 实用工具库 —— 常用功能直接调用版
群发软件安卓AIWROK获取包名所有方法汇总
安卓AIWROK获取包名所有方法汇总
群发软件AIWROK软件番茄小说自动阅读刷金币示例
AIWROK软件番茄小说自动阅读刷金币示例
信息发布软件AIWROK软件无碍模式一键删除所有APP版示例
AIWROK软件无碍模式一键删除所有APP版示例
信息发布软件AIWROK软件无碍模式auto模块抖音极速版滑动刷视频
AIWROK软件无碍模式auto模块抖音极速版滑动刷视频
信息发布软件快手极速版自动刷视频无障碍模式
快手极速版自动刷视频无障碍模式
信息发布软件AIWROK软件代理模式一键删除桌面所有APP版示例
AIWROK软件代理模式一键删除桌面所有APP版示例
信息发布软件AIWROK软件自动找图利用agent代理模式删除应用版示例
AIWROK软件自动找图利用agent代理模式删除应用版示例
信息发布软件解析Kimi返回的拖动距离示例
解析Kimi返回的拖动距离示例
信息发布软件自动截图并发送给DEEPSEEK识别示例过程
自动截图并发送给DEEPSEEK识别示例过程
信息发布软件AIWROK软件测试文心识别识别验证码示例
AIWROK软件测试文心识别识别验证码示例
信息发布软件元宝截图B站验证码示例测试
元宝截图B站验证码示例测试
信息发布软件示例千问自动采集文章保存记事本
示例千问自动采集文章保存记事本
信息发布软件豆包识别验证码加拖动验证码示例
豆包识别验证码加拖动验证码示例
信息发布软件豆包对话采集示例
豆包对话采集示例
信息发布软件启动自动百度贴吧发图片
启动自动百度贴吧发图片
信息发布软件自动百度贴吧示例
自动百度贴吧示例
信息发布软件代理模式简书自动流程
代理模式简书自动流程
信息发布软件启动极速版任务页看小说赚钱自动阅读
启动极速版任务页看小说赚钱自动阅读
信息发布软件agent代理模式功能小结
agent代理模式功能小结
信息发布软件完整苹果IOS小脚本文本输入与粘贴流程
完整苹果IOS小脚本文本输入与粘贴流程
信息发布软件AIWROK使用activity列表开关与进度条的协同交互
AIWROK使用activity列表开关与进度条的协同交互
群发软件苹果脚本找图后Detect对象各种方法演示
苹果脚本找图后Detect对象各种方法演示
群发软件苹果脚本网络API监控与数据管理工具
苹果脚本网络API监控与数据管理工具
群发软件IOS苹果脚本TXT文件读写H5日志打印完整示例
IOS苹果脚本TXT文件读写H5日志打印完整示例
群发软件AIWROK软件演示多线程创建暂停恢复
AIWROK软件演示多线程创建暂停恢复
群发软件AIWROK软件定时检查页面状态防止卡死技巧
AIWROK软件定时检查页面状态防止卡死技巧
群发软件安卓脚本runTime相关功能示例
安卓脚本runTime相关功能示例
群发软件floatUI实例秒显示秒关闭吐司功能
floatUI实例秒显示秒关闭吐司功能
群发软件苹果脚本HID多行实例粘帖板示例
苹果脚本HID多行实例粘帖板示例
群发软件安卓脚本HID节点查找完整方法示例
HID节点查找完整方法示例
群发软件AIWROK软件框架的抖音自动化营销系统
AIWROK软件框架的抖音自动化营销系统
群发软件赛博朋克任务控制中心H5示例
赛博朋克任务控制中心H5示例
群发软件苹果脚本现代深色UI设计风格
现代深色UI设计风格
群发软件AIWROK软件智能任务监控悬浮窗
AIWROK软件智能任务监控悬浮窗
群发软件AIWROK软件事件监听示例
AIWROK软件事件监听示例
群发软件QZ掘金原生UI界面
QZ掘金原生UI界面
群发软件安卓脚本auto方法完整示例
安卓脚本auto方法完整示例
群发软件安卓脚本暂停弹出确认对话框
安卓脚本暂停弹出确认对话框
群发软件苹果iOS脚本天气信息查询工具
苹果iOS脚本天气信息查询工具
群发软件安卓脚本简化版H5日志输出窗口
安卓脚本简化版H5日志输出窗口
群发软件安卓脚本简化版H5日志输出窗口
安卓脚本简化版H5日志输出窗口
群发软件安卓脚本应用重置、代理模式监控及补丁升级
安卓脚本应用重置、代理模式监控及补丁升级
群发软件安卓脚本里的打开关闭安装以及卡密授权信息
安卓脚本里的打开关闭安装以及卡密授权信息
群发软件AIWROK软件脚本GET下载文件并检测0KB工具
AIWROK软件脚本GET下载文件并检测0KB工具
群发软件安卓脚本HID按键方法完整示例
安卓脚本HID按键方法完整示例
群发软件AIWROK软件键鼠HID滑动所有方法功能演示
AIWROK软件键鼠HID滑动所有方法功能演示
群发软件苹果脚本里HID的5种滑动方法的使用
苹果脚本里HID的5种滑动方法的使用
群发软件苹果脚本示例7种不同的OCR识别和点击方法
苹果脚本示例7种不同的OCR识别和点击方法
群发软件AIWROK软件安卓脚本FTP上传下载例子
AIWROK软件安卓脚本FTP上传下载例子
群发软件AIWROK软件脚本JSON转换示例
AIWROK软件脚本JSON转换示例
群发软件AIWROK软件运算符高级应用实例
AIWROK软件运算符高级应用实例
群发软件JavaScript语法小示例
JavaScript语法小示例
群发软件展示JavaScript各种语句标识符的实际应用
展示JavaScript各种语句标识符的实际应用
群发软件AIWROK条件语句实用示例智能活动推荐系统
AIWROK条件语句实用示例智能活动推荐系统
群发软件AIWROK软件示例数组方法实战应用
AIWROK软件示例数组方法实战应用
群发软件示例JavaScript的 try-catch-finally-throw用法
示例JavaScript的 try-catch-finally-throw用法

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2026-8-18 08:26 , Processed in 0.169579 second(s), 49 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表