当前位置:首页 > VUE

vue实现盖章

2026-01-12 18:41:51VUE

Vue 实现盖章功能

在 Vue 中实现盖章功能通常涉及以下几个关键步骤:绘制印章、处理交互逻辑、保存盖章结果。以下是具体实现方法:

vue实现盖章

绘制印章

使用 Canvas 或 SVG 绘制印章图形,Vue 中可以封装为组件。

vue实现盖章

<template>
  <canvas ref="stampCanvas" @click="handleStamp"></canvas>
</template>

<script>
export default {
  methods: {
    drawStamp() {
      const canvas = this.$refs.stampCanvas;
      const ctx = canvas.getContext('2d');
      // 绘制圆形印章
      ctx.beginPath();
      ctx.arc(100, 100, 50, 0, Math.PI * 2);
      ctx.strokeStyle = 'red';
      ctx.lineWidth = 3;
      ctx.stroke();
      // 添加文字
      ctx.font = '16px Arial';
      ctx.fillStyle = 'red';
      ctx.fillText('专用章', 70, 100);
    }
  },
  mounted() {
    this.drawStamp();
  }
};
</script>

交互逻辑

通过事件监听实现点击或拖拽盖章效果。

<template>
  <div @click="placeStamp" style="position: relative;">
    <img src="document.jpg" alt="文档">
    <div v-if="stampVisible" :style="stampStyle">
      <svg width="100" height="100" viewBox="0 0 100 100">
        <circle cx="50" cy="50" r="45" stroke="red" stroke-width="2" fill="none"/>
        <text x="50" y="50" text-anchor="middle" fill="red">盖章</text>
      </svg>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      stampVisible: false,
      stampPosition: { x: 0, y: 0 }
    };
  },
  computed: {
    stampStyle() {
      return {
        position: 'absolute',
        left: `${this.stampPosition.x}px`,
        top: `${this.stampPosition.y}px`,
        pointerEvents: 'none'
      };
    }
  },
  methods: {
    placeStamp(e) {
      this.stampPosition = { x: e.offsetX - 50, y: e.offsetY - 50 };
      this.stampVisible = true;
    }
  }
};
</script>

保存盖章结果

将盖章后的内容导出为图片或提交到后端。

methods: {
  saveWithStamp() {
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
    // 绘制文档背景
    const img = new Image();
    img.onload = () => {
      canvas.width = img.width;
      canvas.height = img.height;
      ctx.drawImage(img, 0, 0);
      // 叠加印章
      const stamp = new Image();
      stamp.onload = () => {
        ctx.drawImage(stamp, this.stampPosition.x, this.stampPosition.y);
        const dataURL = canvas.toDataURL('image/png');
        // 保存或上传
        console.log(dataURL);
      };
      stamp.src = 'stamp.svg';
    };
    img.src = 'document.jpg';
  }
}

进阶优化

  • 动态印章:通过 v-for 实现多个印章位置记录。
  • 拖拽调整:使用 @mousedown@mousemove 实现印章位置拖拽。
  • 透明度控制:通过 CSS opacity 或 Canvas globalAlpha 调整印章透明度。
<div 
  v-for="(stamp, index) in stamps" 
  :key="index"
  :style="getStampStyle(stamp)"
  @mousedown="startDrag(index, $event)"
>
  <svg>...</svg>
</div>

通过以上方法,可以在 Vue 中灵活实现盖章功能,并根据需求扩展交互细节。

标签: vue
分享给朋友:

相关文章

vue实现按钮刷新

vue实现按钮刷新

Vue 实现按钮刷新功能 在 Vue 中实现按钮刷新功能可以通过多种方式实现,具体取决于刷新需求是局部刷新还是全局刷新。以下是几种常见的方法: 使用 window.location.reload()…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const rout…

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul…