vTitleInEditor.js 2.3 KB

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