当前位置: 首页 > article >正文

关于在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);
      }
    },
  },


http://www.kler.cn/a/320825.html

相关文章:

  • Codeforces Round 987 (Div. 2) ABCD
  • 【动手学电机驱动】 STM32-FOC(7)MCSDK Pilot 上位机控制与调试
  • 重置docker版本的octoprint管理员账号密码
  • 图形 2.6 伽马校正
  • 丹摩征文活动 |【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
  • c++ 类和对象(中)
  • nginx使用stream转发流量
  • Elasticsearch 实战应用
  • .netCore运行的环境WindowsHosting和dotnet-sdk区别
  • 自动化测试数据管理问题
  • 什么是注入攻击???
  • Linux-L12-更改文件的拥有者
  • 通信工程学习:什么是PNF物理网络功能
  • AI可信度标准与框架
  • 【文心智能体】从零到一的优质智能体构建全攻略
  • RabbitMQ 快速入门
  • 双击热备 Electron网页客户端
  • 合同管理中的常见陷阱,你是否也中招了?
  • 华为GaussDB数据库(单机版)在ARM环境下的安装指南
  • 828华为云征文 | 华为云 X 实例服务器存储性能测试与优化策略
  • 【开源免费】基于SpringBoot+Vue.JS服装商城系统(JAVA毕业设计)
  • .netcore nacos注册成功,服务列表找不到任何服务
  • 前端面试题(五)
  • Linux开发环境配置(上)
  • 分布式环境中解决主从延时的一些思路
  • Session和Cookie是什么?有什么区别?分布式Session问题又是什么?