jQuery-Extensions-touchJS

jQuery-Extensions-touchJS是一个非常简单的jQuery touch扩展,用于适配移动端的常用touch操作(点击tab、长按longPress、滑动left right up down)

目前為 2022-11-08 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/454450/1114716/jQuery-Extensions-touchJS.js

  1. // ==UserScript==
  2. // @name jQuery-Extensions-touchJS
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.1
  5. // @description jQuery-Extensions-touchJS是一个非常简单的jQuery touch扩展,用于适配移动端的常用touch操作(点击tab、长按longPress、滑动left right up down)
  6. // @author tutu辣么可爱(greasyfork)/IcedWatermelonJuice(github)
  7. // @grant none
  8. // ==/UserScript==
  9. (function($) {
  10. if (typeof $ !== "function" && typeof jQuery !== "function") {
  11. console.log("jQuery-Extensions-touchJS 缺少jQuery依赖")
  12. return false;
  13. }
  14. $.fn.touch = function(v, fn) {
  15. // 预处理
  16. var defFn = function() {
  17. return false
  18. },
  19. fnMap = {
  20. "def": defFn,
  21. "left": defFn,
  22. "right": defFn,
  23. "top": defFn,
  24. "down": defFn,
  25. "tap": defFn,
  26. "longPress": defFn,
  27. "longPressCancel": defFn
  28. };
  29. if (typeof v === "string" && typeof fn === "function" && fnMap.hasOwnProperty(v)) {
  30. fnMap[v] = fn;
  31. } else if (typeof v === "object" && !fn) {
  32. fnMap = $.extend({}, fnMap, v);
  33. }
  34. // 正式处理
  35. if (v) {
  36. var t = $(this),
  37. i = -1,
  38. x = -1,
  39. l = false,
  40. x1, x2, y1, y2;
  41. t[0].addEventListener('touchstart', ts, false);
  42. t[0].addEventListener('touchmove', tm, false);
  43. t[0].addEventListener('touchend', te, false);
  44.  
  45. //具体实现
  46. function init(e, flag) { //初始化
  47. if (flag !== false) {
  48. e = e || window.event
  49. e.preventDefault();
  50. }
  51. clearTimeout(x);
  52. clearTimeout(i);
  53. x = -1, i = -1;
  54. return e;
  55. }
  56.  
  57. function dir(x1, y1, x2, y2) { //判方向
  58. if (Math.abs(y2 - y1) < Math.abs(x2 - x1)) {
  59. if (x2 > x1) {
  60. return "right"
  61. } else {
  62. return "left"
  63. }
  64. } else {
  65. if (y2 > y1) {
  66. return "down"
  67. } else {
  68. return "up"
  69. }
  70. }
  71. return "def"
  72. }
  73.  
  74. function ts(e) { //touchstart
  75. var e = init(e);
  76. x1 = e.changedTouches[0].clientX;
  77. y1 = e.changedTouches[0].clientY;
  78. i = setTimeout(function() {
  79. l = true;
  80. fnMap["longPress"]();
  81. }, 600)
  82. }
  83.  
  84. function tm(e) { //touchmove
  85. var e = e || window.event;
  86. x2 = e.changedTouches[0].clientX;
  87. y2 = e.changedTouches[0].clientY;
  88. if (Math.abs(x1 - x2) > 10 || Math.abs(y1 - y2) > 10) {
  89. init(e);
  90. fnMap[dir(x1, y1, x2, y2)]()
  91. }
  92. }
  93.  
  94. function te(e) { //touchend
  95. var e = init(e);
  96. if (l) {
  97. l=false;
  98. fnMap["longPressCancel"]();
  99. } else {
  100. fnMap["tap"]();
  101. }
  102. }
  103. }
  104. return $(this)
  105. }
  106. })(jQuery);