javascript - jq 固定高度文字展开收起
问题描述
<p class='text'><p class='desc'>目木家居旗舰店,专注家居二十年。我们彰显个性,具有浓郁现代感现代风格家居设计的特色是,其设计的元素、材料都很单一,这种设计风格已经成为越来越多时尚潮人装修的首选,现代风格家居设计从整体到局部、从空间到室内陈设塑造,精雕细琢,给人一丝不苟的印象</p><a href='javascript:void(0);' class='more'>更多</a> </p>
这样的效果该如何实现,收起展开箭头有变化试着写了下效果 貌似不太理想,因为这里写的高度是个固定的,但是这个文字的多少是不确定的demo
问题解答
回答1:直接在p外层包上一层,外层overflow隐藏,获取p的高度设置即可;注意p的默认margin,下面例子用父元素的padding抵消;
<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Title</title> <link href='http://at.alicdn.com/t/font_y2pevr1o81moyldi.css' rel='stylesheet' type='text/css'> <style>.text{ line-height: 1.8; margin:0 auto; width: 500px;}.text .desc{ height:50px; padding: 20px 0; overflow: hidden;}.iconfont{ width: 100%; font-size: 20px; text-align: center; cursor: pointer;} </style></head><body><p class='text'> <p class='desc'> <p class='desc-content'>目木家居旗舰店,专注家居二十年。我们彰显个性,具有浓郁现代感现代风格家居设计的特色是,其设计的元素、材料都很单一,这种设计风格已经成为越来越多时尚潮人装修的首选,现代风格家居设计从整体到局部、从空间到室内陈设塑造,精雕细琢,给人一丝不苟的印象目木家居旗舰店,专注家居二十年。我们彰显个性,具有浓郁现代感现代风格家居设计的特色是,其设计的元素、材料都很单一,这种设计风格已经成为越来越多时尚潮人装修的首选,现代风格家居设计从整体到局部、从空间到室内陈设塑造,精雕细琢,给人一丝不苟的印象目木家居旗舰店,专注家居二十年。我们彰显个性,具有浓郁现代感现代风格家居设计的特色是,其设计的元素、材料都很单一,这种设计风格已经成为越来越多时尚潮人装修的首选,现代风格家居设计从整体到局部、从空间到室内陈设塑造,精雕细琢,给人一丝不苟的印象目木家居旗舰店,专注家居二十年。我们彰显个性,具有浓郁现代感现代风格家居设计的特色是,其设计的元素、材料都很单一,这种设计风格已经成为越来越多时尚潮人装修的首选,现代风格家居设计从整体到局部、从空间到室内陈设塑造,精雕细琢,给人一丝不苟的印象</p> </p> <p href='javascript:void(0);' class='iconfont icon-unfold'></p></p><script src='http://libs.baidu.com/jquery/2.0.0/jquery.min.js'></script><script> $(document).ready(function() {$('.text').off(’click’).on(’click’,’.icon-unfold’, function () { $('.desc').animate({height: $(’.desc-content’).height()}, 'slow'); $(this).removeClass(’icon-unfold icon-fold’).addClass(’icon-fold’);}).on(’click’,’.icon-fold’, function () { $('.desc').animate({height: ’50px’}, 'normal'); $(this).removeClass(’icon-fold icon-unfold’).addClass(’icon-unfold’);}); })</script></body></html>
其实挺简单的:如果你要根据文字数量来展开或者收缩,那么你就根据文字的length来设定判断条件,当长度小于的时候format一份html,这个html上面没有图标,当长度大于规定长度时,收缩时,对所有文字字符串进行截取然后拼接一个展开的图标,这个font-awesome上面有很多,就对应然后展示到页面上,然后展开也是一样的套路,只不过不用截取字符串了,就把所有字符串拼接一个收缩的图标即可,然后分别在两个图标上面绑定事件,我在下面给了我之前实现的具体例子,代码不全,给你提供思路及实现应该是足够了
function format_html_collapse(info) { var expand_html = ’<a href='https://www.haobala.com/wenda/5605.html#' class='click_expand'>...点击展开 ></a>’; if (info.content.length > info.max_length) {info.content = info.content.substring(0, info.max_length) + expand_html; } return info.content;}function format_html_expand(info) { var collapse_html = ’<a href='https://www.haobala.com/wenda/5605.html#' class='click_collapse'>...点击收起 ></a>’; if (info.content.length > info.max_length) {info.content = info.content + collapse_html; } return info.content;}function to_collapse(wtable) { $(’.click_collapse’).on(’click’, function(e) { xxx.html(format_html_collapse(fc_value)); }); to_expand(wtable); });} function to_expand(wtable) { $(’.click_expand’).on(’click’, function(e) {// 此处省略部分代码fe_value.td.html(format_html_expand(fe_value)); }); to_collapse(wtable);}); 回答3:
动画的话,试试这个:demo
前几天看了 @姑奶奶 的回答(这里)受到了一些启发。重点在于:不定高度的情况下的展开,先将高度设置为auto,再使用getComputedStyle获取到高度,然后设置高度为0,在使用获取到的高度去做动画。
相关文章:
1. 在mac下出现了两个docker环境2. html - sumlime text3代码自动补全功能问题!3. web - css3 @keyframes用一次后面的任何样式就解析不了了.4. javascript - 有一个异步获取数据的函数A,其他依赖这个A得到的数据的函数是否都必须是异步的?5. css3 - 给body设置了translate3d,动画的同时导致内部的fixed元素失效?6. node.js - win7 grunt不是内部或外部命令。7. 想练支付宝对接和微信支付对接开发(Java),好像个人不可以,怎么弄个企业的呢?8. node.js - 用node做微信开发后台,获取access_token报错9. css3 - 求css页面解决方案10. javascript - 大神们,求救啊,搞百度编辑器,弄了三天了,问题,如下
