VUE3 实现文本划词并出现操作菜单

在 Vue 3 中,实现文本划词并出现操作菜单,可以通过以下步骤完成:
1.捕捉文本选择事件:使用 mouseup 事件监听用户完成文本选择。
2.获取选中的文本:使用 window.getSelection() 获取用户选择的文本。
3.显示操作菜单:在用户选择文本后,显示一个上下文菜单。
<template>
  <div @mouseup="handleMouseUp">
    <p>这是一个示例文本。当你选择这个文本的一部分时,会出现一个操作菜单。</p>
    <div v-if="showMenu" :style="menuStyle" class="context-menu">
      <button @click="copyText">复制</button>
      <button @click="searchText">搜索</button>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const showMenu = ref(false)
const menuStyle = ref({
  top: '0px',
  left: '0px'
})
const selectedText = ref('')

const handleMouseUp = (event) => {
  const selection = window.getSelection()
  const text = selection.toString()
  if (text) {
    selectedText.value = text
    const range = selection.getRangeAt(0)
    const rect = range.getBoundingClientRect()
    menuStyle.value = {
      top: `${rect.bottom + window.scrollY}px`,
      left: `${rect.left + window.scrollX}px`
    };
    showMenu.value = true
  } else {
    showMenu.value = false
  }
}

const copyText = () => {
  navigator.clipboard.writeText(selectedText.value)
    .then(() => {
      alert('文本已复制')
      showMenu.value = false
    })
    .catch(err => {
      console.error('复制失败: ', err)
    })
}

const searchText = () => {
  const url = 'https://www.baidu.com'
  window.open(url, '_blank')
  showMenu.value = false
}
</script>

<style>
.context-menu {
  position: absolute;
  background-color: white;
  border: 1px solid #ccc;
  padding: 5px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}

button {
  margin: 0 5px;
}
</style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容