当前位置:首页 > VUE

vue实现文本选取

2026-02-17 11:18:01VUE

Vue 实现文本选取的方法

使用原生 JavaScript 事件

通过 @mouseup@touchend 事件监听用户操作,结合 window.getSelection() 获取选中文本。在 Vue 模板中添加事件监听:

<template>
  <div @mouseup="handleTextSelection">
    {{ content }}
  </div>
</template>

<script>
export default {
  methods: {
    handleTextSelection() {
      const selection = window.getSelection();
      if (selection.toString().length > 0) {
        console.log('Selected text:', selection.toString());
      }
    }
  }
}
</script>

自定义指令封装

创建 Vue 指令 v-selection 实现复用:

Vue.directive('selection', {
  bind(el, binding) {
    el.addEventListener('mouseup', () => {
      const selection = window.getSelection();
      if (selection.toString().length > 0) {
        binding.value(selection.toString());
      }
    });
  }
});

使用指令:

<div v-selection="handleSelectedText">
  {{ longTextContent }}
</div>

处理跨元素选中

当文本跨越多行或多元素时,需要使用 Range API 增强处理:

vue实现文本选取

methods: {
  getSelectedText() {
    const selection = window.getSelection();
    if (selection.rangeCount > 0) {
      const range = selection.getRangeAt(0);
      return {
        text: range.toString(),
        startOffset: range.startOffset,
        endOffset: range.endOffset
      };
    }
    return null;
  }
}

选中文本高亮显示

结合 CSS 类实现视觉反馈:

::selection {
  background-color: #b3d4fc;
  color: #000;
}

或通过动态类名:

vue实现文本选取

<span :class="{ 'highlight': isSelected(textChunk) }">
  {{ textChunk }}
</span>

第三方库方案

使用专门库如 vue-highlight-text

import VueHighlightText from 'vue-highlight-text';

Vue.use(VueHighlightText);

模板使用:

<vue-highlight-text 
  :queries="highlightTerms"
  :text="fullText"
  @selection="handleSelection"
/>

移动端兼容处理

添加触摸事件支持:

mounted() {
  this.$el.addEventListener('touchend', this.handleTouchSelection);
},
methods: {
  handleTouchSelection() {
    setTimeout(() => {
      const selection = window.getSelection();
      // 处理选中结果
    }, 100);
  }
}

标签: 文本vue
分享给朋友:

相关文章

vue实现公式

vue实现公式

在Vue中实现公式展示或计算可以通过多种方式实现,以下为具体方法: 使用模板插值与计算属性 若公式较简单,可直接在模板中使用插值表达式或计算属性。例如计算圆的面积: <templat…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接收字…

vue 实现单点登录

vue 实现单点登录

单点登录(SSO)实现原理 单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。 Vue中实现SSO的方案 基于…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中实现数组排序可以通过computed属性或methods来处理。假设有一个数组items,可以创建一个计算属性返回排序后的数组: data() { return {…

vue实现引导页面

vue实现引导页面

vue实现引导页面的方法 使用Vue实现引导页面可以通过多种方式完成,以下是几种常见的方法: 使用第三方库driver.js 安装driver.js库: npm install driver.j…

vue实现快递查询

vue实现快递查询

实现思路 通过调用第三方快递查询API接口,结合Vue.js框架实现快递单号查询功能。需要用户输入快递单号和选择快递公司,点击查询后显示物流信息。 准备工作 注册快递查询API服务(如快递1…