Greasy Fork is available in English.

CKDragHelper

A simple dragging helper library

Цей скрипт не слід встановлювати безпосередньо. Це - бібліотека для інших скриптів для включення в мета директиву // @require https://update.greasyfork.org/scripts/428694/945686/CKDragHelper.js

  1. // ==UserScript==
  2. // @name CKDragHelper
  3. // @namespace dragger.ckylin.site
  4. // @version 0.1
  5. // @author CKylinMC
  6. // @grant unsafeWindow
  7. // @license GPLv3 License
  8. // ==/UserScript==
  9. if(!("wait" in window)){
  10. window.wait = (t) => {
  11. return new Promise(r => setTimeout(r, t));
  12. }
  13. }
  14. const dragger = {
  15. defaultHandler: (val) => console.log("DRAG:", val),
  16. waitForDragger: async (waitStatus = true) => {
  17. while (dragger.dragging !== waitStatus) await wait(10);
  18. return dragger;
  19. },
  20. regHandler: async (func) => {
  21. if (!(func instanceof Function)) throw "Param must be a func!";
  22. await dragger.waitForDragger(false);
  23. dragger.handler = func;
  24. return dragger;
  25. },
  26. handler: () => {
  27. },
  28. dragging: false,
  29. initialDragData: {
  30. x: 0,
  31. y: 0
  32. },
  33. lastDragData: {
  34. x: 0,
  35. y: 0
  36. },
  37. startDrag: (e) => {
  38. if (dragger.dragging) return;
  39. dragger.dragging = true;
  40. console.log(dragger.initialDragData);
  41. dragger.initialDragData.x = e.screenX;
  42. dragger.initialDragData.y = e.screenY;
  43. dragger.lastDragData.x = e.screenX;
  44. dragger.lastDragData.y = e.screenY;
  45. document.body.addEventListener("mouseup", dragger.stopDrag);
  46. document.body.addEventListener("mousemove", dragger.handleDrag);
  47. console.info("DRAG:", "Start Drag");
  48. return dragger;
  49. },
  50. handleDrag: (e) => {
  51. const currPos = {
  52. x: e.screenX,
  53. y: e.screenY
  54. };
  55. const initPos = dragger.initialDragData;
  56. const delta = {
  57. x: initPos.x - currPos.x,
  58. y: initPos.y - currPos.y
  59. }
  60. const lastdelta = {
  61. x: dragger.lastDragData.x - currPos.x,
  62. y: dragger.lastDragData.y - currPos.y
  63. }
  64. dragger.lastDragData = currPos;
  65. dragger.handler(delta, lastdelta);
  66. },
  67. stopDrag: () => {
  68. document.body.removeEventListener("mouseup", dragger.stopDrag);
  69. document.body.removeEventListener("mousemove", dragger.handleDrag);
  70. dragger.handler = dragger.defaultHandler;
  71. console.info("DRAG:", "Stop Drag");
  72. dragger.dragging = false;
  73. return dragger;
  74. },
  75. }