Vue实现文本展开收起功能

本文实例为大家分享了Vue实现文本展开收起功能的具体代码,供大家参考,具体内容如下

先说说需求,以及实现的需求

1、移动端H5,发表留言后跳转到评论列表,超过5行文字,多余的需要隐藏,并且需要有展开/收起按钮

2、未超过5行的文字,不需要展示展开收起/按钮

下面直接丢出核心代码

<div :ref="`community_${index}`" 
      class="community-words" 
      :class="{'more-line':item.domHeight > 300 && !item.open}" 
      v-html="contentHtml(item.content)" >
</div>
<span class="toggle-fold" 
      v-show="item.domHeight > 300" 
      @click="toggleFoldFn(item,index)">
      {{ item.open ? '收起' : '展开'}}
 </span>

实现思路:获取数据后先渲染页面,然后计算渲染的dom元素高度,在动态添加class,设置超过的样式,以及显示展开收起按钮,目前是移动端h5,流畅度满足正常需求!下面说说具体细节:

div里面显示的是文字内容,文字的行高我这边固定是60px,所以超过5行的高度就是300px,这里用300判断,这个判断条件,可以根据实际情况修改,open字段是展开收起使用的,默认false,下面看看具体的js代码

 apiQueryCommentsList(data).then((res) => {
   if(res.data && res.data.length){
     this.communityList = res.data;
       this.$nextTick(() => {
          for(let k = 0; k < this.communityList.length; k++){
                const domHeight = this.$refs[`community_${k}`][0].offsetHeight;
                const open = domHeight < 300 ? true : false;
                this.$set(this.communityList[k],'domHeight',domHeight);
                this.$set(this.communityList[k],'open',open);
              }
 
            });
          }else{
            this.communityList = [];
          }
        });

获取数据后先渲染,再获取dom高度,通过$set给每个数据添加domHeight属性,以及open属性,open属性还会被用到展开收起功能,接下来看展开收起功能

toggleFoldFn(item){
        // ios下点击展开需要记录滚动条位置,点击收起的时候回到展开的位置
        if(!item.open){
          this.scollTop = document.documentElement.scrollTop || document.body.scrollTop;
        }else{
          const ua = window.navigator.userAgent.toLocaleLowerCase();
          const isIOS = /iphone|ipad|ipod/.test(ua);
          if(this.scollTop !== null && isIOS){
            window.scrollTo(0,this.scollTop);
          }
        }
        item.open = !item.open;
      }

item.open = !item.open; 这句代码就可以实现展开收起功能,其他的代码是为了解决ios端,展开收起后滚动条位置发生改变做的处理,上述代码即可完成展开收起功能!

替换换行符代码:

contentHtml(content){
   return content.replace(/\n/g, "<br/>");
}

下面贴出css代码

.community-words {
    font-size: 32px;
    font-family: PingFang SC;
    font-weight: 400;
    line-height: 60px;
    color: rgba(6, 15, 38, 1);
    word-wrap:break-word;
    word-break:normal;
}
.more-line {
    word-break: break-all;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 5;
    overflow: hidden;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • vue和react等项目中更简单的实现展开收起更多等效果示例

    前言 本文题目中虽然写有vue和react,但是并非vue和react相关知识,而是最基本的html5和css3的一些知识,之所以写vue,是因为我最近项目中用到了类似效果,我用vue相关知识实现并不雅观,用html5和css3实现,则更加完美. 项目案例 项目中有如下效果: 好多展开收起,对于这个的实现,我一开始用了vue一些比较挫的dom操作,就是父元素toggleClass一个类名,进行子元素的显示和隐藏. 由于这个方法是通用方法,项目中好多地方使用,代码大概如下: toggleShow(

  • vue.js 实现点击展开收起动画效果

    最近公司项目加了个页面,其中要求是这样的,点击对应列表,展开和收起,其实就是显示和隐藏内容部分:说来惭愧,我花了半天时间才搞出来(自黑一下~),接下来分享给大家,先上效果图: vue页面: <template> <div class="dealRecord-wrap"> <div class="title-contant" v-for="(item,index) in items " > <div cla

  • vue实现点击展开点击收起效果

    安装vue的步骤在这里就不进行赘述了,下面直接进入正题 首先定义一下data里面的数据: data () { return { toLearnList:[ 'html','css','javascript','java','php' //进行显示的数据 ], showAll:false, //标记数据是否需要完全显示的属性 } } 使用computed对data进行处理: computed:{ showList:function(){ if(this.showAll == false){ //当

  • 基于vue展开收起动画的示例代码

    之前用jquery实现还很简单,然后用vue就一直不行,然后在网上找了很多,又仔细看了vue官网 的过渡&动画,发现其实很简单 (可以多看vue官网 过渡&动画 实现更多效果) 1.实际效果 2.代码 <!--css--> .box{ height:200px;width: 200px; background-color:black; } .draw-enter-active, .draw-leave-active { transition: all 1s ease; } .d

  • vue element-ul实现展开和收起功能的实例代码

    实现效果如下: 需求: 由于后台搜索选项有很多,影响页面美观,所以一进来要隐藏一部分搜索项,只保留1行, 点击[展开搜索]按钮的时候才显示全部,点击[收起搜索]按钮又收起部分,保留1行. 需求分析: 由于不太好控制行数,因为不同屏幕尺寸展示的1行的内容并不相同(不考虑移动端),所以考虑用显示高度来控制. 解决思路: 所以这里通过控制搜索区域的高度来实现展开和收起搜索功能. 页面一进来是收起搜索状态,控制搜索区域的高度为120px,超出部分隐藏. 点击展开搜索的时候,调整搜索区域的高度为"auto

  • vue控制多行文字展开收起的实现示例

    这里讲一下,如何使用vue控制多行文字展开收起(也叫控制文字展开隐藏). 效果: 这里设置了控制三行,如果超过三行会展示,"显示更多" 超出文字显示省略号.点击"显示更多"会展开所有文案,按钮变成"收起" (未超出三行的时候) (展开) (收起) 代码实现: <template> <div> <p class="m-content overflow-line" id="J_descrip

  • vue 点击展开显示更多(点击收起部分隐藏)

    功能如下: 这里就需要一开始只显示6个数据,点击展开才显示全部 HTML里调用showdetailList: <div> <p v-for="(item, index) in showdetailList"> <span>{{item.title}}</span> <span>{{item.name}}</span> </p> </div> <div v-if="detail

  • Vue 中文本内容超出规定行数后展开收起的处理的实现方法

    文字比较难解释,直接看图应该就懂是要做什么了. 需求 工作中遇到的,需求就是超过四行得有个展开按钮,点击展开显示所有内容,不超过四行的话就不需要这个按钮并显示所有内容. 思路首先得判断文本自否超过四行,因为这些一般都是是前端异步请求然后后端发送过来,在组长的指导下,使用了 Vue 中的 nextTick 来监听 DOM 中是数据变化.接下来主要是 css 上的思路,其实上图可以分为两部分,如下图,标号1的部分展示前面三行,标号为2的部分会根据1的行数判断缩进的大小,然后展示第四行.最后通过背景色

  • Vue实现文本展开收起功能

    本文实例为大家分享了Vue实现文本展开收起功能的具体代码,供大家参考,具体内容如下 先说说需求,以及实现的需求 1.移动端H5,发表留言后跳转到评论列表,超过5行文字,多余的需要隐藏,并且需要有展开/收起按钮 2.未超过5行的文字,不需要展示展开收起/按钮 下面直接丢出核心代码 <div :ref="`community_${index}`"        class="community-words"        :class="{'more-l

  • vue列表单项展开收缩功能之this.$refs的详解

    展开效果–看红框区域 收缩效果–看红框区域 接下来看代码逻辑 ###template部分:已去除与本文不相关的功能代码 <li class="main-video"v-for="(item, index) of courseSubList" :key="item.id"> <div class="audio-name"> <div class="img-l"> <s

  • jQuery实现的页面详情展开收起功能示例

    本文实例讲述了jQuery实现的页面详情展开收起功能.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>jQuery实现页面详情展开收起</title> <style> .detailpd { padding-top:10px; } </style> <script src=&q

  • React实现复杂搜索表单的展开收起功能

    给时间时间,让过去过去. 上节我们写过了[搜索]表单,以及查询.重置功能.本节对于需要展开收起效果的查询表单 进行概述,主要涉及前端样式知识. 样式效果如下: 思路:在Search组件中定义两个组件renderAdvancedForm,renderSimpleForm,其中renderSimpleForm中只有五个查询选项,而在renderAdvancedForm包含所有的搜索选项.点击'展开''收起'按钮调用onClick={toggleForm}切换form显示样式即可. 1. 写rende

  • 使用C#语言实现的查询条件界面展开和收起功能

    先简单说一下应用场景,现有一个C#客户端的查询界面,上方放置查询条件,下方放置查询结果.因为实际情况中查询条件可能占了好几行的位置,所以希望在界面上默认只保留一行最主要的查询条件,并在右侧有一个"展开/收起"功能. 收起时界面: 展开时界面: 最开始我的实现方式是这样的,在界面上放置一个LinkLabel,设置此LinkLabel的鼠标单击事件,调整查询条件所在Panel的Height属性. C#代码如下: using System; using System.Collections.

  • vue实现节点增删改功能

    本文实例为大家分享了vue实现节点增删改功能的具体代码,供大家参考,具体内容如下 效果: 增删改功能 tree.vue组件代码: <template> <div> <div class="all-div" v-if="model.name"> <div class="itemRow" :style="{ marginLeft:model.level*20+'px' }"> <

随机推荐