演示助手

显示鼠标位置和按下的按键。

目前为 2023-04-05 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Your Show
  3. // @name:zh-CN 演示助手
  4. // @description Display the mouse position and pressed keys.
  5. // @description:zh-CN 显示鼠标位置和按下的按键。
  6. // @namespace https://gf.qytechs.cn/users/197529
  7. // @version 0.1.3
  8. // @author kkocdko
  9. // @license Unlicense
  10. // @match *://*/*
  11. // ==/UserScript==
  12. "use strict";
  13.  
  14. const css = ([s]) => `<style>${s}</style>`;
  15. {
  16. const host = document.body.appendChild(document.createElement("div"));
  17. const root = host.attachShadow({ mode: "open" });
  18. root.innerHTML = css`
  19. :host {
  20. position: fixed;
  21. z-index: 2147483647;
  22. }
  23. div {
  24. position: fixed;
  25. z-index: 2147483647;
  26. width: 30px;
  27. height: 30px;
  28. left: 0;
  29. top: 0;
  30. background: #3f51b5a1;
  31. border-radius: 50%;
  32. /* transition: transform 0.2s 0.06s; */
  33. user-select: none;
  34. pointer-events: none;
  35. border-top-left-radius: 0;
  36. }
  37. `;
  38. const el = root.appendChild(document.createElement("div"));
  39. addEventListener("pointermove", (e) => {
  40. el.style.transform = "translate(" + e.clientX + "px," + e.clientY + "px)";
  41. });
  42. }
  43. {
  44. const host = document.body.appendChild(document.createElement("div"));
  45. const root = host.attachShadow({ mode: "open" });
  46. root.innerHTML = css`
  47. :host {
  48. position: fixed;
  49. z-index: 2147483647;
  50. }
  51. div {
  52. position: fixed;
  53. top: 16px;
  54. right: 16px;
  55. z-index: 2147483647;
  56. font-size: 20px;
  57. text-shadow: 1px 1px #fff, 1px -1px #fff, -1px 1px #fff, -1px -1px #fff;
  58. user-select: none;
  59. pointer-events: none;
  60. font-family: monospace;
  61. }
  62. span {
  63. line-height: 2;
  64. padding: 0 0.5em;
  65. margin: 4px;
  66. display: inline-block;
  67. box-shadow: 0 1px 5px 1px #888;
  68. border-radius: 8px;
  69. background: #fff;
  70. }
  71. `;
  72.  
  73. // <div><span>Ctrl</span> + <span>M</span></div>
  74. // <div><span>Shift</span> + <span>U</span></div>
  75. // keyboard layout
  76. const serial = new Map(); // (code, stamp)
  77. const div = root.appendChild(document.createElement("div"));
  78. const names = {};
  79. for (const c of [...Array(13).keys()]) names[`F${c}`] = `F${c}`;
  80. for (const c of [...Array(10).keys()]) names[`Digit${c}`] = c;
  81. for (const c of [...Array(26).keys()].map((v) => String.fromCharCode(v + 65)))
  82. names[`Key${c}`] = c;
  83. names.ControlLeft = names.ControlRight = "Ctrl";
  84. names.ShiftLeft = names.ShiftRight = "Shift";
  85. names.AltLeft = names.AltRight = "Alt";
  86. names.BracketRight = "]";
  87. names.BracketLeft = "[";
  88. names.Slash = "/";
  89. names.Backquote = "`";
  90. const refresh = () => {
  91. const pressed = [
  92. ...new Set(
  93. [...serial.keys()].map((v) => {
  94. if (!names[v]) {
  95. names[v] = v;
  96. console.log(`showkeydown: unknown key [ ${v} ]`);
  97. }
  98. return names[v];
  99. })
  100. ).values(),
  101. ];
  102. div.innerHTML = pressed.map((name) => `<span>${name}</span>`).join(" ");
  103. };
  104. addEventListener("keydown", ({ code }) => {
  105. serial.set(code, Date.now());
  106. refresh();
  107. });
  108. addEventListener("keyup", ({ code }) => {
  109. serial.delete(code);
  110. refresh();
  111. });
  112. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址