当前位置: 首页 > wzjs >正文

北京专业建设网站公司哪家好无锡模板建站多少钱

北京专业建设网站公司哪家好,无锡模板建站多少钱,商洛市城乡建设规划局网站,网站行业新闻怎么做一、场景需求 在项目中,经常会遇到文本内容超出容器的情况。为了提高用户体验,我希望在文字溢出时显示悬浮提示,未溢出时则不显示。 二、效果演示 三、实现原理 DOM宽度对比法:通过比较元素的scrollWidth(实际内容宽…

一、场景需求

在项目中,经常会遇到文本内容超出容器的情况。为了提高用户体验,我希望在文字溢出时显示悬浮提示,未溢出时则不显示。

二、效果演示

在这里插入图片描述

三、实现原理

DOM宽度对比法:通过比较元素的scrollWidth(实际内容宽度)和clientWidth(可视区域宽度)判断是否溢出
动态绑定Tooltip:利用el-tooltip的disabled属性按需激活提示
响应式监听:结合Vue的$nextTick和watch实现动态数据更新后的自动检测

四、完整代码

<template><div class="box"><div v-for="(item,i) in list" :key="i" class="items"><!-- 添加 el-tooltip 并绑定判断逻辑 --><el-tooltip :disabled="!shouldShowTooltip[i]" :content="`${item.name}:${item.score}`" placement="top"><span :ref="el => { nameElements[i] = el }"class="name"@mouseenter="checkOverflow(i)">{{ item.name }}{{ item.score }}</span></el-tooltip></div></div>
</template><script>
export default {data() {return {list: [{name: '我是测试名称1',score: '90'},{name: '我是测试我是测试我是测试我是测试',score: '92'},{name: '雪芽',score: '99'},{name: '果粒橙果粒橙果粒橙果粒橙果粒橙',score: '100'}],shouldShowTooltip: [], // 存储是否需要显示tooltipnameElements: []       // 存储DOM引用}},watch: {list() {this.$nextTick(() => {this.list.forEach((_, i) => this.checkOverflow(i))})}},mounted() {// 初始化时检查一次this.$nextTick(() => {this.list.forEach((_, i) => this.checkOverflow(i))})},methods: {// 通过对比实际宽度和可视宽度判断是否溢出checkOverflow(index) {const el = this.nameElements[index]if (el) {this.$set(this.shouldShowTooltip, index, el.scrollWidth > el.clientWidth)}}}
}
</script><style lang="scss" scoped>.box {width: 300px;font-size: 30px;border: 1px solid red;display: flex;gap: 24px;flex-direction: column;.items {flex: 1;display: flex;.name {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}}}
</style>

五、封装组件

如果项目此需求需求量大,可以将此逻辑封装成组件,便于不同页面使用~

1、组件:
<template><el-tooltip:disabled="!showTooltip || disabled":content="content":placement="placement":popper-class="popperClass"><divref="contentBox"class="auto-tooltip-wrapper"@mouseenter="handleCheckOverflow">{{ content }}</div></el-tooltip>
</template><script>
export default {name: 'AutoTooltip',props: {disabled: Boolean,  // 是否完全禁用功能(优先级最高)content: String, // 显示内容(同时用于提示和内容区域)// 提示框位置,参考ElementUI的placement配置placement: {type: String,default: 'top'},popperClass: String,  // 自定义Tooltip的类名// 溢出容差(解决1像素级误差问题)tolerance: {type: Number,default: 1}},data() {return {showTooltip: false,  // 控制提示显示状态observer: null // ResizeObserver实例}},mounted() {this.initObserver()this.checkOverflow()},beforeDestroy() {if (this.observer) {// 组件销毁时断开观察器this.observer.disconnect()}},methods: {/*** 初始化ResizeObserver* 用于监听元素尺寸变化自动检测溢出状态*/initObserver() {if (typeof ResizeObserver === 'undefined') returntry {this.observer = new ResizeObserver(() => {this.checkOverflow()})this.observer.observe(this.$refs.contentBox)} catch (e) {console.warn('ResizeObserver not supported')}},/*** 执行溢出检测的主方法* 1. 获取DOM引用* 2. 调用计算方法* 3. 更新显示状态*/checkOverflow() {const el = this.$refs.contentBoxif (!el) returnthis.showTooltip = this.calculateOverflow(el)},/*** 计算元素是否溢出* @param {HTMLElement} el - 要检测的元素* @returns {boolean} 是否发生溢出*/calculateOverflow(el) {return el.scrollWidth > el.clientWidth + this.tolerance},/*** 鼠标进入的回调检测(兼容模式)* 当ResizeObserver不可用时,手动触发检测*/handleCheckOverflow() {if (!this.observer) {this.checkOverflow()}}}
}
</script><style scoped>.auto-tooltip-wrapper {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;display: block;box-sizing: border-box;max-width: 100%;}
</style>
2、页面内使用:
<template><div class="box"><div v-for="(item,i) in list" :key="i" class="items"><AutoTooltip :content="`${item.name}:${item.score}`"></AutoTooltip></div></div>
</template><script>
import AutoTooltip from './AutoTooltip.vue'
export default {components: { AutoTooltip },data() {return {list: [{name: '我是测试名称1',score: '90'},{name: '我是测试我是测试我是测试我是测试',score: '92'},{name: '雪芽',score: '99'},{name: '果粒橙果粒橙果粒橙果粒橙果粒橙',score: '100'}],shouldShowTooltip: [], // 存储是否需要显示tooltipnameElements: []       // 存储DOM引用}},watch: {list() {this.$nextTick(() => {this.list.forEach((_, i) => this.checkOverflow(i))})}},mounted() {// 初始化时检查一次this.$nextTick(() => {this.list.forEach((_, i) => this.checkOverflow(i))})},methods: {// 通过对比实际宽度和可视宽度判断是否溢出checkOverflow(index) {const el = this.nameElements[index]if (el) {this.$set(this.shouldShowTooltip, index, el.scrollWidth > el.clientWidth)}}}
}
</script><style lang="scss" scoped>.box {width: 300px;font-size: 30px;border: 1px solid red;display: flex;gap: 24px;flex-direction: column;.items {flex: 1;display: flex;.name {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}}}
</style>

文章转载自:

http://ifrt1WZP.nnpfz.cn
http://bLDe4jEV.nnpfz.cn
http://GUcyx3BG.nnpfz.cn
http://z7IDKu19.nnpfz.cn
http://JIve3REi.nnpfz.cn
http://T4xf7lrW.nnpfz.cn
http://ws6ePv2i.nnpfz.cn
http://no8w9R6h.nnpfz.cn
http://g1jNDORh.nnpfz.cn
http://b7xDuo6e.nnpfz.cn
http://udrG6zXY.nnpfz.cn
http://AE85zvp2.nnpfz.cn
http://jYmOvRAl.nnpfz.cn
http://iFzpeuY8.nnpfz.cn
http://oLKQ6lMs.nnpfz.cn
http://NOGElHDz.nnpfz.cn
http://LuprAkQ7.nnpfz.cn
http://1coJlIUg.nnpfz.cn
http://IbPUrQsn.nnpfz.cn
http://u8DndERC.nnpfz.cn
http://eq98sivl.nnpfz.cn
http://6PhMN9bE.nnpfz.cn
http://Xi9z6aSL.nnpfz.cn
http://IXsDajZf.nnpfz.cn
http://qJEZ1KQg.nnpfz.cn
http://HVZTVQkx.nnpfz.cn
http://hMxuwqr8.nnpfz.cn
http://vgYSxlVZ.nnpfz.cn
http://x9M3KZgb.nnpfz.cn
http://EUPEXOM6.nnpfz.cn
http://www.dtcms.com/wzjs/694725.html

相关文章:

  • 那里建站好查网站备案信息
  • 米卓网站建设超越时空网上书城网站策划书
  • 西安建设工程中心交易网站怎么做网站版面分析
  • ip做网站地址优惠好券省钱必逛 查看详情 prime会员甄选 查看详情
  • 怎么将网站做成小程序最近韩国电影片免费观看
  • 如何做网站的统计沧州网站制作网站
  • 南京网站排名公司青白江区城乡和建设局网站
  • 商城网站布局百度百度
  • 深圳比较好的网站设计公司三合一网站怎么建立
  • 品牌网站设计公司价格怎么增加网站流量
  • 韶关营销网站开发Wordpress增加QQ分享
  • 石家庄百度推广家庄网站建设莱芜金点子广告电子版最新
  • 购物网站计划书南阳做那个网站好
  • 外贸网站建设 东莞html5和php做网站
  • 深一互联网站建设怎样移动网站开发环境 主流
  • 建站国外百元服务器网站建设海报
  • 为什么要建设就业指导网站电子商务网站开发分几个模块
  • 交通运输局网站建设方案廊坊关键词排名推广
  • 网站备案时网站没有内容可以个人社保缴费基数是什么意思
  • 酒水销售网站设计软件免费下载网站
  • 企业建站系统漏洞如何抓取WordPress文章
  • 个人网站展示长沙景点门票价格表
  • 网站添加地图导航苏州建网站需要什么
  • 长沙学做网站建设ww事业怎么推广
  • 网站推广优化排名怎么推广广告
  • 网站开发电脑内存要多少自贡哪家做网站的好
  • 阿里手机网站开发框架哈尔滨seo建站
  • 汽车租赁企业网站源码wordpress 活动未开始
  • 用dw自己做网站seo检测
  • 分析企业网站建设流程portfolio做网站