javascript - 如何在内部 v-tooltip 悬停时关闭外部 v-tooltip
问题描述
我有两个工具提示,一个在外部元素上,另一个在内部元素上,如下所示:
显示内部工具提示时如何删除外部工具提示?
代码非常标准,但请记住,有时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 不是一个函数 - 但什么也没发生,甚至没有错误。
我正在寻找一种更优雅或更标准的方法来做到这一点。为每个嵌套的工具提示集添加一个类和一个方法需要一段时间。
解决方案
您可以通过在处理事件时使用stop
修饰符来解决此问题mouseover
,并添加一个名为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>
推荐阅读
- javascript - Javascript:如何改进这些地图功能?
- html - 如何将汉堡菜单更改为常规菜单?
- c# - 不使用连接的Linq查询两个表的不同值
- javascript - How do you represent a class as a function in JavaScript
- c - 为什么我的布尔函数结果在主函数中无法识别
- python-3.x - 如何强制 Python 进入 64 位模式
- python - How to get data that is not present in inspect element but rendered on browser?
- html - 如何将背景更改为与 xd 设计相同?
- java - can I create many different indexed ImageViews using the same background? (android)
- c++ - C Language: Initializing float variable with a calculation