vuejs实现折叠面板展开收缩动画效果


Posted in Javascript onSeptember 06, 2018

vuejs通过css3实现元素固定高度到auto高度的动画和auto高度到固定高度的动画。

循环列表,html:

<template>
 <div class="newslist">
  <ul>
   <li v-for="(item,index) in newslist" :key="index">
    <p class="p" ref="liCon">{{item.content}}</p>
    <div class="open" @click="open(item,index)">
     <div v-if="!item.openFlag">【展开】</div>
     <div v-else>【收缩】</div>
    </div>
   </li>
  </ul>
 </div>
</template>

在css上加上动画transition

.newslist ul li p {
  font-size: 14px;
  color: #555;
  line-height: 25px;
  height: 50px;
  overflow: hidden;
  transition: height .3s;
 }

重点是下面js的实现:

分为两种情况:

(一)初始状态是收缩时:

<script type="text/ecmascript-6">
 import Vue from 'vue'
 export default {
  props: ['newslist'],
  data() {
   return {
    liConHeight: 50 // 两行文字的高度
   }
  },
  methods: {
   open(item, i) {
    const liCon = this.$refs.liCon[i]
    var height = liCon.offsetHeight
    if (height === this.liConHeight) { // 展开
     liCon.style.height = 'auto'
     height = liCon.offsetHeight
     liCon.style.height = this.liConHeight + 'px'
     var f = document.body.offsetHeight // 必加
     liCon.style.height = height + 'px'
    } else { // 收缩
     liCon.style.height = this.liConHeight + 'px'
    }
    if (!item.openFlag) {
     Vue.set(item, 'openFlag', true)
    } else {
     Vue.set(item, 'openFlag', false)
    }
   }
  }
 }
</script>

(二)初始状态是展开时:

稍微改动:

var height = liCon.offsetHeight // 也可以是liCon.getBoundingClientRect().height
if (height === this.liConHeight) { // 展开
  liCon.style.height = 'auto'
  height = liCon.offsetHeight
  liCon.style.height = this.liConHeight + 'px'
  liCon.style.height = height + 'px'
} else { // 收缩
  liCon.style.height = height + 'px'
  var f = document.body.offsetHeight
  liCon.style.height = this.liConHeight + 'px'
}

总结

以上所述是小编给大家介绍的vuejs实现折叠面板展开收缩动画效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 避免闭包引发的问题
Mar 17 Javascript
Javascript高级技巧分享
Feb 25 Javascript
jquery引用方法时传递参数原理分析
Oct 13 Javascript
jQuery层动画定位滑动效果的方法
Apr 30 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
Oct 28 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
React中上传图片到七牛的示例代码
Oct 10 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
Sep 05 Javascript
在vue中读取本地Json文件的方法
Sep 06 #Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 #Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 #Javascript
vue template中slot-scope/scope的使用方法
Sep 06 #Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
Sep 06 #Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 #jQuery
Vue下拉框回显并默认选中随机问题
Sep 06 #Javascript
You might like
再说下636单管机
2021/03/02 无线电
PHP抽象类 介绍
2012/06/13 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
python概率计算器实例分析
2015/03/25 Python
Python中decorator使用实例
2015/04/14 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
医院总经理岗位职责
2014/02/04 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
工地安全生产标语
2014/06/06 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
生产实习心得体会范文
2016/01/22 职场文书
用php如何解决大文件分片上传问题
2021/07/07 PHP
Python实现位图分割的效果
2021/11/20 Python
Windows server 2016服务器基本设置
2022/08/14 Servers