Vue侧边菜单组件

✍️ 作者简介: 一个每天中午去打篮球和锻炼的前端开发。

🐈‍⬛ 两只猫🐱和一只狗的铲屎官🐶

🧣 微博: GuoJ阝阝(fu)


前言

记录一个前端项目中自己写的右侧菜单

很多项目需要右侧悬浮一些菜单,这些菜单可能会根据选中的内容进行变化,根据这个需求,我写了个简单的菜单栏。


提示:以下是本篇文章正文内容,下面案例可供参考

一、实现效果

第一步,肯定是先上效果图,不合适的话也没必要往后看了。
菜单关闭状态
![菜单展开状态](https://img-blog.csdnimg.cn/ed1438c777204c86b8ae3fd59f315307.png
菜单展开状态
根据父组件传值改变

二、使用步骤

代码如下(示例):

<div class="object-menu">
    <ul class="card">
      <van-popover v-model="showPopover" theme="dark" :placement="popPosition" :actions="popMenu" @select="onSelectEdit">
        <template #reference>
          <li
            v-for="(item, index) in menuList"
            :key="index"
            class="card-item"
            :class="{ selected: currentActive == item.value }"
            @click="handleClick(item, index)"
          >
            <van-icon :name="item.icon" />
            <span class="card-item-word">{{item.name}}</span>
          </li>
        </template>
      </van-popover>
    </ul>
 </div>

import { Popover } from "vant";
Vue.use(Popover);

export default {
  name: "ObjectMenu",
  data() {
    return {
    	showPopover: false,
    	popPosition: 'left-start',
    	currentActive: '',
    	popMenu: [
    		{ text: '移动', icon: 'aim', className: 'edit-pop-li' },
        	{ text: '尺寸', icon: 'scan', className: 'edit-pop-li' },
        	{ text: '旋转', icon: 'replay', className: 'edit-pop-li' },
        	{ text: '删除', icon: 'delete-o', className: 'edit-pop-li' },
        	{ text: "动画", icon: "tv-o", className: "edit-pop-li" }
		],
		menuList: [
        {
          name: "操作",
          value: "content",
          icon: "setting-o"
        },
        {
          name: "属性",
          value: "property",
          icon: "label-o"
        },
        {
          name: "编辑",
          value: "edit",
          icon: "edit"
        }
      ],
    }
  },
  methods: {
  	// 判断选中了菜单中的哪一项,这里以icon的名称进行判断。
  	onSelectEdit(action) {
      // 移动
      if (action.icon === "aim") {
      	// 触发父组件的函数
        this.$emit('handleMoveEntity')
      // 尺寸
      } else if (action.icon === "scan") {
        window.gizmoManager.scaleGizmoEnabled = true
      }
    },
    // 点击菜单的下一步操作,当重复选中同一菜单时,取消选中状态
    handleClick(item, val) {
      if (this.currentActive === item.value) {
        this.currentActive = ''
      } else {
        this.currentActive = item.value
      }
    }
  }
}
.object-menu {
  display: flex;
  .card {
    user-select: none;
    font-weight: @font-weight-bold;
    font-size: @font-size-xxxs * 2 + @font-size-sm;
    letter-spacing: 2px;
    text-align: center;
    line-height: 22px;
    margin-right: 10px;
    border-radius: 0.2rem;
    .card-item {
      padding: 0.15rem 0.15rem;
      border-right: none;
      border-bottom: 1px solid @blue;
      background-color: rgba(50, 50, 50, 0.5);
      color: white;
      letter-spacing: 4px;
      width: 0.8rem;
      height: 1.2rem;
      .card-item-word {
        user-select: none;
        font-size: 0.2rem;
      }
      .van-icon {
        font-size: 0.8rem;
        margin-bottom: 0.1rem;
      }
      &:first-child {
        border-radius: 0.2rem 0.2rem 0 0;
      }
      &:last-child {
        border-radius: 0 0 0.2rem 0.2rem;
      }
    }
    .card-node-item {
      padding: 0.15rem 0.15rem;
      width: calc(100% - 0.6rem);
      height: 0.8rem;
      line-height: 0.8rem;
      margin: 0.2rem;
      border-radius: 0.2rem;
      background-color: rgba(180, 180, 180, 0.3);
      .van-col {
        overflow: hidden;
      }
    }
    .selected {
      color: @white;
      background-color: @blue;
      margin: 0;
      padding: 0.15rem 0.15rem;
    }
  }
}

总结

这个组件的改造空间很大。第一,可以根据父组件传递的内容设置menuList的值,实现悬浮菜单的实时变化;第二,根据handleClick函数选中的内容,可以设置弹出下一层菜单,或者弹出其他窗口。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue右侧悬浮二维码是指在Vue项目中,将一个二维码以悬浮的方式显示在网页的右侧。实现这一功能可以按照如下的步骤进行: 首先,在Vue项目的src目录下创建一个新的组件,例如NameCard.vue。 在NameCard.vue中,使用Vue组件模板语法,编写一个div容器用于展示悬浮的二维码。可以使用CSS设置该div容器的样式,如设置为固定定位,指定位置为右侧。在该div容器中插入一个img标签,将二维码的图片作为该标签的src。 在需要显示悬浮二维码的组件中,引入NameCard.vue组件,在模板中使用<name-card></name-card>标签将该组件展示出来。 在该组件的data属性中,定义一个showQRCode的变量,用于控制二维码的显示和隐藏。将showQRCode初始值设为false。 在需要显示二维码的事件或方法中,将showQRCode的值设置为true,即可使二维码显示出来。 为了使二维码可以响应用户的操作,在二维码所在的div容器中添加相应的事件监听器,并绑定一个方法。在该方法中,可以实现用户点击二维码时的具体操作,例如跳转到相应链接、放大缩小二维码等。 最后,为了实现悬浮效果,可以使用CSS的过渡效果或动画效果。通过设置div容器的过渡属性或动画属性,使二维码在显示和隐藏时有平滑的过渡效果。 通过以上步骤,就可以在Vue项目中实现一个右侧悬浮的二维码。用户可以通过点击或操作二维码进行相应的功能或跳转操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值