自定义指令实现文字Tooltip

Vue自定义指令代码 

Vue.directive('textPop', el => {
  el.style.whiteSpace = 'nowrap' // 默认使用此指令必须一行显示
  el.style.cursor = 'pointer' //  使用此指令DOM强制变小手
  const realityWidth = el.scrollWidth // 实际宽度
  const dummy = el.clientWidth //虚拟宽度
  if (realityWidth > dummy) {
    el.style.overflow = 'hidden'
    el.style.textOverflow = 'ellipsis'
    el.addEventListener('mouseenter', (e) => {
      if (document.getElementsByClassName('v-directive-textPop').length) return
      const popDiv = document.createElement('div')
      const cssObj = e.target.getBoundingClientRect()
      popDiv.className = 'v-directive-textPop'
      popDiv.style.left = `${cssObj.left - (cssObj.width / 2)}px`
      popDiv.style.top = `${cssObj.top - cssObj.height - 30}px`
      popDiv.textContent = e.target.innerText
      document.body.appendChild(popDiv)
    })
    el.addEventListener('mouseleave', () => {
      const popList = document.getElementsByClassName('v-directive-textPop')
      if (!popList || !popList.length) return
      document.body.removeChild(popList[0])
    })
  }
})

css全局样式代码

.v-directive-textPop {
  position: fixed;
  border-radius: 5px;
  padding: 10px;
  font-size: 0.8rem;
  cursor: pointer;
  background: #000;
  color: #fff;
  box-shadow: 0 0 0px 1px #ccc;
  z-index: 2022;
  &::after {
    content: '';
    width: 0;
    height: 0;
    border: 5px solid transparent;
    border-top: 5px solid #000;
    position: absolute;
    left: 50%;
    top: 100%;
    transform: translateX(-50%);
  }
}

 使用方式

 <div v-textPop style="width : 100px;">hello,word!today is very Good</div>

实现效果

 

 目前只开发了dark风格的Tooltip!后续有时间可更迭其他风格和更多自定义选项!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值