当前位置: 首页 > 知识库问答 >
问题:

vue.js - 如何使用 Vue 和 Element-Plus 实现输入框聚焦时下拉按钮消失动画效果?

荀学文
2024-06-08

我想实现掘金网站输入框的效果

  • 当我聚焦输入框的时候,旁边的下拉按钮消失,输入框变长占据下拉框的位置。
  • 取消聚焦的时候,恢复原状

未聚焦
image.png

聚焦
image.png

尝试用vue + element-plus实现,并没有实现这种动画效果,只是简单的占据空间
stackblitz

<script setup>import HelloWorld from './components/HelloWorld.vue';import { ref, computed } from 'vue';const isFocus = ref(false);const basis = computed(() => {  return isFocus.value ? 'flex-full' : 'flex-60';});</script><template>  <div class="flex justify-between w-md">    <el-form :class="basis" class="transition">      <el-form-item class="mb-0">        <el-input          placeholder="搜索"          @focus="isFocus = true"          @blur="isFocus = false"        ></el-input>      </el-form-item>    </el-form>    <el-dropdown v-show="!isFocus" split-button type="primary" class="flex-40">      创作者中心      <template #dropdown>        <el-dropdown-menu>          <el-dropdown-item>Action 1</el-dropdown-item>          <el-dropdown-item>Action 2</el-dropdown-item>          <el-dropdown-item>Action 3</el-dropdown-item>          <el-dropdown-item>Action 4</el-dropdown-item>          <el-dropdown-item>Action 5</el-dropdown-item>        </el-dropdown-menu>      </template>    </el-dropdown>  </div></template><style scoped>.transition {  transition: width 2s ease-in;}.grow {  flex-grow: 1;}.flex-full {  flex-basis: 100%;}.flex-60 {  flex-basis: 60%;}.flex-40 {  flex-basis: 40%;}.mb-0 {  margin-bottom: 0px !important;}.flex {  display: flex;  background: red;}.gap-sm {  gap: 2px;}.justify-between {  justify-content: space-between;}.w-md {  width: 350px;}</style>

附:我感觉使用组件库虽然省事但是也会有很多的限制,可能我现在还没有活用这些组件库。

共有1个答案

慕冠宇
2024-06-08

因为你使用的是 flex 布局,进行伸缩的时候并不只是 width 宽度。

.transition {-  transition: width 2s ease-in;+  transition: all 2s ease-in;}

给你大概改了一个Demo �� Element Plus Playground

<script setup>import { ref, computed } from 'vue';const isFocus = ref(false);</script><template>  <div :class="['flex', 'justify-between', 'w-md', 'box', isFocus ? 'hidden' : 'show']">    <el-form class="flex-full my-form">      <el-form-item>        <el-input          placeholder="搜索"          @focus="isFocus = true"          @blur="isFocus = false"        ></el-input>      </el-form-item>    </el-form>    <el-dropdown split-button type="primary" class="my-dropdown">      创作者中心      <template #dropdown>        <el-dropdown-menu>          <el-dropdown-item>Action 1</el-dropdown-item>          <el-dropdown-item>Action 2</el-dropdown-item>          <el-dropdown-item>Action 3</el-dropdown-item>          <el-dropdown-item>Action 4</el-dropdown-item>          <el-dropdown-item>Action 5</el-dropdown-item>        </el-dropdown-menu>      </template>    </el-dropdown>  </div></template><style scoped>.box {  overflow-x: hidden;  padding-right: 145px;  transition: padding 1s;  box-sizing: border-box;  position: relative;}.box.hidden {  padding-right: 0;}.box.hidden .my-dropdown {  transform: translateX(100%);  opacity: 0}.my-dropdown {  width: 135px;  flex: 0 0 auto;  position: absolute;  right: 0;  transition: transform 1s, opacity .4s;}.grow {  flex-grow: 1;}.flex-full {  flex-basis: 100%;}.flex-60 {  flex-basis: 60%;}.flex-40 {  flex-basis: 40%;}.mb-0 {  margin-bottom: 0px !important;}.flex {  display: flex;}.gap-sm {  gap: 2px;}.justify-between {  justify-content: space-between;}.w-md {  width: 350px;}</style>
 类似资料:
  • 有人知道ElementUI这种换肤动画效果是怎么实现的吗?是什么原理呢? 原地址在这:https://element-plus.org/zh-CN/component/overview.html

  • 使用 vite 打包组件库,在新的项目中使用时报错 下面是打包后的产物 pe 和 dn 找不到导致项目启动时就报错, 手动再新起一个别名时会结局此问题 vite.config.ts 配置如下 请问这个问题该怎么解决

  • 本文向大家介绍HTML5 DataList实现输入框自动下拉提示,包括了HTML5 DataList实现输入框自动下拉提示的使用技巧和注意事项,需要的朋友参考一下 在Web设计中,经常会用到如输入框的自动下拉提示,这将大大方便用户的输入。比如在Google中进行搜索的时候,就会出现下拉的智能提示列表选择框。这样的下拉列表框称为AutoComplete。在以前,如果要实现这样的功能,必须要求开发者使

  • 用哪些element-plus组件可以实现该搜索框的效果呢? default 输入过程中该下拉框一直存在 按回车后转到搜索页面。 这里首先有一个表单 之后考虑下拉框如何实现 尝试一: 使用Dropdown组件 playground 问题 弹出框的长度和输入框的长度不一样长 这个容易解决,在el-input和el-dropdown-menu上设置相同的宽度即可。 带有箭头 需要自己添加一些css样式

  • element-plus如何兼容第三方样式库tailwindcss? 我希望tailwindcss的样式尽可能的覆盖element-plus中的样式。 但事实上相同特殊度下,element-plus的样式覆盖了tailwindcss中的样式 注:在ant design中有专门的章节讲样式兼容问题,而element-plus中没有。

  • 本文向大家介绍vue.js实现单选框、复选框和下拉框示例,包括了vue.js实现单选框、复选框和下拉框示例的使用技巧和注意事项,需要的朋友参考一下 Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势。下边以单选框、复选框和下拉框为例介绍他们在HTML和Vue.js中的具体实现方式。 一、单选框   在传统的HTML中实现单选框的方法如下: 注:这里name属性值必