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 相关文章推荐
Javascript window对象详解
Nov 12 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
ES6教程之for循环和Map,Set用法分析
Apr 10 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
JavaScript实现简单生成随机颜色的方法
Sep 21 Javascript
微信小程序使用component自定义toast弹窗效果
Nov 27 Javascript
最简单的JS实现json转csv的方法
Jan 10 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 Javascript
深入浅析React中diff算法
May 19 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
php批量删除数据
2007/01/18 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
python自动化测试实例解析
2014/09/28 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
Python 求数组局部最大值的实例
2019/11/26 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
Linux常见面试题
2016/10/04 面试题
数控专业毕业生求职信
2014/06/12 职场文书
公司合作意向书范文
2014/07/30 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers