使用jquery来设置html元素的显示与隐藏属性,同时调整div的高度

注意1:jquery无法获取图片高度!因为jquery是在网页框架加载完就立即执行,此时网页里的图片还没有加载,被jquery认为高度为0,而实际高度不是0,就会造成偏差。最好自己设定图片高度。

注意2:如果一个超链接标签 a 要绑定一段jquery函数,则设置<a herf="javascript:void(0)">超链接</a>

点击上面的“收起回复”超链接之后,执行下面几个动作:

a、“收起回复”变成“回复(3)”;

b、回复全部隐藏;

c、重新自适应高度。

再次点击“回复(3)”后,执行下面几个动作:

a、“回复(3)”变成“收起回复”;

b、回复全部显示;

c、重新自适应高度。


 

1、为了绑定jquery函数,先对html元素或div要设置 类class


 

2、实现“收起回复”和“回复(3)”之间的转换

对象:.replyTrigger

内容:使用一个超链接,通过点击后更换data-status的值“shown”和“hidden”,并修改text来更换内容。

<span>
   <a href="javascript:void(0)" class="replyTrigger" data-status="shown">收起回复</a>
</span>
                    if(status=="shown"){
                        $replyTrigger.data("status","hidden");
                        $replyTrigger.text("回复(3)");
                    }else{
                        $replyTrigger.data("status","shown");
                        $replyTrigger.text("收起回复");
                    }    

 


3、实现回复的隐藏与显示

点击“收起回复”/“回复”超链接,使用jquery的slideUp、slideDown函数来隐藏与显示

                    if(status=="shown"){
                        $replyTrigger.data("status","hidden");
                        $replyTrigger.text("回复(3)");
//                      隐藏回复,使用回调函数自适应高度。下同
                        $innerCommentBlock.slideUp();
                    }else{
                        $replyTrigger.data("status","shown");
                        $replyTrigger.text("收起回复");
//                      显示回复
                        $innerCommentBlock.slideDown();
                    }

语法:

$(selector).slideDown(speed,callback);

可选的 speed 参数规定效果的时长。它可以取以下值:"slow"、"fast" 或毫秒。
可选的 callback 参数是滑动完成后所执行的函数名称。即回调函数。

回调函数是jquery的灵魂所在,即运行完一个函数后立即调用回调函数。


 

4、关键!div之间的高度自适应:

分别按slideUp和slideDown分情况

Up有3种情况,Down有2种情况。

//            初始化高度
            function initDivHeight($infoDiv,$contentDiv){
                var contentHeight=$contentDiv.height();
                var infoHeight=$infoDiv.height();

                if(infoHeight>contentHeight){
                    $contentDiv.height(infoHeight);
                }else{
                    $infoDiv.height(contentHeight);
                }
            }
//            slideUp的回调函数
            function upAdjustHeight($infoDiv,$contentDiv,realInfoHeight,realContentHeight){
                var contentHeight=$contentDiv.height();
                var infoHeight=$infoDiv.height();

                if(realContentHeight>realInfoHeight){
                    if(contentHeight>realInfoHeight){
                        $infoDiv.animate({height:contentHeight});
//                    $infoDiv.height(contentHeight);
                    }else{
                        $infoDiv.animate({height:realInfoHeight});
//                        $infoDiv.height(realInfoHeight);
                    }
                }

            }
//            slideDown的回调函数
            function downAdjustHeight($infoDiv,$contentDiv){
                var contentHeight=$contentDiv.height();
                var infoHeight=$infoDiv.height();

                if(contentHeight>=infoHeight){
                    $infoDiv.animate({height:contentHeight});
//                    $infoDiv.height(contentHeight);
                }
            }

 


 

5、简单版代码(不考虑div的高度自适应,以右边div为基准):

<block name="head">

    <script type="text/javascript">
        $(function(){
            var $commentBlocks=$(".commentBlock");
            $commentBlocks.each(function(){
                //自适应高度
                var $father=$(this);
                var $infoDiv=$father.find(".infoDiv");
                var $contentDiv=$father.find(".contentDiv");
                var $innerCommentBlock=$father.find(".innerCommentBlock");
//                自适应高度
                $infoDiv.height($contentDiv.height());
//                收起回复--回复
                var $replyTrigger=$father.find(".replyTrigger");
                $replyTrigger.click(function(){
                    //获取当前状态 data-status
                    var status=$replyTrigger.data("status");
                    if(status=="shown"){
                        $replyTrigger.data("status","hidden");
                        $replyTrigger.text("回复(3)");
//                        隐藏回复,使用回调函数自适应高度。下同
                        $innerCommentBlock.slideUp(function(){
                            adjustDivHeight($infoDiv,$contentDiv);
                        });
                    }else{
                        $replyTrigger.data("status","shown");
                        $replyTrigger.text("收起回复");
//                        显示回复
                        $innerCommentBlock.slideDown(function(){
                            adjustDivHeight($infoDiv,$contentDiv);
                        });
                    }

                });
            });
//            自适应高度函数,以contentDiv为基准
            function adjustDivHeight($infoDiv,$contentDiv){
                var contentHeight=$contentDiv.height();
                $infoDiv.animate({height:contentHeight},"slow");
            }
        });
    </script>
</block>

 

posted on 2014-08-22 21:34  lanxian  阅读(809)  评论(0编辑  收藏  举报