当前位置:首页 > VUE

vue 实现动画下拉

2026-01-22 19:17:20VUE

Vue 实现动画下拉效果

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

使用 CSS 过渡

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

vue 实现动画下拉

<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> 组件。

vue 实现动画下拉

<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 动态计算高度。

<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 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template>…

自实现vue

自实现vue

实现 Vue 的核心功能 要实现一个简化版的 Vue,需要理解其核心功能:数据响应式、模板编译、虚拟 DOM 和组件系统。以下是关键步骤的分解: 数据响应式 Vue 使用 Object.define…

vue 实现循环

vue 实现循环

Vue 实现循环的方法 在 Vue 中,可以使用 v-for 指令来实现循环渲染列表数据。以下是几种常见的循环实现方式: 基本数组循环 <template> <ul>…

vue博客实现

vue博客实现

Vue 博客实现步骤 项目初始化与基础配置 使用 Vue CLI 或 Vite 创建项目,安装基础依赖如 vue-router 和状态管理库(如 pinia)。配置路由文件实现页面跳转逻辑,例如博客首…

用vue实现echarts

用vue实现echarts

使用 Vue 实现 ECharts 安装依赖 在 Vue 项目中安装 ECharts 和 Vue-ECharts(官方推荐的 Vue 封装库): npm install echarts vue-ec…