当前位置:首页 > VUE

vue 实现动画下拉

2026-01-22 19:17:20VUE

Vue 实现动画下拉效果

在 Vue 中实现动画下拉效果,可以通过结合 CSS 过渡或动画与 Vue 的 <transition> 组件来实现。以下是两种常见的实现方式:

使用 CSS 过渡

通过 Vue 的 <transition> 组件和 CSS 过渡属性,可以实现平滑的下拉动画效果。

<template>
  <div>
    <button @click="toggleDropdown">Toggle Dropdown</button>
    <transition name="slide">
      <div v-if="isOpen" class="dropdown-content">
        <p>Dropdown Content</p>
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false
    };
  },
  methods: {
    toggleDropdown() {
      this.isOpen = !this.isOpen;
    }
  }
};
</script>

<style>
.slide-enter-active, .slide-leave-active {
  transition: max-height 0.5s ease;
}
.slide-enter, .slide-leave-to {
  max-height: 0;
  overflow: hidden;
}
.slide-enter-to, .slide-leave {
  max-height: 100px;
}
.dropdown-content {
  background: #f9f9f9;
  padding: 10px;
}
</style>

使用 CSS 动画

如果需要更复杂的动画效果,可以使用 CSS 动画结合 <transition> 组件。

<template>
  <div>
    <button @click="toggleDropdown">Toggle Dropdown</button>
    <transition name="fade">
      <div v-if="isOpen" class="dropdown-content">
        <p>Dropdown Content</p>
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false
    };
  },
  methods: {
    toggleDropdown() {
      this.isOpen = !this.isOpen;
    }
  }
};
</script>

<style>
.fade-enter-active {
  animation: fadeIn 0.5s;
}
.fade-leave-active {
  animation: fadeOut 0.5s;
}
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(-20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes fadeOut {
  from {
    opacity: 1;
    transform: translateY(0);
  }
  to {
    opacity: 0;
    transform: translateY(-20px);
  }
}
.dropdown-content {
  background: #f9f9f9;
  padding: 10px;
}
</style>

使用第三方动画库

如果需要更丰富的动画效果,可以结合第三方动画库如 animate.css 来实现。

<template>
  <div>
    <button @click="toggleDropdown">Toggle Dropdown</button>
    <transition
      enter-active-class="animate__animated animate__fadeInDown"
      leave-active-class="animate__animated animate__fadeOutUp"
    >
      <div v-if="isOpen" class="dropdown-content">
        <p>Dropdown Content</p>
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false
    };
  },
  methods: {
    toggleDropdown() {
      this.isOpen = !this.isOpen;
    }
  }
};
</script>

<style>
.dropdown-content {
  background: #f9f9f9;
  padding: 10px;
}
</style>

动态高度下拉

如果下拉内容的高度不确定,可以使用 JavaScript 动态计算高度。

vue 实现动画下拉

<template>
  <div>
    <button @click="toggleDropdown">Toggle Dropdown</button>
    <transition
      @enter="enter"
      @after-enter="afterEnter"
      @leave="leave"
    >
      <div v-if="isOpen" class="dropdown-content" ref="dropdown">
        <p>Dropdown Content</p>
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false
    };
  },
  methods: {
    toggleDropdown() {
      this.isOpen = !this.isOpen;
    },
    enter(el) {
      el.style.height = 'auto';
      const height = el.scrollHeight;
      el.style.height = '0';
      setTimeout(() => {
        el.style.height = `${height}px`;
      });
    },
    afterEnter(el) {
      el.style.height = 'auto';
    },
    leave(el) {
      el.style.height = `${el.scrollHeight}px`;
      setTimeout(() => {
        el.style.height = '0';
      });
    }
  }
};
</script>

<style>
.dropdown-content {
  background: #f9f9f9;
  padding: 10px;
  overflow: hidden;
  transition: height 0.5s ease;
}
</style>

以上方法可以根据实际需求选择适合的方式实现动画下拉效果。

标签: 动画vue
分享给朋友:

相关文章

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue底部实现

vue底部实现

Vue 底部实现方法 在 Vue 项目中实现底部布局可以通过多种方式完成,以下是一些常见的方法: 使用固定定位 将底部元素固定在页面底部,适用于单页应用或需要始终显示的底部栏。 <temp…