关于在vue2中自定义右键弹窗

        所需变量

    // 右键点击的弹框对象
      rightDialogbox: null,
      // 鼠标点击后获取的文本
      chooseText: '',
      // 弹窗的偏移
      left: '',
      top: '',
      // 右键点击的弹框显隐
      rightDialogShow: false,

一、阻止原生事件发生

        第一步我们先要在所需的div范围中阻止原生右键事件的发生

        此处有两个事件:

        @contextmenu.prevent="openMenu($event)"  获取右键点击事件

        @mouseup="handleMouseSelect"   获取选中的文本

<div class="talk-info-text" @contextmenu.prevent="openMenu($event)"           @mouseup="handleMouseSelect">
</div>
  // 右键点击事件
  openMenu(e){
    this.rightDialogShow = true
      this.top = e.pageY;
      this.left = e.pageX;
  },

 // 获取鼠标选中的文本
    handleMouseSelect() {
		this.chooseText = window.getSelection().toString()
	},

二、编写右键弹框

        这里除了剪切、复制、粘贴,我主要是做了一些特定的功能(这里暂时忽略)

<div class="right-dialogbox" :style="{left:left-60+'px',top:top-100+'px'}" id="rightDialogbox" ref="rightDialogbox" v-show="rightDialogShow">
      <div class="right-dialogbox-item" @click="cutStr">剪切</div>
      <div class="right-dialogbox-item">复制</div>
      <div class="right-dialogbox-item">粘贴</div>
      <div v-if="form.content[0].title">
      <div class="right-dialogbox-item" v-for="(item,index) in form.content" :key="index" @click="copyToContent(index)">粘贴到{{item.title}}</div>
 </div>

三、编写剪切、复制、粘贴等自定义功能

    // 粘贴文本
    pasteToText(val){
      // 现代浏览器自带api
      navigator.clipboard.writeText(val);
    },
    // 剪切一段文本
    cutStr(){
      let index = this.talkInfo.indexOf(this.chooseText)
      let lastIndex = this.talkInfo.indexOf(this.chooseText[-1])
      this.talkInfo = this.talkInfo.substring(index,lastIndex)
    },
    // 复制到内容中
    copyToContent(index){
      this.form.content[index].content += this.chooseText;
      this.chooseText = '';
    },
    closeMenu() {
      this.rightDialogShow = false;
    },
watch: {
    // 监听变量,来触发关闭右键菜单,调用关闭菜单的方法
    rightDialogShow(value) {
      if (value) {
        document.body.addEventListener("click", this.closeMenu);
      } else {
        document.body.removeEventListener("click", this.closeMenu);
      }
    },
  },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值