在展示大量文本的时候,很多网站会在页面上出现一个展开全文的文字按钮 , 点击这个按钮才会展开全部内容 .
使用jquery比较容易实现 , 最开始我想直接根据vuejs的语法来实现效果 , 结果失败 , 还是jq做起来简单
思路是 , 获取当前文本的div高度 ,超过一定高度就增加一个class值 . 它旁边的点击展开全文默认隐藏 , 超过高度展示 .
展开全文点击后更换文字内容为收起全文
在vuejs中也可以正常使用jquery , 增加一个method
displayAll(){$(function(){let obj=$("body").find(".mailMainIntro");let readMore=$(".readMore");readMore.hide();obj.removeClass("mainIntroZhe");obj.each(function(){let height=$(this).height();let text=$(this).text();console.log(height,text);if(height>67){$(this).addClass("mainIntroZhe");$(this).next().show();}});readMore.unbind("click").click(function(e){let text=$(this).text();if(text=="展开全文"){$(this).text("收起全文");$(this).prev().removeClass("mainIntroZhe");}if(text=="收起全文"){$(this).text("展开全文");$(this).prev().addClass("mainIntroZhe");}return;});});}
html部分是这样的
<el-row v-for="(item, index) in weiboList" :key="index" class="mainAccountBox"><el-card :body-style="{ padding: '10px' }"><el-col :span="3"><el-avatar :size="60"><img :src="item.img" class="image"></el-avatar></el-col><el-col :span="21"><div class="mainAccountList"><div class="title">{{item.name}}</div><div class="mailMainIntro" v-html="item.text" ></div><div class="readMore">展开全文</div><div class="turnWeibo" v-if="item.weibo!=null&&item.weibo.length!=0"><div class="title">@{{item.weibo.name}}</div><div class="mailMainIntro" v-html="item.weibo.text"></div><div class="readMore">展开全文</div></div><div class="mainTime">{{item.create_time}} <span v-html="item.source"></span></div><div class="bottom"><el-button type="primary" v-on:click="copySpecialTopicUrl(item.weibo_url)" class="button">复制URL</el-button><el-button type="primary" v-on:click="copySpecialTopicUrl('http://t.cn/'+item.short_url)" class="button">复制短URL</el-button><el-button type="success" class="button">推至CMS</el-button></div></div></el-col><div class="clearfix"></div></el-card></el-row>
ajax获取完数据后就执行一下displayAll方法
getWeiboList: function () {let _this = this;let data={};if(this.weiboSearch != ""){data.word=this.weiboSearch;}if(this.pickTime != ""){data.dt=this.pickTime;}$.get('index.php?r=media/getdata',data, function (rs) {let res= JSON.parse(rs);_this.weiboList=res.result.rows;_this.displayAll();}).then(()=>{this.getTodayNums();});},