一、在 components 中新建 toolTip 文件夹并新建 toolTip.vue文件
1、写入 html 代码
<template>
<view class="tooltip">
<slot></slot>
<view v-if="content || $slots.content" class="tooltip-popup" :style="initPosition">
<view class="popup-img" :style="initImg">
<image v-if="img" :src="img" mode="aspectFill" class="img"></image>
{{content}}
</view>
</view>
</view>
</template>
2、写入 css 代码
.tooltip {
position: relative;
.tooltip-popup {
position: absolute;
display: none;
background-color: #666;
border-radius: 10px;
color: #fff;
font-size: 12px;
text-align: justify;
line-height: 16px;
padding: 10px;
z-index: 1;
.popup-img {
.img {
max-width: 30rpx;
max-height: 30rpx;
margin-right: 10rpx;
}
}
}
&:hover .tooltip-popup {
display: block;
}
}
3、写入 js 代码
export default {
name: "toolTip",
data() {
return {
};
},
props: {
content: {
type: String,
default: ''
},
position: {
type: String,
default: 'top'
},
direction: {
type: String,
default: 'cross'
},
img: {
type: String,
default: ''
},
},
methods: {},
computed: {
initPosition() {
let style = {};
if(this.position === 'left' && this.direction === 'cross') {
style = {
top: '50%',
transform: 'translateY(-50%)',
right: '100%',
marginRight: '15rpx',
width: '100%',
}
} else if(this.position === 'left' && this.direction === 'vertical') {
style = {
top: '50%',
transform: 'translateY(-50%)',
right: '100%',
marginRight: '15rpx',
}
} else if(this.position === 'right' && this.direction === 'cross') {
style = {
top: '50%',
transform: 'translateY(-50%)',
left: '100%',
marginLeft: '15rpx',
width: '100%',
}
} else if(this.position === 'right' && this.direction === 'vertical') {
style = {
top: '50%',
transform: 'translateY(-50%)',
left: '100%',
marginLeft: '15rpx',
}
} else if(this.position === 'top' && this.direction === 'cross') {
style = {
bottom: '100%',
transform: 'translateX(-50%)',
left: '50%',
marginBottom: '15rpx',
width: '100%',
}
} else if(this.position === 'top' && this.direction === 'vertical') {
style = {
bottom: '100%',
transform: 'translateX(-50%)',
left: '50%',
marginBottom: '15rpx',
}
} else if(this.position === 'bottom' && this.direction === 'cross') {
style = {
top: '100%',
transform: 'translateX(-50%)',
left: '50%',
marginTop: '15rpx',
width: '100%',
}
} else if(this.position === 'bottom' && this.direction === 'vertical') {
style = {
top: '100%',
transform: 'translateX(-50%)',
left: '50%',
marginTop: '15rpx',
}
}
return style;
},
initImg() {
let style = {};
if(this.direction === 'cross') {
style = {
display: 'flex',
alignItems: 'center',
}
} else if(this.direction === 'vertical') {
style = {};
}
return style;
}
},
}
二、父组件调用
1、html 代码
<tool-tip content="示例文字" position="bottom" direction="cross" img="https://www.baidu.com/favicon.ico">
<view>示例文字展示</view>
</tool-tip>
2、js代码
import toolTip from '@/components/toolTip/toolTip.vue';
export default {
components: { toolTip },
data() {
return {
}
},
methods: {
}
}