• vuejs实现折叠面板展开收缩动画


    vuejs通过css3实现元素固定高度到auto高度的动画和auto高度到固定高度的动画。

    循环列表,html:

    
    <template>
      <div class="newslist">
        <ul>
          <li v-for="(item,index) in newslist" :key="index">
            <p class="p" ref="liCon">{{item.content}}</p>
            <div class="open" @click="open(item,index)">
              <div v-if="!item.openFlag">【展开】</div>
              <div v-else>【收缩】</div>
            </div>
          </li>
        </ul>
      </div>
    </template>
    

    在css上加上动画transition

    
      .newslist ul li p {
        font-size: 14px;
        color: #555;
        line-height: 25px;
        height: 50px;
        overflow: hidden;
        transition: height .3s;
      }
    

    重点是下面js的实现:

    分为两种情况:

    (一)初始状态是收缩时:

    
    <script type="text/ecmascript-6">
      import Vue from 'vue'
    
      export default {
        props: ['newslist'],
        data() {
          return {
            liConHeight: 50 // 两行文字的高度
          }
        },
        methods: {
          open(item, i) {
            const liCon = this.$refs.liCon[i]
            var height = liCon.offsetHeight
            if (height === this.liConHeight) { // 展开
              liCon.style.height = 'auto'
              height = liCon.offsetHeight
              liCon.style.height = this.liConHeight + 'px'
              var f = document.body.offsetHeight  // 必加
              liCon.style.height = height + 'px'
            } else { // 收缩
              liCon.style.height = this.liConHeight + 'px'
            }
            if (!item.openFlag) {
              Vue.set(item, 'openFlag', true)
            } else {
              Vue.set(item, 'openFlag', false)
            }
          }
        }
      }
    </script>
    

    (二)初始状态是展开时:

    稍微改动:

    
    var height = liCon.offsetHeight  // 也可以是liCon.getBoundingClientRect().height
    if (height === this.liConHeight) { // 展开
        liCon.style.height = 'auto'
        height = liCon.offsetHeight
        liCon.style.height = this.liConHeight + 'px'
        liCon.style.height = height + 'px'
    } else { // 收缩
        liCon.style.height = height + 'px'
        var f = document.body.offsetHeight
        liCon.style.height = this.liConHeight + 'px'
    }
    

    来源:https://segmentfault.com/a/1190000016280626

  • 相关阅读:
    Northwind测试学习用数据库
    DataTables在回调方法中使用api
    DataTables获取表单输入框数据
    DataTables选择行并删除(删除单行)
    DataTables选择多行
    DataTables给每一列添加下拉框搜索
    AngularJS 父子控制器
    更改AngularJS的语法解析符号
    AngularJS中的控制器示例_3
    AngularJS中的控制器示例_2
  • 原文地址:https://www.cnblogs.com/qixidi/p/10144160.html
Copyright © 2020-2023  润新知