当前位置:首页 > 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实现drag

vue实现drag

Vue 实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库如 vuedraggable 来完成。以下是两种常见方法的实现方式。 使用 HTML5 拖拽…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件:…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.defineProperty…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容器组…