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 相关文章推荐
js DOM模型操作
Dec 28 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
JavaScript控制网页层收起和展开效果的方法
Apr 15 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
微信公众号H5支付接口调用方法
Jan 10 Javascript
微信小程序开发注意指南和优化实践(小结)
Jun 21 Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 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
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
js的event详解。
2006/09/06 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
python difflib模块示例讲解
2017/09/13 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
python列表的逆序遍历实现
2020/04/20 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
英语国培研修感言
2014/02/13 职场文书
化工见习报告范文
2014/10/31 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang