【问题标题】:How to close outer v-tooltip on inner v-tooltip hover如何在内部 v-tooltip 悬停时关闭外部 v-tooltip
【发布时间】:2018-11-01 17:51:05
【问题描述】:

我有两个工具提示,一个在外部元素上,另一个在内部元素上,如下所示:

当显示内部工具提示时,如何删除外部工具提示?

Here's a Fiddle

代码非常标准,但请记住,有时v-tooltip 会将工具提示像模态一样放在正文级别,因此工具提示实际上可能没有嵌套。

<div id="app">
  <div v-tooltip="'Outer Tooltip'">
    Outer Area
    <div v-tooltip="'Inner Tooltip'">
      okokok
    </div>
  </div>
</div>

这是我尝试过的:

在外部工具提示上,我放置了一个这样的类:

v=tooltip="{content:'Outer Tooltip', classes:['killOnOtherOpen']}"

然后在内部工具提示上:

v=tooltip="getTextAndDoStuff()"
...
getTextAndDoStuff(){
    $('.killOnOtherOpen').close();
    return "Inner Tooltip";
}

但我得到一个错误:

渲染错误:“TypeError: $(...).close 不是函数”

我试过这样:.close; - 就像 close 不是一个函数 - 但什么也没发生,甚至没有错误。

我正在寻找一种更优雅或更标准的方法来执行此操作。为每个嵌套的工具提示集添加一个类和一个方法需要一段时间。

【问题讨论】:

    标签: javascript vue.js vuejs2 v-tooltip


    【解决方案1】:

    您可以通过在处理mouseoverevent 时使用stop 修饰符来解决此问题,并添加一个名为isOpen 的布尔属性来显示/隐藏外部工具提示。

    stop 修饰符将阻止事件传播

    console.clear()
    
    new Vue({
      el: '#app',
      data: {
        isOpen: false,
        message: 'Outer Tooltip'
    
      }
    })
    body {
      font-family: sans-serif;
      margin: 42px;
    }
    
    .tooltip {
      display: block !important;
      z-index: 10000;
    }
    
    .tooltip .tooltip-inner {
      background: black;
      color: white;
      border-radius: 16px;
      padding: 5px 10px 4px;
    }
    
    .tooltip .tooltip-arrow {
      width: 0;
      height: 0;
      border-style: solid;
      position: absolute;
      margin: 5px;
      border-color: black;
    }
    
    .tooltip[x-placement^="top"] {
      margin-bottom: 5px;
    }
    
    .tooltip[x-placement^="top"] .tooltip-arrow {
      border-width: 5px 5px 0 5px;
      border-left-color: transparent !important;
      border-right-color: transparent !important;
      border-bottom-color: transparent !important;
      bottom: -5px;
      left: calc(50% - 5px);
      margin-top: 0;
      margin-bottom: 0;
    }
    
    .tooltip[x-placement^="bottom"] {
      margin-top: 5px;
    }
    
    .tooltip[x-placement^="bottom"] .tooltip-arrow {
      border-width: 0 5px 5px 5px;
      border-left-color: transparent !important;
      border-right-color: transparent !important;
      border-top-color: transparent !important;
      top: -5px;
      left: calc(50% - 5px);
      margin-top: 0;
      margin-bottom: 0;
    }
    
    .tooltip[x-placement^="right"] {
      margin-left: 5px;
    }
    
    .tooltip[x-placement^="right"] .tooltip-arrow {
      border-width: 5px 5px 5px 0;
      border-left-color: transparent !important;
      border-top-color: transparent !important;
      border-bottom-color: transparent !important;
      left: -5px;
      top: calc(50% - 5px);
      margin-left: 0;
      margin-right: 0;
    }
    
    .tooltip[x-placement^="left"] {
      margin-right: 5px;
    }
    
    .tooltip[x-placement^="left"] .tooltip-arrow {
      border-width: 5px 0 5px 5px;
      border-top-color: transparent !important;
      border-right-color: transparent !important;
      border-bottom-color: transparent !important;
      right: -5px;
      top: calc(50% - 5px);
      margin-left: 0;
      margin-right: 0;
    }
    
    .tooltip[aria-hidden='true'] {
      visibility: hidden;
      opacity: 0;
      transition: opacity .15s, visibility .15s;
    }
    
    .tooltip[aria-hidden='false'] {
      visibility: visible;
      opacity: 1;
      transition: opacity .15s;
    }
    
    .box {
      border: 1px solid red;
      border-radius: 2px;
      padding: 15px;
      margin: 20px;
      text-align: center;
      cursor: pointer;
    }
    
    .box:hover {
      box-shadow: 0 0 4px;
    }
    <script src="https://unpkg.com/popper.js"></script>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/v-tooltip"></script>
    
    <div id="app">
      <div v-tooltip="{content: message,
        show: isOpen}" class="box" @mouseover.stop="isOpen=true">
        {{ message }}
        <div v-tooltip="'Inner tooltip'" @mouseover.stop="isOpen=false" class="box">
          okokok
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多