import { defineComponent, onMounted, ref } from 'vue'
import { useResizeObserver } from '@vueuse/core'
import { Tooltip } from 'ant-design-vue'
const CTooltip = defineComponent({
name: 'CTooltip',
props: {
/** 开启溢出省略 默认为false 开启此选项默认slot建议传纯字符串或span否则推荐自行实现 */
openEllipsis: {
type: Boolean,
default: () => false
},
/** 卡片类名 */
overlayClassName: {
type: String
}
},
setup(props, { slots, attrs, expose, emit }) {
const prefixCls = 'name-space'
const defaultContainerRef = ref(null)
/** 是否触发溢出省略 */
const isOverflowEllipsis = ref(false)
onMounted(() => {
useResizeObserver(defaultContainerRef.value, entries => {
const entry = entries[0]
const { width } = entry.contentRect
// 当前元素宽度小于内容宽度时触发省略
isOverflowEllipsis.value = Number(width) < Number(defaultContainerRef.value.scrollWidth)
})
})
return () => {
const { title = slots.title, overlayClassName, openEllipsis, ...otherProps } = props
const { ...otherAttrs } = attrs
return (
<Tooltip
destroyTooltipOnHide={true}
title={title}
class={[prefixCls, props.class ?? '']}
color="#4E5969"
overlayClassName={`${prefixCls}-overlay${overlayClassName ? ` ${overlayClassName}` : ''}`}
arrowPointAtCenter
mouseEnterDelay={0.2}
getPopupContainer={() => document.getElementById('app')}
{...otherProps}
{...otherAttrs}
>
{openEllipsis ? (
<div
class={['overflow-ellipsis', isOverflowEllipsis.value ? '' : 'disable-div-title']}
ref={defaultContainerRef}
>
{slots.default()}
</div>
) : (
slots.default()
)}
</Tooltip>
)
}
}
})
export default CTooltip
antd-tooltips 根据容器溢出判断是否展示封装jsx
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。