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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 Javascript
js获取客户端外网ip的简单实例
Nov 21 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
Nov 12 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中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
mouse_on_title.js
2006/08/25 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
再探JavaScript作用域
2014/09/24 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python调用飞书发送消息的示例
2020/11/10 Python
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
全神贯注教学反思
2014/02/03 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
模范教师事迹材料
2014/12/16 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python