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实现网页上的浮动广告的简单方法
Jun 14 Javascript
判定是否原生方法的JS代码
Nov 12 Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
Vue.js实现无限加载与分页功能开发
Nov 03 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 jQuery
layui禁用侧边导航栏点击事件的解决方法
Sep 25 Javascript
Vue使用screenfull实现全屏效果
Sep 17 Javascript
Vue基本指令实例图文讲解
Feb 25 Vue.js
微信小程序实现聊天对话(文本、图片)功能
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
Search Engine Friendly的URL设计
2006/10/09 PHP
php学习之变量的使用
2011/05/29 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
js跳转页面方法总结
2014/01/29 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
浅析python标准库中的glob
2020/03/13 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
公司2014年度工作总结
2014/12/10 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
Java设计模式之代理模式
2022/04/22 Java/Android