• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 聊聊小程序怎么实现“全文收起”功能

聊聊小程序怎么实现“全文收起”功能

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了小程序开发,全文收起功能等相关知识,希望对您有所帮助

小程序怎么实现“全文收起”功能?下面本篇文章小程序实现多行文本“全文收起”功能的方法,希望对大家有所帮助!


聊聊小程序怎么实现“全文收起”功能


小程序里经常会碰到需要实现多行文本”全文收起“功能,在掘金上有搜索到用纯css实现。亲测:ios很完美,andriod上的无效。

小程序社区有很多方案,目前在社区有看到一位大佬使用js动态计算告诉去实现,亲测大致有效果,测试后,在一些特殊情况下,计算会有误差,所以有更改些许代码。

一、需求

位于多行文本右下角,展示”全文/收起“按钮

“展开”和“收起”两种状态的切换

当文本不超过指定行数时,不显示”全文/收起“按钮

文本显示【全文】展示状态下,更新数据,文本不被收起

二、实现思路

1、多行文本截断

主要用到用到 line-clamp,关键样式如下

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

2、判断文本是否超出指定行数,显示全文 收起 按钮

编写两段文本,一段展示完整的文本A,一段展示使用 line-clamp省略后的文本B,因为B有被截取,因此B的高度相对较小。对比两段文本的高度,便可以知道文本是否超出两行

在小程序里,可以使用wx.createSelectorQuery()获取文本高度

js

const query = wx.createSelectorQuery().in(this);query.selectAll(".showArea, .hideArea").boundingClientRect(res => {    console.log(res, 'res')}).exec()


聊聊小程序怎么实现“全文收起”功能


三、代码实现

1、初次版本

根据设计思路,立马上手代码

foldable.wxml

<view class="content">  <view class="contentInner content-inner-class showArea {{!onFold ? 'text-clamp' + maxLine : ''}}">{{content}}</view>  <view class="contentInner content-inner-class hideArea" style="width: {{width}}px">{{content}}</view>  <view class="foldInner fold-class {{position === 'right' ? 'flex-end' : 'flex'}}" wx:if="{{showFold}}">    <text class="fold" catchtap="handleFold">{{onFold ? unFoldText : onFoldText}}</text>  </view></view>

foldable.js

/** * 长文本内容展开与收起 * @param {String} content  长文本内容 * @param {Number} maxLine  最多展示行数[只允许 1-5 的正整数] * @param {String} position  展开收起按钮位置[可选值为 left right] * @param {Boolean} foldable  点击长文本是否展开收起 * @param { String } onFoldText 收缩时文字 * @param { String } unFoldText 展开时文字 *  */ Component({  externalClasses: ['content-inner-class', 'fold-class'],  properties: {    content: {      type: String,      observer(val) {        if (this.data.onReady) {          this.getNodeClientReact()        }      }    },    maxLine: {      type: Number,      value: 1,      observer(value) {        if (!(/^[1-5]$/).test(value)) {          throw new Error(`maxLine field value can only be digits (1-5), Error value: ${value}`)        } else if (this.data.onReady) {          this.getNodeClientReact()        }      }    },    position: {      type: String,      value: "left"    },    foldable: {      type: Boolean,      value: true    },    // 收缩时文字    onFoldText: {      type: String,      value: "全文"    },    // 展开时文字    unFoldText: {      type: String,      value: "收起"    },  },  data: {    width: null,    onFold: false,    showFold: false,    onReady: false  },  lifetimes: {    attached() {      this.getNodeClientReact()      this.setData({        onReady: true      })    },  },  methods: {    getNodeClientReact() {      setTimeout(() => this.checkFold(), 10)    },    checkFold() {      const query = this.createSelectorQuery();      query.selectAll(".showArea, .hideArea").boundingClientRect(res => {        let showFold = res[0].height < res[1].height;        this.setData({          width: res[0].width,          showFold,        })      }).exec()    },    handleFold() {      this.setData({        onFold: !this.data.onFold      })    }  }})

foldable.wxss

.content {  width: 100%;  position: relative;  overflow: hidden;} .contentInner {  word-break: break-all;  width: 100%;  
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 手把手教你在微信小程序中使用canvas绘制天气折线图(附代码)
  • 浅析微信小程序中自定义组件的方法
  • 总结分享一些小程序开发中遇到的问题(帮忙避坑)
  • 聊聊小程序怎么实现“全文收起”功能
  • 怎么从微信卡包跳转到小程序?实现方法浅析
  • 小程序开发实践之浅析如何获取手机号码

相关文章

  • Vue中Computed和Watch的用法及区别
  • 如何让WordPress支持google AMP
  • 手把手教你CSS如何实现毛玻璃效果
  • 五步搞定Laravel Migrations的使用
  • Photoshop制作金属质感的艺术字教程
  • 怎样在Photoshop中保持像素的完美
  • 值得掌握一下支持Laravel 9的Aliyun OSS Storage扩展
  • 浅谈小程序怎么实现列表滚动上下联动效果
  • 举例说明JS调用PHP和PHP调用JS的方法
  • 一起来了解下Bootstrap中的tab选项卡

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 浅谈小程序怎么实现列表滚动上下联动效果
    • 怎么解决PHP高并发(商品秒杀)问题?两种解决方案分享
    • js实现简单图片拖拽效果
    • Linux下查看PHP配置文件php.ini的位置
    • CSS如何禁止元素的点击事件
    • Laravel Excel 的五个隐藏功能
    • robots.txt 语法详解:*、$、?等字符的含义及用法
    • 浅谈利用Node.js如何获取WI-FI密码
    • 图文详解Thinkphp5多语言切换(中英文实例)
    • 浅谈nodejs利用node-xlsx模块读取excel数据的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有