vue中实现点击展开和收起功能(具有动画效果)

本文介绍如何在Vue中使用Element UI实现点击展开和收起功能,并带有动画效果。通过v-show结合el-collapse-transition组件控制元素显示隐藏,利用data属性切换状态。同时,通过CSS实现元素样式变化和按钮交互。

vue中实现点击展开和收起功能(具有动画效果)

html

在这里插入图片描述

	<div class="marketplace_aside_b">
      <div
        v-for="item in classd"
        :key="item.id"
        class="marketplace_aside_show_that"
      >{{ item.text }}</div>

      <el-collapse-transition>
        <div v-show="show3">
          <div
            v-for="item in classed"
            :key="item.id"
            class="marketplace_aside_show_that"
          >{{ item.text }}</div>
        </div>
      </el-collapse-transition>
      <el-button @click="show3 = !show3" class="marketplace_show_more">{{word}}</el-button>
    </div>

css

在这里插入图片描述
.marketplace_aside_b .marketplace_aside_show_that {
height: 35px;
line-height: 35px;
font-size: 14px;
padding-left: 33px;
transition: all 0.5s ease;
}
.marketplace_aside_b .marketplace_aside_show_that:hover{
background-color: #4393FD;
cursor: pointer;
}
.marketplace_aside_b .marketplace_show_more {
width: 101px;
height: 38px;
background-color: #4393FD;
color: #fff;
text-align: center;
margin-left: 70px;
border-radius: 5px;
font-size: 14px;
cursor: pointer;
margin-top: 10px;
margin-bottom: 20px;
}

鼠标经过会有一个蓝色的背景颜色,展现的效果如下:
在这里插入图片描述

script

要去引入组件js文件

在这里插入图片描述

import “element-ui/lib/theme-chalk/base.css”;
// collapse 展开折叠
import CollapseTransition from “element-ui/lib/transitions/collapse-transition”;
import Vue from “vue”;

还有要去components方法中暴露这个组件

在这里插入图片描述

return返回的数值

data() {
return {
show3: false,
classd: [
{ id: 1, text: “分类1” },
{ id: 2, text: “分类2” },
{ id: 3, text: “分类3” },
{ id: 4, text: “分类4” }
],
classed: [
{ id: 5, text: “分类5” },
{ id: 6, text: “分类6” },
{ id: 7, text: “分类7” },
{ id: 8, text: “分类8” }
],

最后computed 方法改变按钮文字

在这里插入图片描述
computed: {
word: function() {
if (this.show3 == false) {
//对文字进行处理
return “展开”;
} else {
return “收起”;
}
}
}

效果完成

在这里插入图片描述

如果想实现点击时变色效果,有以下两种方法,两者区别在

:active,元素被点击时变色,但颜色在点击后消失

:focus, 元素被点击后变色,且颜色在点击后不消失

但是由于div等元素无法接受键盘或其他用户事件,即不支持:focus伪类,可通过增加tabIndex属性使其支持:focus,如下所示:
 <div
        v-for="item in classd"
        :key="item.id"
        class="marketplace_aside_show_that"
         tabindex="4"
      >{{ item.text }}</div>
css:
.marketplace_aside_b .marketplace_aside_show_that:focus {
background-color: #4393FD;
color: #fff;
}
Vue3插件实现展开收起功能时,可借助Vue的过渡效果组件实现自定义动画效果Vue提供了 `<Transition>` `<TransitionGroup>` 组件,能方便地为元素添加过渡动画。 以下是一个简单示例,展示如何使用 `<Transition>` 组件为展开收起功能添加动画效果: ```vue <template> <div> <button @click="isOpen = !isOpen"> {{ isOpen ? &#39;收起&#39; : &#39;展开&#39; }} </button> <Transition name="slide"> <div v-if="isOpen" class="content"> 这里是需要展开收起的内容。 </div> </Transition> </div> </template> <script setup> import { ref } from &#39;vue&#39;; const isOpen = ref(false); </script> <style scoped> /* 定义过渡动画的样式 */ .slide-enter-active, .slide-leave-active { transition: all 0.3s ease; } .slide-enter-from, .slide-leave-to { height: 0; opacity: 0; } </style> ``` 在上述代码中,`<Transition>` 组件包裹了需要添加动画的元素。`name="slide"` 为过渡效果指定了名称,在CSS中通过这个名称定义动画样式。`slide-enter-active` `slide-leave-active` 定义了动画的持续时间缓动函数,`slide-enter-from` `slide-leave-to` 定义了动画的起始结束状态。 若要实现更复杂的动画效果,可结合CSS动画JavaScript钩函数。例如,使用 `@keyframes` 定义更复杂的动画: ```vue <template> <div> <button @click="isOpen = !isOpen"> {{ isOpen ? &#39;收起&#39; : &#39;展开&#39; }} </button> <Transition name="custom" @before-enter="beforeEnter" @enter="enter" @leave="leave"> <div v-if="isOpen" class="content"> 这里是需要展开收起的内容。 </div> </Transition> </div> </template> <script setup> import { ref } from &#39;vue&#39;; const isOpen = ref(false); const beforeEnter = (el) => { el.style.height = &#39;0&#39;; }; const enter = (el, done) => { el.style.height = `${el.scrollHeight}px`; el.addEventListener(&#39;transitionend&#39;, done); }; const leave = (el, done) => { el.style.height = &#39;0&#39;; el.addEventListener(&#39;transitionend&#39;, done); }; </script> <style scoped> /* 定义过渡动画的样式 */ .custom-enter-active, .custom-leave-active { transition: height 0.3s ease; } </style> ``` 在这个示例中,使用了 `<Transition>` 组件的钩函数 `@before-enter`、`@enter` `@leave`,在动画开始结束时执行自定义逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值