vue.js 实现点击展开收起动画效果


Posted in Javascript onJuly 07, 2018

最近公司项目加了个页面,其中要求是这样的,点击对应列表,展开和收起,其实就是显示和隐藏内容部分;说来惭愧,我花了半天时间才搞出来(自黑一下~),接下来分享给大家,先上效果图:

vue.js 实现点击展开收起动画效果

vue页面:

<template>
  <div class="dealRecord-wrap">
    <div class="title-contant" v-for="(item,index) in items " >

      <div class="title" @click="showHide(index)">

        <h3>2018年0{{index+6}}月</h3>

        <div class="number">800笔<i></i></div>

      </div>

      <div class="contant">

        <ul>

          <li v-for="i in item.allNumber">
            {{index+6}}
          </li>
        </ul>
      </div>
    </div>
  </div>
</template>
<script>
export default{
  data(){
    return{
      items:[
        {v:'qqq',allNumber:1},

        {v:'aaa',allNumber:2},

        {v:'qqq',allNumber:3},

      ],
    }
  },
  created(){
    document.body.style.backgroundColor = '#f6f6f6';
  },

  mounted(){

    for(var i=0;i<3;i++){  //这里取值自后台返回的长度,设置页面渲染完成后是否展开,此处不展开

      document.getElementsByClassName('contant')[i].style.height = '0px';

    }

  },

  components:{

  },

  methods:{

    showHide(index){  //点击展开收起

      let contant = document.getElementsByClassName('contant')[index];  //这里我们通过参数index来让浏览器判断你点击的是哪一个列表  

      let height = contant.getBoundingClientRect().height;  //获取页面元素的当前高度

      document.getElementsByTagName('i')[index].style.transform = !!height?'rotateX(0deg)':'rotateX(180deg)';

      if (!!height) {

      contant.style.height = height + 'px';

      let f = document.body.offsetHeight; //强制相应dom重绘,使最新的样式得到应用

      contant.style.height = '0px';

      } else {

      contant.style.height = 'auto';

      height = contant.getBoundingClientRect().height;

      contant.style.height = '0';

      let f = document.body.offsetHeight;

      contant.style.height = height + 'px';

      }
    }
  },

  beforeDestroy(){
    document.body.style.backgroundColor = '#fff';
  }
}
</script>
<style type="text/scss" lang="scss" scoped>
.dealRecord-wrap{margin-bottom: 100px;

  .title-contant{overflow: hidden;  /* 这个是重点 */

    .title{height: 84px;padding: 0 24px;border-bottom: 1px solid #eaeaea;/*px*/

      h3{height: 84px;font-size: 28px;color: #333;display: flex;align-items: center;float: left;;margin-left: 10px;}

      .number{height: 84px;font-size: 24px;color: #666;display: flex;align-items: center;float: right;}

      .number i{display: inline-block;width: 23px;height: 13px;background: url('../../assets/images/icon_dropup@2x.png');background-repeat: no-repeat;background-size: 23px 13px;background-position: right 6px center;padding-right: 35px;display: flex;align-items: center; float: right;transform:rotateX(0deg);}

    }

    .contant{background: #fff;transition: height 1s;  /* 这个也是重点 */

      ul li{padding: 0 24px;height: 142px;display: flex;align-items: center;}

      ul li:not(:last-child){border-bottom: 1px solid #f6f6f6;/*px*/}
    }
  }
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。 

Javascript 相关文章推荐
CSS+JS构建的图片查看器
Jul 22 Javascript
模拟电子签章盖章效果的jQuery插件源码
Jun 24 Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
Node.js的包详细介绍
Jan 14 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
Sep 14 Javascript
js多功能分页组件layPage使用方法详解
May 19 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
js神秘的电报密码 哈弗曼编码实现
Sep 10 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 Javascript
js实现时钟定时器
Mar 26 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 #Javascript
微信小程序使用wxParse解析html的方法教程
Jul 06 #Javascript
小程序实现发表评论功能
Jul 06 #Javascript
vue中倒计时组件的实例代码
Jul 06 #Javascript
微信小程序websocket实现聊天功能
Mar 30 #Javascript
vue中锚点的三种方法
Jul 06 #Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 #Javascript
You might like
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
php常用图片处理类
2016/03/16 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
python使用knn实现特征向量分类
2018/12/26 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
pytorch实现线性拟合方式
2020/01/15 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
python绘制高斯曲线
2021/02/19 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
小学生红领巾广播稿
2014/01/21 职场文书
寒假家长评语大全
2014/04/16 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
怎样写家长意见
2015/06/04 职场文书
校园运动会广播稿
2015/08/19 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
Golang 结构体数据集合
2022/04/22 Golang