B2B网络软件

标题: 无障碍方式双指向中间滑动放大缩小完整示例 [打印本页]

作者: YYPOST群发软件    时间: 2 小时前
标题: 无障碍方式双指向中间滑动放大缩小完整示例
无障碍方式双指向中间滑动放大缩小完整示例
无障碍方式双指向中间滑动放大缩小完整示例 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();
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2