小程序进阶-长(多行)文本内容展开与收起、单行文本溢出隐藏

news/2024/7/20 2:16:35 标签: 小程序

一、简介

经常玩论坛或者开发过论坛都知道,长文本是构建论坛的重要组成元素。浏览论坛首先展示的是消息列表,然后点击某一条消息浏览详情。列表展示时不可能展示全部文本,就得解决多行文本溢出的问题。例如:

  • 微博列表:文章内容超出指定字数时,用…省略,点击“展开“可查看全文。
  • 知乎问题列表:超出指定文字数目,则用…代替。在这里插入图片描述
    其次,作为比较,单行文本溢出,也是我们常见的问题。
    那么,我们该如何解决并实现我们需要的样式呢?

二、实现

(一). 长文本内容展开与收起:

需求分析

  1. 文本超长省略,主要是通过 line-clamp 实现:

    .text-clamp2 {
      overflow: hidden;
      display: -webkit-box;
      -webkit-box-orient: vertical;
      -webkit-line-clamp: 2;
    }
    

    文本效果:
    在这里插入图片描述

  2. 如何判断文本是否超出两行,显示「全文」「收起」按钮呢?
    通过上图我们可以发现,当文本区域省略时,它的高度会相对变小,那么我们只需要获取到不省略和省略时的文本区域高度,进行比较就能知道是否超出了两行。
    在这里插入图片描述

  3. 实现需求:什么是 SelectQuery?如何去使用它?
    从微信小程序官方文档描述来看, SelectQuery 是一个查询节点信息的对象,它可以选择匹配选择器的所有节点以及显示区域内的节点信息。既然它可以类似 jQuery 那样去匹配选择器,那么我们可以获取到需要的高度信息了。
    html核心代码

    <view class="contentInner1 text-clamp2">小程序是一种新的开放能力,开发者可以快速地开发一个小程序小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。</view>
    <view class="contentInner2">小程序是一种新的开放能力,开发者可以快速地开发一个小程序小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。</view>
    

    js核心代码

    wx.createSelectorQuery().selectAll(".contentInner1, .contentInner2").boundingClientRect(res => {
    		console.log(res)
    	}).exec()
    

    查询结果(文本区域省略时高度为 52px、不省略时为 104px,只要 res[0].height < res[1].height,此时就应该显示展开收起按钮 )

  4. 逻辑设计上的优化
    由于论坛帖子不只一个,我们得匹配对应的两个长文本节点,如果都给一个唯一的选择器,那么在页面中一次性查询这么多节点,很明显这不是最优的。
    实际上我们可以将这封装成一个自定义组件,可供每个页面循环复用,在组件内我们只需要关注 单个 长文本的节点信息,不需要一次性获取当前页面的所有长文本节点,更重要的是:在组件内每个长文本的展开与收起状态都是独立的,也省去了在页面内定义字段去标识每个帖子的展开状态。

  5. 实现效果

    在这里插入图片描述

  6. 参数说明
    属性 类型 默认值 说明
    content String “示例文本” 长文本内容
    maxline Number 1 最多展示行数[只允许 1-5 的正整数]
    position String “left” 展开收起按钮位置[可选值为 left right]
    foldable Boolean true 点击长文本是否展开收起

  7. 代码片段:https://developers.weixin.qq.com/s/qqTmYMmt7CvN

(二)多行文字溢出隐藏

  1. white-space 属性控制段落中的文本不进行换行
  2. text-overflow 属性指定当文本溢出包含它的元素时,应该如何显示、
  3. overflow 属性可以控制内容溢出元素框时在对应的元素区间内添加滚动条(内容是否被修剪)
  4. 示例代码如下:
    <html>
    <head>
    <meta charset="utf-8"> 
    <title>菜鸟教程(runoob.com)</title> 
    <style> 
    div.test
    {
       white-space:nowrap; 
       width:12em; 
       overflow:hidden; 
       border:1px solid #000000;
    }
    </style>
    </head>
    <body>
    
    <p>以下 div 容器内的文本无法完全显示,可以看到它被裁剪了。</p>
    <p>div 使用 &quot;text-overflow:ellipsis&quot;:</p>
    
    <div class="test" style="text-overflow:ellipsis;">This is some long text that will not fit in the box</div>
    <p>div 使用 &quot;text-overflow:clip&quot;:</p>
    <div class="test" style="text-overflow:clip;">This is some long text that will not fit in the box</div>
    <p>div 使用自定义字符串 &quot;text-overflow: &gt;&gt;&quot;(只在 Firefox 浏览器下有效):</p>
    <div class="test" style="text-overflow:'>>';">This is some long text that will not fit in the box</div>
    </body>
    </html>
    
  5. 运行效果如图:
    在这里插入图片描述

http://www.niftyadmin.cn/n/176336.html

相关文章

用js给自己照相并修图

目录 ​1.思路 1.1搭建静态页面 1.1.1 控制区域 1.1.2照片区域 2.实现 2.2点击照相函数和保存图片 2.3绑定change事件动态修改图片颜色 2.4滤色函数 2.5全部代码 2.6css部分代码 2.7自我添加 3.总结 ​效果展示 ​1.思路 1.1搭建静态页面 两块大区域&#xff1a;1块…

Vscode调试环境配置解决The preLaunchTask‘C/C++: gcc.exe build active file‘ 的方法

想用Vscode进行调试代码&#xff0c;网上查了很多环境配置的资料&#xff0c;但是不知道为什么总是出现这个问题&#xff1a; 研究很长时间&#xff0c;终于找到暴力解决这个问题的方法&#xff0c;这里做一下记录 1. 生成tasks.json文件 快捷键CtrlShiftP&#xff0c;找到T…

原生大数据|elasticSearch|低版本kibana组件的汉化

前言&#xff1a; 大数据的范畴里包括EFK|ELK&#xff0c;这些套件安装部署是非常的成熟&#xff0c;因此是比较好部署安装的&#xff0c;一般的&#xff0c;困难出现在部署完成后的运营和维护。 kibana这个组件的版本低于7我们就应该认为这个版本是一个低版本&#xff0c;主…

UGUI优化之路- Text的文字描边优化

UGUI优化之路- Text的文字描边优化 UGUI自带的Text组件依然是最常用的文本组件&#xff0c;TMP虽然具备一定优势&#xff0c;但在显示玩家可以自定义输入的文子场景下&#xff0c;UGUI的Text组件依然是最佳选择。 问题背景 美术对文字描边效果要求高 在大量聊天文本显示或平…

关于vscode安装扩展插件提示:获取扩展失败,XHR error

在我们安装vscode扩展插件时&#xff0c;出现报错&#xff1a;error while fetching extensions.XHR error。搜了很多网友的解决方案&#xff0c;比如修改网络代理设置&#xff0c;修改hosts文件&#xff0c;或者是自身网络的问题&#xff0c;让打开手机热点等。尝试了n中解决方…

TextView字体加粗的方式--自定义设置粗细

Android开发中经常会遇到设置显示文字加粗&#xff0c;关于加粗的集中方式做了如下整理&#xff1a; 方式1&#xff1b;在XML布局中设置加粗 android:textStyle"bold" 方式2&#xff1b;在代码中通过TextPaint设置 TextPaint painttv.getPaint(); paint.setFake…

Nginx服务配置及相关模块

目录 Nginx配置文件 Nginx的配置文件的组成部分 主配置文件解析 子配置文件启用 子配置文件使用 创建虚拟主机实验 基于端口虚拟主机实验 Nginx模块 access模块 自定义错误页面 状态页开启 Nginx配置文件 Nginx的配置文件的组成部分 主配置文件&#xff1a;nginx.c…

3D Slicer学习记录(6)-使用PLUSapp连接WebCam并实现marker跟踪

前记在上次的博客中已经演示了利用Intel realsense进行marker跟踪,如果没有intel realsense怎么办?其实在之前的博客中早就提到plusapp支持多种硬件设备,包括笔记本自带的相机,因此,如果没有双目相机,或许可以尝试笔记本自带的相机完成之前的任务,只不过在跟踪精度和mar…