jquery 控制文字域展开收起

本文总结了在前端开发中如何使用jQuery实现文字内容的展开和收起功能。当内容超过一定字数时,显示部分内容并添加展开按钮,点击按钮可切换显示全部内容。文中提供HTML、CSS及JS代码示例,并解释了初始设置为opacity 0以避免页面加载时的闪烁问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端工作中,经常会遇到内容过多,需要用户点击按钮来控制内容的展开和缩放。最近刚好在项目中遇到,所以就简单的做个总结,把demo附上,希望对大家有个思路上的引导。废话不多少,开搞!


首先我们先来确认要实现的功能:

如果文字过多,则截取后保留三行文字,字数45个以内,并以省略号结尾。点击按钮,第一次点击展开全部内容,再次点击收起内容;

如果字数小于等于45,则全部展示,隐藏点击按钮。


贴上基础HTML和css代码

<style type="text/css">
        .didi_content{
        width: 300px;
        margin: 0px auto;
        background: #fff;
        border-radius: 3px;
        box-shadow: 0px 0px 3px 1px rgba(0,0,0,.1);
        margin-top: 12px;
        padding-bottom: 30px;
        padding:30px;
        opacity: 0;
        }

        .didi_content p{
            line-height: 22px;
            letter-spacing:0.2px;
        }

        .didi_user_question{
            color: #666666;
            overflow : hidden;
        }

        .didi_button{
            font-size: 1.2rem;
            color: #e5e5e5;
            float: right;
            margin-right: 1%;
            padding-right: 15px;
            cursor: pointer;
        }
</style>

需要注意的一点是,我在页面加载的时候将最外层容器”didi_content“的"opacity"值默认0,是为了防止加载页面时出现的闪烁BUG。

原因是在没有执行js的时候,内容是全部显示在页面上的,导致容器高度不一致。

HTML代码片段

<div class="didi_content">
        <p class="didi_user_question">
            一次自己在家门口用滴滴打车叫了一辆顺风车,刚下单就有两个师傅抢单,结果最后打电话确认时,那位抢单的师傅却告诉他,自己还在几十公里之外的弓村。  先生说,能因为经验不足,有些司机“隔着一座山也要接单”,没有限制地乱抢单却无法及时到达,耽误的是消费者的时间精力。另一位居民陈小姐吐槽的则是许多            顺风车师傅的认路能力。“五次中有三次,都是顺风车师傅走错路或是绕了很大一个
        </p>
        <div class="didi_button">展开全部</div>
</div>


贴上JS代码

接下来,我们来实现功能, 首先要引入zepto <script type="text/javascript" src="http://static.xiaojukeji.com/didialift/hybrid/js/zepto.js"></script>,jq和zepto都可以,视情况而定

    function textstr(obj,btn){
        var initFontNum = 62;    //初始化字数限制
        var initTextHeight = 66; // 初始化高度px

        var didiText = $(obj).text(); //获取完整内容
        var didiHeight = $(obj).height(); //获取完整内容时容器高度

        if(didiText.length >= initFontNum && didiHeight > initTextHeight){
            $(obj).text($(obj).text().substring(0,initFontNum)); //将内容截取到限制长度
            $(obj).html($(obj).html()+'......'); //截取后的内容以省略号结尾
            $('.didi_content').css({  //显示最外层容器
                'opacity' : '1'
            });
            $(obj).css({ 
                'height':initTextHeight + 'px',
            });
            $(btn).click(function(){
                var curText = $(obj).text(); //截取后的内容
                if(curText.length == 68){
                    $(obj).css({
                        'height' : didiHeight + 'px' ,
                        '-moz-transition' : '0.6s',
                        '-webkit-transition' : '0.6s',
                        'transition' : '0.6s'
                    });
                    $(btn).text('收起');
                    $(obj).text(didiText); 
                }else{
                    $(obj).css({
                        'height': initTextHeight + 'px',
                        '-moz-transition' : '0.6s',
                        '-webkit-transition' : '0.6s',
                        'transition' : '0.6s'
                    });
                    $(btn).text('展开');
                    setTimeout(function(){
                        $(obj).text($(obj).text().substring(0,initFontNum));
                        $(obj).html($(obj).html()+'......');
                    },500)
                }
                return false;
            });    
        }else{
            $(btn).hide();
            $('.didi_content').css({
                'opacity' : '1'
            });
        }
    };
    textstr('.didi_user_question','.didi_button');


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值