js实现点击查看全部/收起功能

在上一篇文章实现用js截取文本后,我的另一个需求也迎刃而解了。需求就是一段长文本需要溢出隐藏,然后点击全部时显示全部文本,点击收起又回到溢出隐藏的状态。实现的效果如下图:

实现的思路时点击全部时使用这条数据的原文本,点击收起时使用截取后的文本。而父元素的高度是由内部文本撑开的,所以点击全部时div的高度也会自动撑开。

this.state = {
    data: [],// 页面的数据
    expended: [],// 用来管理每条数据的全部/收起的数组
}

getContent = (value, index) => {
    const { expended } = this.state
      return (
        <span>
          <span>{expended[index]? value.content: noMoreWord(value.content, 50, '#0091ff')}</span>
          {this.needExpended(value, index)}
        </span>
      )
}

  //是否展示 全部/收起
  needExpended = (value, index) => {
    const { expended } = this.state
    const { content } = value
    if (getStrLength(content) > 100) {
      return (
        <span style={{color: '#0091ff'}} onClick={() => this.seeMore(index)}>{expended[index]? '收起': '全部'}</span>
      )
    }else{
      return ''
    }
  }

  seeMore = (index) => {
    const { expended } = this.state
    const newExpended = [...expended]
    newExpended[index] = !newExpended[index]
    this.setState({
      expended: newExpended
    })
  }

// react的render  
render() {
    return(
        this.state.data.map((value, index) => {
          <div>
            <div>xxx</div>
            <div>{this.getContent()}</div>
          </div>
        })
    )
}

 代码中的noMoreWord()和getStrLength()可以去看我的上一篇文章js实现一行半文本的截取_郑板桥30的博客-CSDN博客,这里有对这两个方法的详细介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现多行文本的展开/收起,可以使用JavaScript来控制文本的显示和隐藏。以下是一种实现方式: 1. 首先,需要在HTML中定义一个带有固定高度的div,并将文本内容放在其中,例如: ```html <div id="text" style="height: 100px; overflow: hidden;"> <p>这里是一段多行文本。</p> <p>这里是第二行。</p> <p>这里是第三行。</p> </div> ``` 2. 接下来,在JavaScript中获取该div的高度和内容的总高度,如果内容高度大于div高度,则表示需要展开/收起按钮,否则不需要。可以使用以下代码实现: ```javascript var text = document.getElementById("text"); var contentHeight = text.scrollHeight; var divHeight = text.offsetHeight; if (contentHeight > divHeight) { // 需要展开/收起按钮 } ``` 3. 如果需要展开/收起按钮,可以在页面上添加两个按钮,一个用于展开,一个用于收起点击按钮时,切换div的高度即可。可以使用以下代码实现: ```javascript var expandBtn = document.createElement("button"); expandBtn.innerHTML = "展开"; expandBtn.onclick = function() { text.style.height = contentHeight + "px"; expandBtn.style.display = "none"; collapseBtn.style.display = "inline-block"; }; var collapseBtn = document.createElement("button"); collapseBtn.innerHTML = "收起"; collapseBtn.onclick = function() { text.style.height = divHeight + "px"; collapseBtn.style.display = "none"; expandBtn.style.display = "inline-block"; }; collapseBtn.style.display = "none"; text.parentNode.insertBefore(expandBtn, text.nextSibling); text.parentNode.insertBefore(collapseBtn, text.nextSibling); ``` 这样,就可以实现多行文本的展开/收起功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值