vue 组件 隐藏内容,点击展示更多功能

news/2024/11/7 20:43:21/

效果图

在这里插入图片描述

代码

<template><div class="m-text-overflow modules"><div class="l-content" :style="contentStyle"><div ref="refContent"><slot><span v-html="content"> </span></slot></div></div><div class="l-show-more" v-if="isClose"><div class="l-show-more__text" @click="handleShowMore"><slot name="showMore">{{ showMoreText }}</slot></div></div></div>
</template>
<script lang="ts">
/*** @Description 文本内容溢出组件* @property {string} content 要展示的文本内容* @property {number} height 要默认展示内容的高度* @property {string} showMoreText 点击显示更多的文本*/
import { Component, Vue, Prop } from 'vue-property-decorator';
@Component({components: {},
})
export default class MTextOverflow extends Vue {/** 要展示的文本内容 */@Prop({ default: '' }) protected content!: string;/** 要默认展示内容的高度 */@Prop({ default: 100 }) protected height!: number;/** 要展示的文本内容 */@Prop({ default: '点击查看更多' }) protected showMoreText!: string;/***  状态*  open 内容已展开*  close 内容已收起*/status: 'open' | 'close' = 'close';/** 观察内容变化的对象 */mutationObserver: MutationObserver | null = null;get isOpen(): boolean {return this.status === 'open';}get isClose(): boolean {return this.status === 'close';}get contentStyle() {if (this.isClose) {return {height: `${this.height}px`,};}return {};}mounted() {this.handleContent();/** 监听内容变化,然后处理要不要显示展开按钮逻辑 */this.mutationObserver = new MutationObserver(() => {this.handleContent();});if (this.$refs.refContent) {this.mutationObserver.observe(this.$refs.refContent as Element, {childList: true,attributes: true,characterData: true,subtree: true,});}}/** 处理内容要不要展示显示更多逻辑 */handleContent() {if ((this.$refs.refContent as Element).getBoundingClientRect().height > this.height) {this.status = 'close';} else {this.status = 'open';}}handleShowMore() {this.status = 'open';}destroyed() {this.mutationObserver?.disconnect();}
}
</script>
<style lang="scss" scoped>
.m-text-overflow.modules {background: #f7f7f7;padding: 16rpx;position: relative;.l {&-content {overflow: hidden;}&-show-more {position: absolute;left: 0;right: 0;bottom: 0;text-align: center;padding-top: 40rpx;background-image: linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 100%);z-index: 10;&__text {display: inline-block;cursor: pointer;margin-bottom: 20rpx;}}}
}
</style>```

http://www.ppmy.cn/news/67980.html

相关文章

泛型(Generic) 类型擦除

什么是类型擦除 泛型是 Java 1.5 版本才引进的概念&#xff0c;在这之前是没有泛型的概念的&#xff0c;但是泛型代码能够很好地和之前版本的代码很好地兼容。这是因为&#xff0c;泛型信息只存在于代码编译阶段&#xff0c;在进入 JVM 之前&#xff0c;与泛型相关的信息会被擦…

算法修炼之练气篇——练气二层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

电商如何利用API接口获取商品信息数据

随着电商和互联网的快速发展&#xff0c;API&#xff08;应用程序编程接口&#xff09;的重要性也越来越明显。API接口可以让不同系统之间进行数据交互和通信&#xff0c;进而实现更高效的业务协同和数据共享。在电商业务中&#xff0c;API可以帮助企业实现多个业务系统之间的数…

由浅入深理解java集合(三)——集合 List

一、List集合 List集合判断元素相等的标准 List判断两个对象相等只要通过equals()方法比较返回true即可&#xff08;关于equals()方法的详解可以参考第二篇文章中的内容&#xff09;。 下面以用代码具体展示。 创建一个Book类&#xff0c;并重写equals()方法&#xff0c;如果两…

FISCO BCOS(三十五)———Python Sdk linux 环境控制台使用

注:按照之前的一键部署所有流程先走完,再做以下操作,注意我们的操作全部在ubuntu上进行,不考虑其他环境(我把坑踩完了,按照我的来不会采坑) pythonsdk Gitee地址:https://gitee.com/wei_hong_liang/python-sdk?_from=gitee_search#python-sdk1、安装python-sdk依赖软件 …

sorna python3 调用,python 获取sonarqube数据

1.sonarqube是一款代码分析的工具&#xff0c;通过soanrScanner扫描后的数据传递给sonarqube进行分析 2.sonarqube社区版没有对c类代码的分析&#xff0c;但是可以找到一个开源的包&#xff0c;安装即可&#xff0c;扫描的话可以使用cppcheck来进行扫描 安装python对于sonarqu…

移动端网站SEO优化怎么设计才更符合?

网站设计对于用户的视觉体验而言是至关重要的&#xff0c;当用户点进你的网站时&#xff0c;如果你的网站没有能让人感到眼前一亮&#xff0c;或者说让人感觉视觉上很不舒服&#xff0c;阅读起来困难重重&#xff0c;那么你的网站可以说毫无疑问是失败的&#xff0c;不仅会赶跑…

2023五一杯B题:快递需求分析问题

题目 网络购物作为一种重要的消费方式&#xff0c;带动着快递服务需求飞速增长&#xff0c;为我国经济发展做出了重要贡献。准确地预测快递运输需求数量对于快递公司布局仓库站点、节约存储成本、规划运输线路等具有重要的意义。附件1、附件2、附件3为国内某快递公司记录的部分…