【vue】自定义指令,固定宽度超出隐藏并鼠标移入tooltips


效果以及需求

需求图

底部固定宽度展示多个标签,标签宽度不等,如果超出宽度,则隐藏,并且追加最后一个标签,鼠标移入展示被隐藏的标签名称

//自定义指令 代码片段
export const isOverflow = {
  inserted: function (el, binding) {
    let isOverflow = el.children;
    let cWidthTotal = 0
    let elWidth = el.clientWidth;
    let overflowTxt = '';
    let hasOver = false
    // let
    for (let i in isOverflow) {
      cWidthTotal = cWidthTotal + isOverflow[i].clientWidth + 8
      if (cWidthTotal > elWidth - 48) {
        hasOver = true
        isOverflow[i].style.display = 'none'
        overflowTxt = isOverflow[i].innerText + ',' + overflowTxt
      }
    }
    overflowTxt = overflowTxt.substring(0, overflowTxt.lastIndexOf(','));
    if (hasOver) {
      let con = el.innerHTML
      el.innerHTML = con + `
      <el-tooltip class="item" effect="dark" content="${overflowTxt}" placement="top-start">
        <span class="tag-item">...</span>
      </el-tooltip>
      `
      let tooltip = document.createElement('div')
      tooltip.className = 'tooltip tooltip-top'
      document.body.appendChild(tooltip)
      el.lastElementChild.className = el.lastElementChild.className + ' ellipsis'
      el.lastElementChild.addEventListener('mouseenter', e => {
        let curtarget = e.currentTarget
        if (curtarget.clientWidth == curtarget.scrollWidth) {
          var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft //分别兼容ie和chrome
          var scrollY = document.documentElement.scrollTop || document.body.scrollTop
          var left = e.pageX || e.clientX + scrollX //兼容火狐和其他浏览器
          var top = e.pageY || e.clientY + scrollY
          tooltip.style.left = left + 'px'
          tooltip.style.top = top - 5 + 'px'
          tooltip.style.zIndex = 99999
          tooltip.innerHTML = overflowTxt
          tooltip.className = 'tooltip tooltip-top show'
        }
      })
      el.lastElementChild.addEventListener('mouseleave', e => {
        tooltip.className = 'tooltip tooltip-top'
      })

    }
    // el.appendChild('<span>。测。试。</span>')

    console.log(overflowTxt)
  },

};

相关样式一并使用

// layout 布局
.tooltip{
    /* visibility: hidden; */
    display: none;
    position: absolute;
    width: auto;
    white-space: nowrap;
    background: #303133;
    color: #FFFFFF;
    text-align: center;
    padding: 10px;
    font-size: 12px;
    line-height: 1.2;
    min-width: 10px;
    border-radius: 4px;
    opacity: 0.9;
    word-wrap: break-word;
    z-index: 1000;
    max-width: 500px;
    white-space: normal;
    text-align: left;
}
.tooltip.tooltip-top{
    transform:translate(-50%, -125%)
}
.tooltip.tooltip-bottom{
    transform:translate(-50%, 125%)
}
.tooltip.show{
    /* visibility: visible; */
    display: block;
}
.tooltip::after{
    content: "";
    position: absolute;
    left: 50%;
    opacity: 0.9;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
}
.tooltip.tooltip-top::after{
    top: 100%;
    border-color: #303133 transparent transparent transparent;
}
.tooltip.tooltip-bottom::after{
    top: -10px;
    border-color: transparent transparent #303133 transparent;
}

声明:yopaopao|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 【vue】自定义指令,固定宽度超出隐藏并鼠标移入tooltips


正如我心中爱你美丽 又怎能嘴上装四大皆空