如何使用js显示固定长度内容显示,默认状态显示3行文本,点击按钮显示更多

clipboard.png

有这么个需要,列表中显示内容,默认显示3行文字,文本内容超出3行文字,显示展开/收起箭头

当前的实现是截取固定长度的文本,使之最多显示三行,现在遇到一个问题是,文本长度相同,文本
全是中文 和 不全是中文 所显示的行数是不同,有没有什么好的方式可以适应

clipboard.png

我现在想到的一个笨方法是,逐个字符判断,如果是中文的长度+2,如果是非中文的长度+1,然后在根据总数来截取不同的长度

PS:本方法只是个想法,还未进行验证

环境要求:最低支持IE8

阅读 9.4k
6 个回答

换个设计展示形式吧, 就和移动端字号自适应,文字超出两行必须加个详情俩字一样,很难受。

我以前做过类似的,方法是固定显示2行的高度,用一个标签(text为展开)固定显示在右下角遮住原有的文字。JS控制点击标签改变文字容器高度

需要配置JS来判断文字内容是否超过设定的容器的初始高度,如果超过就设置折叠的CSS否者不设置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .container{
            position: absolute;
            left:10px;
            right:10px;
            width: 200px;
            border: 1px solid red;
            position: relative;
        }

        .content{
            font-size: 16px;
            line-height: 1.5;
            width: 100%;
            color: #556170;
            word-break: break-all;
            text-align: justify;
            margin: 0;
            position: relative;
        }

        .collapse .content::after{
            content: ' ... ';
            position: absolute;
            right: 0;
            bottom: 0;
            background: linear-gradient(to right, transparent, #ffffff 50%);
            padding-left: 20px;
        }

        .collapse .expand-collapse::after{
            content: '展开';
            display: block;
            color:red;
            width: 100%;
            text-align: right;
        }

        .expand .expand-collapse::after{
            content: '收缩';
            display: block;
            color:red;
            width: 100%;
            text-align: right;
        }

        .collapse .content{
            overflow: hidden;
            height: 50px;
            padding: 0;
            margin: 0;
        }
    </style>
</head>
<body>

<div class="container">
    <p class="content ">当前的实现是截取固定长度的文本,使之最多显示三行,现在遇到一个问题是,文本长度相同,文本
        全是中文 和 不全是中文 所显示的行数是不同,有没有什么好的方式可以适应</p>
    <div class="expand-collapse"></div>
</div>
<script>

    var expandCollapseDiv;
    var containerBoundingClientRect=document.querySelector(".container").getBoundingClientRect();
    var contentBoundingClientRect=document.querySelector(".content").getBoundingClientRect();
    if(containerBoundingClientRect.height>50){
        document.querySelector(".container").setAttribute("class","container collapse");
    }else{
        document.querySelector(".container").setAttribute("class","container");

        document.querySelector(".container").removeChild(document.querySelector(".expand-collapse"))
    }


    document.querySelector(".container").addEventListener("click",function(){

        if(!expandCollapseDiv){
            expandCollapseDiv=document.querySelector(".expand-collapse");
        }
        console.log(event.target);
        if(event.target===expandCollapseDiv){
            if(document.querySelector(".container").getAttribute("class").split(" ").indexOf("collapse")!==-1){
                document.querySelector(".container").setAttribute("class","container expand");
            }else{
                document.querySelector(".container").setAttribute("class","container collapse");
            }

        }
    },false);
</script>
</body>
</html>
新手上路,请多包涵

超出部分2行自动换行,第二行是省略号 :
text-overflow:
-o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;

新手上路,请多包涵

title

italic

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题