多行文本的展开收起

看到视觉稿上的展开收起的时候我的第一反应是:我去,还挺好实现的。当然这是我不过脑子的想法,当我开始实现的时候发现:哎吆,我去,什么玩意。然后我就开始百度有没有什么好的办法(面向百度开发的前端就是我没错了😂),然后看了一篇css实现的展开收起的文章,真的很厉害,突然我就发现了css的强大之处,但是博主的实现方式和我的场景不是很一样,最后我还是借助了js实现,非常的简单粗暴,说了这么多废话,直接上思路。

思路

因为我们项目的使用场景是一行省略,所以都是按照一行省略来的。
1、文本后面预留展开位置
2、按钮绝对定位在文本后面(给人文字环绕的错觉)
3、点击展开按钮拿到文本高度
4、调整文本宽度和展开按钮的位置
(原谅我的表达不清晰,凑和看吧😂)

实现

html
wrap:整个盒子的容器
text:文本容器
btn:展开收起按钮

<div class="wrap">
   <div class="text">
       斯为泰山而不骄:当自己处于很高的地位的时候不骄傲,当自己跌落谷底的时候不惊恐。
       这句话描写的是一个沉着稳重的人,很多时候打败自己的不是困难,而是自己,所谓泰山
       崩于前而面不改色,并不只是说面对巨大的变革,很多时候是训诫自己不要被外界影响自
       己的情绪。许多时候,不是跌倒在自己的缺陷上,而是跌倒在自己的优势上,因为缺陷常
       常给以提醒,而优势却常常忘乎所以乎所以哈。<em></em>
    </div>
    <span class="btn">
        展开
    </span>
 </div>

css

<style>
        .wrap {
            width: 300px;
            position: relative;
        }
        .text {
            width: calc(100% - 40px); /*计算宽度,预留出按钮的位置*/
            line-height: 22px;
            display: -webkit-box;
            -webkit-line-clamp: 1;
            -webkit-box-orient: vertical;
            overflow: hidden;
        }
        .text em { /*防止展开后结尾没有收起按钮的位置 占个位*/
            display: inline-block;
            width: 40px;
        }
        .btn {
            width: 40px;
            height: 22px;
            text-align: center;
            background: cornflowerblue;
            cursor: pointer;
            position: absolute;
            right: 0;
            top: 0;
        }
        .open .text { /*open相关的就是点击展开后的一系列操作*/
            width: 100%;
            -webkit-line-clamp: 99; /*不确定文本到底多少行 尽可能设置大一些*/
        }
        .open .btn { /*动态计算top位置*/
            top: calc(100% - 22px);
        }
    </style>

js

<script>
let btn = document.querySelector('.btn');
let wrap = document.querySelector('.wrap');
btn.onclick = function (e) {
    let text = e.target.innerText === '展开' ? '收起' : '展开';
    e.target.innerText = text;
    if (text === '收起') {
        wrap.classList.add('open');
    } else {
        wrap.classList.remove('open');
    }
};
</script>
实现成果

因为技术有限不会做动图,大家凑和看😂


收起.png
展开.png

展开.png
小结

比较简单粗暴的实现方式,欢迎大家批评指教。
另外附上纯css实现展开收起的链接:https://zhuanlan.zhihu.com/p/373359523

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容