1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import Vue from 'vue'
- Vue.directive('title', {
- bind: function (el, binding) {
- if (!binding.value) {
- return
- }
- let timerId = null
- let isShowTitle = false
- let titleNode = null
- el.addEventListener('mousemove', function(e) {
- if (!isShowTitle) {
- clearTimeout(timerId)
- timerId = setTimeout(() => {
- isShowTitle = true
- titleNode = document.createElement('div')
- titleNode.style.position = 'fixed',
- titleNode.style.zIndex = 100,
- titleNode.style.backgroundColor = '#191A1C'
- titleNode.style.borderRadius = '2px'
- titleNode.style.border = '1px solid rgba(151, 151, 151, 0.2)'
- titleNode.style.padding = '2px 6px'
- titleNode.style.fontSize = '12px'
- titleNode.style.color = 'rgba(255, 255, 255, 0.6)'
- titleNode.innerText = binding.value
- titleNode.style.left = e.clientX + 11 + 'px'
- titleNode.style.top = e.clientY + 18 + 'px'
- document.body.appendChild(titleNode)
- if (e.clientX + 11 + titleNode.offsetWidth > document.documentElement.clientWidth) {
- titleNode.style.left = document.documentElement.clientWidth - titleNode.offsetWidth + 'px'
- }
- if (e.clientY + 18 + titleNode.offsetHeight > document.documentElement.clientHeight) {
- titleNode.style.top = document.documentElement.clientHeight - titleNode.offsetHeight + 'px'
- }
- }, 500);
- }
- }, {
- passive: false,
- })
- el.addEventListener('mouseleave', function () {
- if (!isShowTitle) {
- clearTimeout(timerId)
- } else {
- isShowTitle = false
- document.body.removeChild(titleNode)
- }
- })
- el.addEventListener('mousedown', function () {
- if (!isShowTitle) {
- clearTimeout(timerId)
- } else {
- isShowTitle = false
- document.body.removeChild(titleNode)
- }
- })
- el.addEventListener('keydown', function () {
- if (!isShowTitle) {
- clearTimeout(timerId)
- } else {
- isShowTitle = false
- document.body.removeChild(titleNode)
- }
- })
- el.addEventListener('scroll', function () {
- if (!isShowTitle) {
- clearTimeout(timerId)
- } else {
- isShowTitle = false
- document.body.removeChild(titleNode)
- }
- })
- },
- })
|