vue实现移动端项目多行文本溢出省略

接下来我将详细讲解如何使用Vue实现移动端项目多行文本溢出省略。

一、概述

在移动端项目中,由于移动设备屏幕的限制,经常需要对多行文本进行溢出处理,并用省略号代替多余的文本。此时,我们可以通过CSS的overflow属性和文本溢出处理相关的text-overflow属性来实现,但对于动态生成的文本,或者需要根据不同的设备屏幕大小自适应溢出省略处理时,CSS方法就显得有些力不从心了。这时,我们可以考虑使用Vue来实现多行文本溢出省略处理。

二、使用Vue实现多行文本溢出省略

1. 使用第三方插件vue-ellipsis

vue-ellipsis是一个基于Vue实现的多行文本溢出省略的插件,它不仅支持手动传递文本内容和省略方式进行处理,还支持根据父容器的宽度、行数自适应进行溢出省略处理。下面我们来看一下使用vue-ellipsis实现多行文本溢出省略的示例代码。

首先,我们需要安装vue-ellipsis插件。在命令行中输入以下命令:

npm install vue-ellipsis --save

安装完成后,在Vue组件中引入vue-ellipsis插件,并传递需要处理的文本内容和省略方式,如下所示:

<template>
  <div class="text-container">
    <ellipsis
      :clamp="3"
      type="html"
      :text="loremIpsum"
      :options="ellipsisOptions"
    ></ellipsis>
  </div>
</template>

<script>
import Ellipsis from "vue-ellipsis";

export default {
  components: {
    Ellipsis,
  },
  data() {
    return {
      loremIpsum: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
      ellipsisOptions: {
        ellipsis: "...",
        title: true, // shows the full string as a title on hover
        tooltip: false, // shows an ellipsis on hover if the string is truncated
        html: true, // interprets the string as HTML
        lineHeight: "1.2em", // use this if lineHeight doesnt match your css
        className: "", // class applied to the ellipsis span
        tag: "span", // tag name used for the ellipsis
        responsive: false, // if true, updates when window is resized. Defaults to false,
        disabled: false // keep the ellipsis from triggering
      },
    };
  },
};
</script>

其中,:text属性表示要处理的文本内容;:clamp属性表示最多显示的行数;ellipsisOptions表示省略方式的相关配置项。

2. 使用Vue计算属性实现多行文本溢出省略

如果你不想使用第三方库来实现多行文本溢出省略,也可以使用Vue计算属性来实现。下面我们来看一下使用Vue计算属性实现多行文本溢出省略的示例代码。

首先,我们需要在Vue组件中定义一个计算属性来实现多行文本溢出省略处理,如下所示:

<template>
  <div class="text-container">
    <p>{{ ellipsisText }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loremIpsum: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
      lineClamp: 3,
    };
  },
  computed: {
    ellipsisText() {
      if (!this.loremIpsum) {
        return "";
      }
      const lineHeight = parseInt(
        window.getComputedStyle(this.$el.parentNode)['line-height']
      );
      const maxHeight = this.lineClamp * lineHeight;
      const content = this.loremIpsum.replace(/\s+/g, ' ');
      if (this.$el.scrollHeight <= maxHeight) {
        return content;
      } else {
        const targetHeight = this.lineClamp * lineHeight - 5;
        let low = 0;
        let high = content.length - 1;
        while (low <= high) {
          const middle = Math.floor((low + high) / 2);
          const middleHeight = this.measureTextHeight(content.slice(0, middle)) + 2;
          if (middleHeight <= targetHeight && this.measureTextHeight(content.slice(0, middle + 1)) > targetHeight) {
            return content.slice(0, middle - 2) + '...';
          } else if (middleHeight < targetHeight) {
            low = middle + 1;
          } else {
            high = middle - 1;
          }
        }
      }
    },
  },
  methods: {
    measureTextHeight(str) {
      const pre = document.createElement('pre');
      pre.style.position = 'absolute';
      pre.style.top = '-9999px';
      pre.style.left = '-9999px';
      pre.style.whiteSpace = 'pre-wrap';
      pre.textContent = str;
      document.body.appendChild(pre);
      const height = pre.scrollHeight;
      document.body.removeChild(pre);
      return height;
    },
  },
};
</script>

其中,ellispsisText计算属性根据文本内容、行数、父元素的行高来计算需要省略的文本并输出,measureTextHeight方法用于测量文本的高度。

三、总结

以上就是使用Vue实现移动端项目多行文本溢出省略的完整攻略,我们介绍了使用第三方库vue-ellipsis和使用Vue计算属性两种方式来实现多行文本溢出省略。在使用时根据实际情况选择合适的方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现移动端项目多行文本溢出省略 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • Div + CSS一些特效使div变成圆角、提交按钮的特效等等

    针对“Div + CSS一些特效使div变成圆角、提交按钮的特效等等”的问题,我来给大家详细讲解一下: 1. 圆角效果实现 实现圆角效果可以通过CSS的border-radius属性来设置。具体的方法如下: border-radius: 10px; 其中10px的值可以根据实际需求进行设置。如果要实现四个角都是圆角,则可以这样写: border-radius…

    css 2023年6月10日
    00
  • bootstrap table表格使用方法详解

    适用于Bootstrap 3,现在来详细讲解一下 bootstrap table 表格使用方法: 引入文件 在 HTML 文件中,你需要引入如下文件: <!– Latest compiled and minified CSS –> <link rel="stylesheet" href="https://m…

    css 2023年6月10日
    00
  • 3dmax怎么建模眼镜盒模型? 3dmax盒子建模过程

    3Dmax的盒子建模是建立在基本几何体的基础上的,可以将基本几何体进行合并、剖分或调整大小等处理,制作出带有较复杂模型的3D物体。下面就针对眼镜盒模型的建模过程进行详细的讲解和示例说明。 步骤一:建立盒子 首先打开3Dmax软件,并选择“立方体”工具。在视图界面上单击鼠标右键,然后拖拽鼠标,可以添加自定义的盒子大小。 示例图: |————–…

    css 2023年6月11日
    00
  • CSS 实现多彩、智能的阴影效果

    这里是CSS实现多彩、智能的阴影效果的完整攻略。 1. 简介 阴影效果在网页设计中是非常常见的元素之一。CSS 通过 box-shadow 属性可以实现简单的阴影效果,但这种简单的阴影效果并不够多彩、智能。设计师们可以通过 CSS 的高级特性来实现多彩、智能的阴影效果,从而让设计更有活力。 2. 实现多彩阴影 思路:使用 radial-gradient 创建…

    css 2023年6月9日
    00
  • 详解CSS中的flex容器与flex属性

    详解CSS中的flex容器与flex属性 在CSS中,我们可以使用flex布局来创建灵活的布局方式。在flex布局中,有两个重要的概念:flex容器和flex项。在本文中,我们将深入探讨flex容器与flex属性,以便更好地理解如何使用flex布局。 什么是flex容器 flex容器是一个用于包含flex项的容器,这个容器将使用flex布局来排列这些项。我们…

    css 2023年6月11日
    00
  • 从零搭建Webpack5-react脚手架的实现步骤(附源码)

    下面我将详细讲解“从零搭建Webpack5-react脚手架的实现步骤(附源码)”的完整攻略。 实现步骤 1. 初始化项目 首先,我们需要创建一个空的 Node.js 项目。我们可以使用 npm 或者 yarn 来初始化项目,这里以使用 npm 为例: npm init -y 这会自动生成一个 package.json 文件,其中 -y 参数表示开启了自动配…

    css 2023年6月9日
    00
  • Bootstrap打造一个左侧折叠菜单的系统模板(一)

    我来详细讲解一下”Bootstrap打造一个左侧折叠菜单的系统模板(一)”的完整攻略。此文章的攻略包含以下三部分: 1. 准备工作 在编写左侧折叠菜单前,需要先引入Bootstrap框架。打开网页http://getbootstrap.com/并按照引导指示下载所需文件即可。同时,该模板基于jQuery,所以也需要在页面中引入jQuery库: <!–…

    css 2023年6月9日
    00
  • css3的focus-within选择器的使用

    CSS3的focus-within选择器用于选取一个元素的所有后代元素中,只要其中一个获得焦点,该元素就会被选中。它的语法如下: selector:focus-within { /* CSS样式 */ } 在使用该选择器时,首先需要有一个具有焦点行为的元素,例如<input>标签或<button>标签。然后,我们可以使用focus-w…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部