- 在vue项目中引入jQuery
- 新建
directive 文件夹,新建 overflow.js,代码如下
function mousePosition(ev) {
ev = ev || window.event;
if (ev.pageX || ev.pageY) {
return {
x: ev.pageX,
y: ev.pageY
};
}
return {
x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y: ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
function bindMapMouseTitle(selector, value) {
let self = this;
selector.mouseover(function (e) {
let text = value || $(this).html();
let mousePos = mousePosition(e);
if (selector.get(0).clientWidth < selector.get(0).scrollWidth) {
$("#overflow-title").html(text).show().css({
"top": mousePos.y,
"left": mousePos.x
});
}
});
selector.bind('click mouseout', function(e){
$("#overflow-title").html("").hide();
});
}
export default {
bind: function (element, binding) {
let value = binding.value;
bindMapMouseTitle($(element), value);
},
update: function (element, binding) {
let value = binding.value;
bindMapMouseTitle($(element), value);
}
}
- 在
main.js 中全局注册指令
import overflow from './directive/overflow'
Vue.directive('overflow', overflow)
- 在
App.vue 中添加显示盒子
<template>
<div id="app">
<router-view />
<div id="overflow-title"></div>
</div>
</template>
- 添加盒子样式(为你的盒子添加你喜欢的样式吧)
#overflow-title {
max-width: 250px;
word-wrap: break-word;
display: none;
position: absolute;
top: 0;
left: 0;
padding: 0 8px;
font-size: 12px;
line-height: 23px;
color: #666;
background-color: #f3f3f3;
box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.07);
border-radius: 6px;
border: solid 1px #ddd;
z-index: 9999999;
}
- 使用
<div v-overflow>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</div>
- 效果
