高度不固定下拉框的过度动画,怎么实现?

要实现高度不固定的下拉框过渡动画,可以使用 CSS 的transition属性结合 JavaScript 或相关前端框架(如 Vue、React)来实现。以下分别是原生 JavaScript 和 Vue 框架下的实现方式:

原生 JavaScript 实现

  • HTML 结构

html

xml 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="styles.css">
</head>

<body>
  <div class="dropdown">
    <button class="dropdown-toggle">下拉菜单</button>
    <div class="dropdown-menu">
      <a href="#" class="dropdown-item">选项1</a>
      <a href="#" class="dropdown-item">选项2</a>
      <a href="#" class="dropdown-item">选项3</a>
    </div>
  </div>
  <script src="script.js"></script>
</body>

</html>
  • CSS 样式

css

css 复制代码
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-menu {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  /* 过渡效果 */
  transition: all 0.3s ease-in-out;
  overflow: hidden;
}

.dropdown-menu a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-menu a:hover {
  background-color: #f1f1f1
}

.dropdown:hover .dropdown-menu {
  display: block;
  /* 高度由内容自适应 */
  height: auto;
  max-height: 300px; /* 可根据需要调整最大高度 */
  opacity: 1;
}
  • JavaScript 逻辑

javascript

javascript 复制代码
// 获取下拉菜单元素
const dropdownMenu = document.querySelector('.dropdown-menu');

// 为下拉按钮添加点击事件监听器
document.querySelector('.dropdown-toggle').addEventListener('click', function () {
  // 切换下拉菜单的显示状态
  dropdownMenu.style.display = dropdownMenu.style.display === 'block' ? 'none' : 'block';
});

Vue 框架实现

  • HTML 结构

html

xml 复制代码
<template>
  <div class="dropdown">
    <button class="dropdown-toggle" @click="showDropdown = !showDropdown">下拉菜单</button>
    <transition name="dropdown-transition">
      <div v-show="showDropdown" class="dropdown-menu">
        <a href="#" class="dropdown-item" v-for="(item, index) in dropdownItems" :key="index">{{ item }}</a>
      </div>
    </transition>
  </div>
</template>
  • CSS 样式

css

css 复制代码
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-menu {
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  overflow: hidden;
  /* 初始高度为0 */
  height: 0;
  opacity: 0;
  /* 过渡效果 */
  transition: all 0.3s ease-in-out;
}

.dropdown-menu a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-menu a:hover {
  background-color: #f1f1f1
}

/* 过渡类名 - 进入时 */
.dropdown-transition-enter-active {
  height: auto;
  opacity: 1;
  max-height: 300px; /* 可根据需要调整最大高度 */
}

/* 过渡类名 - 离开时 */
.dropdown-transition-leave-active {
  height: 0;
  opacity: 0;
}
  • JavaScript 逻辑

javascript

javascript 复制代码
import { ref } from 'vue';

export default {
  setup() {
    // 控制下拉菜单显示隐藏的响应式变量
    const showDropdown = ref(false);
    // 下拉菜单选项数据
    const dropdownItems = ref(['选项1', '选项2', '选项3']);

    return {
      showDropdown,
      dropdownItems
    };
  }
};

以上代码通过 CSS 的过渡效果和 JavaScript 或 Vue 的逻辑控制,实现了一个高度不固定的下拉框过渡动画。当鼠标悬停或点击下拉按钮时,下拉菜单会以平滑的过渡效果显示或隐藏。

相关推荐
小光学长几秒前
基于Vue的图书馆座位预约系统6emrqhc8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
Y学院11 分钟前
vue的组件通信
前端·javascript·vue.js
PairsNightRain14 分钟前
React Concurrent Mode 是什么?怎么使用?
前端·react.js·前端框架
小岛前端27 分钟前
React 剧变!
前端·react.js·前端框架
teeeeeeemo39 分钟前
Webpack 模块联邦(Module Federation)
开发语言·前端·javascript·笔记·webpack·node.js
岁月宁静1 小时前
AI聊天系统 实战:打造优雅的聊天记录复制与批量下载功能
前端·vue.js·人工智能
小小弯_Shelby1 小时前
uniApp App内嵌H5打开内部链接,返回手势(左滑右滑页面)会直接关闭H5项目
前端·uni-app
IT_陈寒1 小时前
SpringBoot性能飞跃:5个关键优化让你的应用吞吐量提升300%
前端·人工智能·后端
加洛斯2 小时前
Vue 知识篇(2):浅谈Vue中的DOM与VNode
前端·javascript·vue.js
kunge1v52 小时前
学习爬虫第三天:数据提取
前端·爬虫·python·学习