vue3封装一个带动画的关闭按钮示例详解

 更新时间:2023年09月28日 09:06:10   作者:jsoncode  
这篇文章主要为大家介绍了vue3封装一个带动画的关闭按钮示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

预览效果

实现源码

<template>
  <MenuBtn
      :open="openMenu"
      :size="24"
  />
</template>
<template>
  <div :class="`menu ${open?'open':''}`" :style="`width:${size}px;height:${size}px`">
    <span
        :style="`
          transition-duration:${duration}ms;
          transform:${open?`translateY(${(size-2)/2}px) rotate(-45deg)`:`translateY(${size/6}px)`};
        `"
    />
    <span
        :style="`
          transition-duration:${duration}ms;
          ${open?`opacity: 0;transform: rotate(-45deg)`:''}
        `"
    />
    <span
        :style="`
          transition-duration:${duration}ms;
          transform:${open?`translateY(${-(size-2)/2}px) rotate(45deg)`:`translateY(-${size/6}px)`};
        `"
    />
  </div>
</template>
<script setup>
// 这里用了vue3的专用写法。vue2写法,自行实现。
const {open, size, duration} = defineProps({
  open: {
    type: Boolean,
    default: false,
    required: true,
  },
  size: {
    type: Number,
    default: 24,
    required: false
  },
  duration: {
    type: Number,
    default: 300,
    required: false
  }
});
</script>
<style scoped lang="scss">
.menu {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-direction: column;
  span {
    height: 2px;
    border-radius: 2px;
    display: flex;
    width: 100%;
    background-color: #333;
  }
}
</style>

源码说明

带有变量的样式,都写在行内了,因为这样适合用在任意场景下。

// nuxt3 
npx nuxi init <project-name>
// nuxt2
yarn create nuxt-app <project-name>
// vue-cli
vue create <project-name>
// vite
npm init vite-app <project-name>

其他场景

vite可以直接在style标签中使用js变量

npm init vite-app <project-name>
<template>
  <h1>{color}</h1>
</template>
<script>
export default {
  data () {
    return {
      color: 'red'
    }
  }
}
</script>
<style vars="{ color }" scoped>
h1 {
  color: var(--color);
}
</style>

以上就是vue3封装一个带动画的关闭按钮示例详解的详细内容,更多关于vue3封装动画关闭按钮的资料请关注脚本之家其它相关文章!

相关文章

  • vue+element项目中过滤输入框特殊字符小结

    vue+element项目中过滤输入框特殊字符小结

    这篇文章主要介绍了vue+element项目中过滤输入框特殊字符小结,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Vue3.2 中新出的Expose用法一览

    Vue3.2 中新出的Expose用法一览

    这篇文章主要介绍了Vue3.2 中新出的 Expose 是做啥用的,新的expose方法是非常直观的,而且很容易在我们的组件中实现,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Vue 引入AMap高德地图的实现代码

    Vue 引入AMap高德地图的实现代码

    这篇文章主要介绍了Vue 引入AMap高德地图的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue组件库的在线主题编辑器的实现思路

    vue组件库的在线主题编辑器的实现思路

    这篇文章主要介绍了vue组件库的在线主题编辑器的实现思路,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • vue中的v-if和v-show的区别详解

    vue中的v-if和v-show的区别详解

    这篇文章主要介绍了vue中的v-if和v-show的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 一文搞懂Vue八大生命周期钩子函数

    一文搞懂Vue八大生命周期钩子函数

    这篇文章主要介绍了Vue八大生命周期钩子函数,生命周期函数,就是在某个时刻会自动执行的函数,本文带你了解八大生命周期钩子函数,一起来看看吧
    2023-03-03
  • Vue和uniapp中该如何使用canvas详解

    Vue和uniapp中该如何使用canvas详解

    说起canvas是css3新增的标签,而饼状图又是canvas经典,我们公司现在正在用uni-app框架去研发APP,下面这篇文章主要给大家介绍了关于Vue和uniapp中该如何使用canvas的相关资料,需要的朋友可以参考下
    2022-10-10
  • element-ui配合node实现自定义上传文件方式

    element-ui配合node实现自定义上传文件方式

    这篇文章主要介绍了element-ui配合node实现自定义上传文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 使用vue3重构拼图游戏的实现示例

    使用vue3重构拼图游戏的实现示例

    这篇文章主要介绍了使用vue3重构拼图游戏的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • vue下载文件以及文件重命名方式

    vue下载文件以及文件重命名方式

    这篇文章主要介绍了vue下载文件以及文件重命名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10

最新评论