鼠标选中文本复制,如果松开时鼠标位于click包裹的文本上会默认执行click事件

鼠标选中文本复制,如果松开时鼠标位于click包裹的文本上会默认执行click事件

onmousedown->onmouseup->onclick,解决方案:利用down到up的时间差,与200ms作比较

Vue.directive('drag', {
  // 指令的定义
  bind: function (el) {
    let odiv = el; //获取当前元素
    let firstTime = '',
      lastTime = '';
    odiv.onmousedown = (e) => {
      document.getElementById('dragbtn').setAttribute('data-flag', false)
      firstTime = new Date().getTime();
      //  算出鼠标相对元素的位置
      let disY = e.clientY - odiv.offsetTop;
      document.onmousemove = (e) => {
        //  用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
        let top = e.clientY - disY;
        //  页面范围内移动元素
        if (top > 0 && top < document.body.clientHeight - 48) {
          odiv.style.top = top + 'px';
        }
      };
      document.onmouseup = (e) => {
        document.onmousemove = null;
        document.onmouseup = null;
        // onmouseup 时的时间,并计算差值
        lastTime = new Date().getTime();
        if ((lastTime - firstTime) < 200) {
          document.getElementById('dragbtn').setAttribute('data-flag', true)
        }
      };
    };
  }

})


@click(){
    //  验证是否为点击事件,是则继续执行click事件,否则不执行
    let isClick = document.getElementById('dragbtn').getAttribute('data-flag');
    if(isClick !== 'true') {
        return false
    }
    this.$router.push({
        name: "goodsdetail",
        query: { id },
    });
}
Vue.js 中,原生 JavaScript 通过处理用户事件和操作文档对象模型 (DOM) 来实现在选中文本后弹出右键复制菜单的功能。以下是简单的步骤: 1. 首先,在模板(HTML)上添加一个可编辑的输入框或者其他可以聚焦元素,并绑定 `@contextmenu` 或者 `@copyEvent` 等自定义事件监听器。 ```html <div contenteditable="true" @copyEvent="copyText">点击这里选择文字然后按右键</div> ``` 2. 创建一个 JavaScript 函数来捕获 `contextmenu` 事件,并阻止浏览器默认的行为,通常会显示系统上下文菜单。然后手动创建并展示复制选项。 ```javascript export default { methods: { copyText(event) { event.preventDefault(); // 阻止浏览器默认操作 const selection = window.getSelection(); if (!selection.rangeCount) return; // 没有选中内容,跳过 let textToCopy = ''; for (let range of selection.getRanges()) { if (range.commonAncestorNode.nodeType === Node.TEXT_NODE) { textToCopy += range.commonAncestorNode.textContent; } } const menu = document.createElement('ul'); const li = document.createElement('li'); li.textContent = '复制'; li.addEventListener('click', () => { navigator.clipboard.writeText(textToCopy); }); menu.appendChild(li); const event = new MouseEvent('contextmenu', { bubbles: true, cancelable: true, view: window, detail: 0, }); menu.dispatchEvent(event); // 手动模拟 contextmenu 事件,显示复制菜单 // 清理菜单 setTimeout(() => menu.remove(), 100); }, }, }; ``` 这个例子中,当用户选中文本后触发 `copyText` 方法,我们获取选区内的文本,创建一个简单的右键菜单,点击“复制”按钮使用 `navigator.clipboard.writeText` 将文本复制到剪贴板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值