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

news2024/11/18 3:47:12

效果图

在这里插入图片描述

代码

<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.coloradmin.cn/o/517567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于AT89C52单片机的万年历设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87777668?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 本次设计所提出的一种基于单片机技术的万年历的方案&#xff0c;能更好的解决万年历显示的问题…

公司招人,面试了一个4年经验要20K的,一问自动化都不会····

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。 看简历很多都是3、4年工作经验&#xf…

【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane

目录 前言 一、Crane目的是什么&#xff1f; 二、Crane有哪些功能&#xff1f; 1.成本可视化和优化评估 2.推荐框架 3.基于预测的水平弹性器 4.负载感知的调度器 5.拓扑感知的调度器 6.基于 QOS 的混部 三.Crane的整体架构及特性 1.Crane架构 Craned Fadvisor Metr…

postman runner使用外部数据

场景: 使用postman进行接口测试&#xff0c;需要对一个collection中的所有接口进行测试&#xff0c;或者需要使用指定的参数对collection中的接口进行测试。 工具&#xff1a; Postman for Windows Version 10.12.0接口文件&#xff08;链接&#xff1a;https://pan.baidu.co…

环境土壤物理模型HYDRUS建模方法

查看原文>>>系统学习环境土壤物理模型HYDRUS建模方法与多案例应用 目录 一、HYDRUS模型概述 二、土壤和地下水流问题基础知识 三、 溶质运移问题模拟 四、热量传输问题模拟 五、模型外部接口 其它生态环境相关推荐 HYDRUS是由著名土壤学家Rien van Genuchten和…

物联网| 定时器计数器开发之中断方法|定时器中断处理函数|完整测试代码|物联网之蓝牙4.0 BLE基础-学习笔记(6)

文章目录 11 定时器计数器开发之中断方法定时器中断处理函数:完整测试代码&#xff1a; 11 定时器计数器开发之中断方法 LED控制电路同前节&#xff1a; CC2530的T3定时器(8位&#xff09;需要了解T3GJL,T3CCTLO,T3CCO,T3CCTL1,T3CC寄存器。如下表所示&#xff1a; 按照表格…

母亲节海外网红营销指南:在2023年打造品牌曝光和销售增长

随着全球电商的迅速发展和社交媒体的普及&#xff0c;海外网红营销已成为出海品牌的重要策略之一。母亲节这样一个特殊的节日&#xff0c;对于出海品牌来说&#xff0c;是与消费者建立深层次情感联系的理想时机。本文Nox聚星将和大家详细探讨2023年出海品牌如何在母亲节期间做好…

基于AI技术的API开发工具,自动化和智能化快速高效开发API

一、开源项目简介 ApiCat 是一款基于 AI 技术的 API 开发工具&#xff0c;它旨在通过自动化和智能化的方式&#xff0c;帮助开发人员更快速、更高效地开发 API。ApiCat 支持 OpenAPI 和 Swagger 的数据文件导入和导出&#xff0c;并可以对用户输入的 API 需求进行分析和识别&a…

React hooks源码阅读

一、版本 react&#xff1a;17.0.2react-dom&#xff1a; 17.0.2 二、代码仓库 react源码的管理方式是monorepo模式&#xff0c;它把react中相对独立的模块分割出来作为一个软件包&#xff08;例如&#xff1a;react包、react-dom包、react-server包等等&#xff09;&#x…

SpringBoot整合logback日志

一、概述 与log4j相比&#xff1a; 实际上&#xff0c;这两个日志框架都出自同一个开发者之手&#xff0c;Logback 相对于 Log4J 有更多的优点 (1)logback不仅性能提升了&#xff0c;初始化内存加载也更小了。 (2)内容更丰富的文档 (3&#xff09;更强大的过滤器 二、步骤…

公网远程ERP - 在外远程登录公司局域网金蝶云ERP管理系统

文章目录 前言1.金蝶安装简介2. 安装cpolar内网穿透3. 创建安全隧道映射4. 在外远程访问金蝶云星空管理中心5. 固定访问地址6. 配置固定公网访问地址7.创建数据中心简介8.远程访问数据中心9. 固定远程访问数据中心地址10. 配置固定公网访问地址 前言 金蝶云星空聚焦多组织&…

Wav2lip-GAN 环境配置

首先使用 conda 创建新的虚拟环境&#xff0c;然后激活这个环境 conda create -n myenv python3.8 activate myenv使用 git 克隆代码&#xff0c;或者直接下载源码压缩包解压&#xff0c;安装依赖&#xff08;我使用的豆瓣源&#xff09; git clone https://github.com/Rudra…

2022年美国大学生数学建模竞赛A题自行车运动员的能量特征解题全过程文档及程序

2022年美国大学生数学建模竞赛 A题 自行车运动员的能量特征 原题再现&#xff1a; 背景   自行车公路赛有多种类型&#xff0c;包括标准赛、团体计时赛和个人计时赛。这些比赛的自行车运动员获胜的机会可能会有所不同&#xff0c;具体取决于赛事的类型、路线和自行车运动员…

js代码执行过程、调用栈、执行上下文

参考资料 极客时间课程《浏览器工作原理与实践》 – 李兵 一、js代码执行过程 &#xff08;一&#xff09;javascript代码的执行流程 浏览器执行javascript代码的流程如下图所示&#xff1a; javascript的执行机制是&#xff1a;先编译&#xff0c;再执行。在编译阶段生成了…

01.LLaMA

文章目录 前言导读摘要 预备知识语言模型ChatGPT性能暴涨的原因&#xff08;涌现&#xff09;GPT-1Transformer 背景介绍模型精讲数据集及处理Common CrawlC4GithubWikipediaGutenberg and Books3ArXivStack Exchange小结 关键TrickPre-normalizationSwiGLURotary Embeddings 实…

判断浏览器是否支持webp图片

.WebP是谷歌主导的开放免费的网络图像格式&#xff0c;其核心编码来自VP8也就是同时支持WebP图片和WebM视频等。 这种图像格式追求的并不是无损画质&#xff0c;而是在有损画质的情况下尽可能的压缩图像体积但也尽量降低清晰度下降。 谷歌资助和发展该图像格式最主要的目的就是…

windows下升级nodejs

重新安装新版nodejs 重新安装nodejs然后设置环境变量 安装yarn npm install -g yarn --registryhttps://registry.npm.taobao.org yarn config set registry https://registry.npm.taobao.org -g yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sa…

IoT -- 解读物联网四层架构

本文以物联网四层架构为基础&#xff0c;从物联网产品设计的角度来解读每层架构的功能以及主要内容&#xff0c;旨在为物联网产品设计以及实现思路感兴趣的物联网产品或研发人员有些帮助。 通过互联网&#xff0c;人和人之间可以传递和交流信息。物联网&#xff0c;IoT&#x…

VMware Aria Automation 8.12 - 现代基础架构自动化平台

VMware Aria Automation 8.12 - 现代基础架构自动化平台 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-automation/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 现代基础架构自动化平台 VMware Aria Au…