vue-fabric-editor文本编辑高级功能:富文本、排版与样式控制

【免费下载链接】vue-fabric-editor nihaojob/vue-fabric-editor: 这是基于Vue.js和Fabric.js开发的一款富文本编辑器组件,Fabric.js是一个强大的HTML5 canvas交互库,该组件利用两者实现了在线图文混排编辑功能。 【免费下载链接】vue-fabric-editor 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-fabric-editor

你是否还在为在线编辑器无法实现专业排版而头疼?是否遇到过文本样式调整繁琐、多元素对齐困难的问题?本文将带你全面掌握vue-fabric-editor的文本编辑高级功能,从富文本内容管理到精细化样式控制,再到多元素排版布局,让你轻松打造专业级图文内容。读完本文,你将能够:

  • 使用富文本编辑组件实现文本内容实时修改
  • 掌握字体、字号、颜色等样式属性的精细化控制
  • 运用多种对齐方式实现专业排版效果
  • 了解文本路径等高级功能的应用场景

富文本内容实时编辑

vue-fabric-editor提供了直观的文本内容编辑功能,通过attributeTextContent.vue组件实现文本内容的实时修改与路径文本的特殊效果控制。该组件位于src/components/attributeTextContent.vue,专门处理文本内容相关的属性编辑。

核心功能

文本内容编辑模块主要包含两大功能区域:基础文本编辑和文本路径设置。基础文本编辑允许用户直接修改选中文本对象的内容,而文本路径功能则为文本添加沿路径排列的特殊效果,这对于设计标题、标语等需要特殊排版的元素非常有用。

实现原理

组件通过监听画布上选中对象的变化,实时获取和更新文本内容。核心代码如下:

const getObjectAttr = (e) => {
  const activeObject = canvasEditor.canvas.getActiveObject();
  if (activeObject) {
    baseAttr.text = activeObject.get('text');
    const path = activeObject.get('path');
    if (path) {
      baseAttr.strokeWidth = path.strokeWidth;
      baseAttr.stroke = path.stroke;
      baseAttr.showPathAttr = true;
    } else {
      baseAttr.showPathAttr = false;
    }
  }
};

当用户修改文本内容时,组件通过changeCommon方法更新画布上的对象属性并重新渲染:

const changeCommon = (key, value) => {
  const activeObject = canvasEditor.canvas.getActiveObjects()[0];
  if (activeObject) {
    baseAttr[key] = value;
    if (key === 'text') {
      activeObject.set(key, value);
    } else {
      const path = activeObject.get('path');
      path.set(key, value);
    }
    canvasEditor.canvas.renderAll();
  }
};

字体与样式精细化控制

vue-fabric-editor的字体样式控制通过src/components/attributeFont.vue组件实现,提供了丰富的文本样式调整选项,让你的文本内容展现出专业的视觉效果。

字体选择与字号调整

字体选择器支持多种字体类型,用户可以根据需求选择合适的字体。字号调整则通过数字输入框实现,支持精确到1的字号设置,满足不同场景的文本大小需求。字体选择器的实现代码如下:

<Select v-model="baseAttr.fontFamily" @on-change="changeFontFamily">
  <Option v-for="item in fontsList" :value="item.name" :key="`font-${item.name}`">
    <div class="font-item" :style="`background-image:url('${item.img}');`">
      {{ !item.img ? item : '' }}
      <span style="display: none">{{ item.name }}</span>
    </div>
  </Option>
</Select>

字号调整通过InputNumber组件实现,支持从1开始的整数调整:

<InputNumber
  v-model="baseAttr.fontSize"
  @on-change="(value) => changeCommon('fontSize', value)"
  append="字号"
  :min="1"
></InputNumber>

文本对齐方式

文本对齐模块提供了四种对齐方式:左对齐、居中对齐、右对齐和两端对齐。每种对齐方式都有对应的图标,直观展示当前对齐状态。对齐控制的核心代码如下:

<RadioGroup
  class="button-group"
  v-model="baseAttr.textAlign"
  @on-change="(value) => changeCommon('textAlign', value)"
  type="button"
>
  <Radio v-for="(item, i) in textAlignList" :label="item" :key="item">
    <span v-html="textAlignListSvg[i]"></span>
  </Radio>
</RadioGroup>

对应的SVG图标定义在组件的script部分:

import textAlignLeft from '@/assets/icon/attribute/textAlignLeft.svg?raw';
import textAlignRight from '@/assets/icon/attribute/textAlignRight.svg?raw';
import textAlignCenter from '@/assets/icon/attribute/textAlignCenter.svg?raw';
import textAlignJustitfy from '@/assets/icon/attribute/textAlignJustitfy.svg?raw';

const textAlignList = ['left', 'center', 'right', 'justify'];
const textAlignListSvg = [textAlignLeft, textAlignCenter, textAlignRight, textAlignJustitfy];

文本装饰效果

vue-fabric-editor提供了四种文本装饰效果:加粗、斜体、删除线和下划线。这些效果可以单独或组合使用,丰富文本的视觉表现。装饰效果按钮的实现代码如下:

<ButtonGroup class="button-group">
  <Button @click="changeFontWeight('fontWeight', baseAttr.fontWeight)">
    <fontWeight
      :fill="baseAttr.fontWeight === 'bold' ? '#305ef4' : '#666'"
      width="14"
      height="14"
    ></fontWeight>
  </Button>
  <Button @click="changeFontStyle('fontStyle', baseAttr.fontStyle)">
    <fontStyle
      :fill="baseAttr.fontStyle === 'italic' ? '#305ef4' : '#666'"
      width="14"
      height="14"
    ></fontStyle>
  </Button>
  <Button @click="changeLineThrough('linethrough', baseAttr.linethrough)">
    <linethrough
      :fill="baseAttr.linethrough ? '#305ef4' : '#666'"
      width="14"
      height="14"
    ></linethrough>
  </Button>
  <Button @click="changeUnderline('underline', baseAttr.underline)">
    <underline
      :fill="baseAttr.underline ? '#305ef4' : '#666'"
      width="14"
      height="14"
    ></underline>
  </Button>
</ButtonGroup>

这些按钮使用SVG图标作为视觉指示,并通过颜色变化反映当前状态。当点击按钮时,对应的样式属性会在"normal"和激活状态之间切换,例如加粗功能的实现:

const changeFontWeight = (key, value) => {
  const nValue = value === 'normal' ? 'bold' : 'normal';
  baseAttr.fontWeight = nValue;
  const activeObject = canvasEditor.canvas.getActiveObjects()[0];
  activeObject && activeObject.set(key, nValue);
  canvasEditor.canvas.renderAll();
};

行高与字符间距

为了实现更专业的排版效果,vue-fabric-editor提供了行高和字符间距的调整功能。行高控制行与行之间的垂直距离,字符间距控制字符之间的水平距离,两者结合可以显著提升文本的可读性和美观度。

<Row :gutter="12">
  <Col flex="1">
    <InputNumber
      v-model="baseAttr.lineHeight"
      @on-change="(value) => changeCommon('lineHeight', value)"
      :step="0.1"
      :append="$t('attributes.line_height')"
    ></InputNumber>
  </Col>
  <Col flex="1">
    <InputNumber
      v-model="baseAttr.charSpacing"
      @on-change="(value) => changeCommon('charSpacing', value)"
      :append="$t('attributes.char_spacing')"
    ></InputNumber>
  </Col>
</Row>

行高调整支持0.1的步长,允许精细调整;字符间距则使用整数调整,满足不同语言和排版需求。

文本背景色

文本背景色功能允许用户为选中文本添加背景色,突出显示重要内容。背景色选择器使用了src/components/colorSelector.vue组件,支持透明度调整,实现半透明背景效果。

<div class="flex-view">
  <div class="flex-item">
    <span class="label">{{ $t('background') }}</span>
    <div class="content">
      <ColorPicker
        v-model="baseAttr.textBackgroundColor"
        @on-change="(value) => changeCommon('textBackgroundColor', value)"
        alpha
      />
    </div>
  </div>
</div>

多元素排版与对齐

当处理多个文本元素或图文混排时,精确的对齐控制变得尤为重要。vue-fabric-editor通过src/components/align.vue组件提供了全面的对齐功能,支持多种对齐方式,帮助用户快速实现专业的版面布局。

对齐功能概览

对齐组件提供了八种对齐方式,分为三类:水平对齐、垂直对齐和平均对齐。这些对齐方式可以快速调整多个选中元素的相对位置,大大提升排版效率。

对齐工具栏

水平对齐方式

水平对齐包括左对齐、水平居中和右对齐三种方式:

  • 左对齐:将所有选中元素的左边缘对齐到最左侧元素的左边缘
  • 水平居中:将所有选中元素的水平中心对齐到同一垂直线上
  • 右对齐:将所有选中元素的右边缘对齐到最右侧元素的右边缘

实现代码如下:

// 左对齐
const left = () => {
  canvasEditor.left();
};
// 右对齐
const right = () => {
  canvasEditor.right();
};
// 水平居中对齐
const xcenter = () => {
  canvasEditor.xcenter();
};

垂直对齐方式

垂直对齐包括顶部对齐、垂直居中和底部对齐三种方式:

  • 顶部对齐:将所有选中元素的上边缘对齐到最顶部元素的上边缘
  • 垂直居中:将所有选中元素的垂直中心对齐到同一水平线上
  • 底部对齐:将所有选中元素的下边缘对齐到最底部元素的下边缘

实现代码如下:

// 顶部对齐
const top = () => {
  canvasEditor.top();
};
// 底部对齐
const bottom = () => {
  canvasEditor.bottom();
};
// 垂直居中对齐
const ycenter = () => {
  canvasEditor.ycenter();
};

平均对齐方式

平均对齐是一种特殊的对齐方式,用于均匀分布多个元素:

  • 水平平均对齐:使所有选中元素在水平方向上等间距排列
  • 垂直平均对齐:使所有选中元素在垂直方向上等间距排列

这两种对齐方式特别适用于创建导航栏、按钮组或图片网格等需要均匀分布元素的场景。实现代码如下:

// 水平平均对齐
const xequation = () => {
  canvasEditor.xequation();
};
// 垂直平均对齐
const yequation = () => {
  canvasEditor.yequation();
};

文本颜色与外观控制

文本的颜色和外观是视觉设计的重要组成部分。vue-fabric-editor通过src/components/attribute.vue组件提供了全面的文本外观控制功能,包括文本颜色、描边和透明度等属性的调整。

文本颜色选择

文本颜色选择器允许用户为文本设置前景色,支持透明度调整。颜色选择器使用了组件化设计,可以在多个地方复用。核心实现代码如下:

<colorSelector
  :color="baseAttr.fill"
  @change="(value) => changeCommon('fill', value)"
></colorSelector>

这里的colorSelector组件是一个可复用的颜色选择器,支持RGB、HSL等多种颜色模式,并提供透明度控制。

通用属性控制

除了文本特定的样式外,attribute.vue组件还提供了通用的图形属性控制,如透明度、旋转角度等。这些属性不仅适用于文本元素,也适用于其他图形元素,实现了属性控制的统一管理。

总结与展望

vue-fabric-editor提供了强大而全面的文本编辑功能,从基础的文本内容修改到高级的样式和排版控制,满足了从简单文本编辑到专业图文排版的各种需求。通过本文介绍的富文本编辑、字体样式控制、多元素排版对齐和文本外观调整等功能,用户可以轻松创建出专业级的图文内容。

未来,vue-fabric-editor还可以进一步扩展文本编辑功能,如添加段落样式、列表功能、表格编辑等更高级的排版工具,让在线文本编辑体验更加接近专业桌面排版软件。

如果你觉得本文对你有帮助,请点赞、收藏并关注项目更新。如有任何问题或建议,欢迎在项目仓库中提交issue或参与讨论。

项目仓库地址:https://gitcode.com/GitHub_Trending/vu/vue-fabric-editor

【免费下载链接】vue-fabric-editor nihaojob/vue-fabric-editor: 这是基于Vue.js和Fabric.js开发的一款富文本编辑器组件,Fabric.js是一个强大的HTML5 canvas交互库,该组件利用两者实现了在线图文混排编辑功能。 【免费下载链接】vue-fabric-editor 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-fabric-editor

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐