vTitleInManageCenter.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import Vue from "vue";
  2. let timerId = null;
  3. let intervalId = null;
  4. let isShowTitle = false;
  5. let titleNode = null;
  6. function removeTitle() {
  7. if (!isShowTitle) {
  8. clearTimeout(timerId);
  9. } else {
  10. isShowTitle = false;
  11. document.body.removeChild(titleNode);
  12. clearInterval(intervalId);
  13. }
  14. }
  15. Vue.directive("title", {
  16. bind: function (el, binding) {
  17. if (!binding.value) {
  18. return;
  19. }
  20. el.addEventListener(
  21. "mousemove",
  22. function (e) {
  23. if (!isShowTitle) {
  24. clearTimeout(timerId);
  25. timerId = setTimeout(() => {
  26. isShowTitle = true;
  27. titleNode = document.createElement("div");
  28. titleNode.style.position = "fixed";
  29. titleNode.style.zIndex = 2147483647;
  30. titleNode.style.backgroundColor = "#ffffff";
  31. titleNode.style.borderRadius = "2px";
  32. titleNode.style.border = "1px solid rgba(151, 151, 151, 0.2)";
  33. titleNode.style.padding = "2px 6px";
  34. titleNode.style.fontSize = "12px";
  35. titleNode.style.color = "#323233";
  36. titleNode.innerText = binding.value;
  37. titleNode.style.left = e.clientX + 11 + "px";
  38. titleNode.style.top = e.clientY + 18 + "px";
  39. document.body.appendChild(titleNode);
  40. if (
  41. e.clientX + 11 + titleNode.offsetWidth >
  42. document.documentElement.clientWidth
  43. ) {
  44. titleNode.style.left =
  45. document.documentElement.clientWidth -
  46. titleNode.offsetWidth +
  47. "px";
  48. }
  49. if (
  50. e.clientY + 18 + titleNode.offsetHeight >
  51. document.documentElement.clientHeight
  52. ) {
  53. titleNode.style.top =
  54. document.documentElement.clientHeight -
  55. titleNode.offsetHeight +
  56. "px";
  57. }
  58. intervalId = setInterval(() => {
  59. if (!document.contains(el)) {
  60. removeTitle();
  61. }
  62. }, 300);
  63. }, 500);
  64. }
  65. },
  66. {
  67. passive: false,
  68. }
  69. );
  70. el.addEventListener("mouseleave", removeTitle);
  71. el.addEventListener("mousedown", removeTitle);
  72. el.addEventListener("keydown", removeTitle);
  73. el.addEventListener("scroll", removeTitle);
  74. el.addEventListener("dragover", removeTitle);
  75. el.addEventListener("dragleave", removeTitle);
  76. },
  77. });