美文网首页
VUE transition实现展开/收起高度不确定的元素

VUE transition实现展开/收起高度不确定的元素

作者: 努力努力再努力_g | 来源:发表于2020-04-08 15:50 被阅读0次

最近遇到一个需求,循环展示列表,每个列表要有收起和展开的功能,由于每个列表的高度不确定,在写vue-transition的时候遇到了问题。


image.png

正常实现展开收缩的方法

<!--css-->
原链接  [https://www.jianshu.com/p/6cd79c029167](https://www.jianshu.com/p/6cd79c029167)
作者:[xilong](https://www.jianshu.com/u/fdd91ad87feb)


.box{
    height:200px;width: 200px;
    background-color:black;
}
.draw-enter-active, .draw-leave-active {
    transition: all 1s ease;
}
.draw-enter, .draw-leave-to /* .fade-leave-active below version 2.1.8 */ {
    height: 0;
}

<div id="app">
    <button @click="boxshow = !boxshow">点击展开/关闭</button>
    <transition name="draw">   <!--这里的name 和 css 类名第一个字段要一样-->
        <div class="box"  v-show="boxshow"></div>
    </transition>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            boxshow:false
        },
    });
</script>

实现高度自适应的收缩和展开

参考原链接:https://segmentfault.com/a/1190000021856837
作者:oranges_c (关注他!!!!!!!帮我节省了好长时间)

我一开始想参考element-ui 中 collapse 的处理方式,源码也可以拿来用,后来上述作者给的处理方法也能正常使用,就没再看源码。以下是处理方式

collapse-transition.js,这个文件我是放在utils工具类中的

const transitionStyle = '0.3s height ease-in-out'
const Transition = {
  beforeEnter (el) {
    el.style.transition = transitionStyle
    if (!el.dataset) el.dataset = {}

    el.style.height = 0
  },

  enter (el) {
    if (el.scrollHeight !== 0) {
      el.style.height = `${el.scrollHeight}px`
    } else {
      el.style.height = ''
    }
    el.style.overflow = 'hidden'
  },

  afterEnter (el) {
    el.style.transition = ''
    el.style.height = ''
  },

  beforeLeave (el) {
    if (!el.dataset) el.dataset = {}
    el.style.height = `${el.scrollHeight}px`
    el.style.overflow = 'hidden'
  },

  leave (el) {
    if (el.scrollHeight !== 0) {
      el.style.transition = transitionStyle
      el.style.height = 0
    }
  },

  afterLeave (el) {
    el.style.transition = ''
    el.style.height = ''
  }
}

export default {
  name: 'CollapseTransition',
  functional: true,
  render (h, {
    children
  }) {
    const data = {
      on: Transition
    }
    return h('transition', data, children)
  }
}

页面中使用方法
 <div class="expand">
        <div v-if="!boxshow"
             class="flex"
             @click="boxshow = !boxshow">
          <span>展开</span>
          <i class="h-icon-angle_down"></i>
        </div>
        <div v-if="boxshow"
             class="flex"
             @click="boxshow = !boxshow">
          <span>收起</span>
          <i class="h-icon-angle_up"></i>
        </div>
   </div>

<collapse-transition>
  <div class="cashbox-body expandBox"
           v-if="boxshow">
你的具体内容放在这里
</div>
</collapse-transition>

import CollapseTransition from '@/utils/collapse-transition'
export default {
  components: {
    'collapse-transition': CollapseTransition
  },
  data () {
    return {
      boxshow: true
    }
  }
}

原链接写的更详细,各位可以参考原链接哦!

相关文章

  • VUE transition实现展开/收起高度不确定的元素

    最近遇到一个需求,循环展示列表,每个列表要有收起和展开的功能,由于每个列表的高度不确定,在写vue-transit...

  • Vue之transition

    Vue的transition实现动画效果 Vue 提供了 transition 的封装组件,可以给任何元素和组件添...

  • 12.2使用animate.css

    使用过度类名,实现动画 第一步是将需要动画的元素包裹在transition元素中,transition元素时Vue...

  • Vue动画之三: 多元素 、多组件

    今天给大家, 介绍一下, 怎样在Vue中实现多元素和多组件的动画。1、多元素实现的代码注意: transition...

  • Vuejs动画

    使用transition 元素 把 需要被动画控制的元素包裹起来transition元素是vue官方提供的分为分为...

  • vue展开收起

    代码 collapse.vue collapse.js

  • vue实现展开全部,收起全部

    1.给数组的每一项添加是否展开或收起的标志:‘toggleShowDes’和长度限制的标志:‘ifMore’ 2....

  • Vue实现点击展开收起功能

    为了节省大家宝贵的时间,先看看效果图是不是你们想要的吧。 1.实现思路   数据存放到showList数组中,通过...

  • vue中展开收起的实现方式

    这个页面的API会返回N多期课程,每期课程下面会有N多次课,每次课里面有N多节视频,默认第一期的第一课是展开的,其...

  • vue-展开收起按钮的实现

    在仿豆瓣中有一个展开的小按钮,点击可以展开全部的内容介绍,不展开的话则只显示三行。 这里我是直接用一个控制添加多行...

网友评论

      本文标题:VUE transition实现展开/收起高度不确定的元素

      本文链接:https://www.haomeiwen.com/subject/nymtmhtx.html