uniapp实现横屏签字版

实现横屏签字版可以利用uniapp中的canvas以及第三方的canvas插件实现。

步骤一:安装canvas插件

在uniapp中使用canvas需要下载并安装canvas插件,下载地址为:https://ext.dcloud.net.cn/plugin?id=127

下载完成后,在uniapp项目的根目录下,打开cmd或者终端并输入如下命令:

npm install canvas-uniapp -S

步骤二:创建canvas画布

在uniapp中,我们可以使用view标签来创建canvas画布,例如:

<view style="width: 100vw; height: 100vh;">
  <canvas
    canvas-id="canvas"
    style="width: 100vw; height: 100vh;"
    @touchstart="startDraw"
    @touchmove="onDraw"
    @touchend="endDraw"
  ></canvas>
</view>

在canvas标签中,指定了canvas-id为canvas,在js中可以通过uni.createSelectorQuery().select('#canvas')获取到canvas实例,进而进行绘图操作。在touchstart/touchmove/touchend事件中,分别触发开始绘制、绘制中、结束绘制的事件处理函数。

步骤三:编写绘图代码

绘图代码可根据需求自行编写,以下示例代码演示了如何使用canvas在横屏模式下进行画线:

let ctx = uni.createCanvasContext('canvas')
let painting = false
let lastX = 0
let lastY = 0

uni.onWindowResize(() => {
  let systemInfo = uni.getSystemInfoSync()
  ctx.canvas.width = systemInfo.screenHeight
  ctx.canvas.height = systemInfo.screenWidth
})

function startDraw(e) {
  painting = true
  lastX = e.touches[0].x
  lastY = e.touches[0].y
}

function onDraw(e) {
  if (!painting) return
  ctx.beginPath()
  ctx.moveTo(lastX, lastY)
  ctx.lineTo(e.touches[0].x, e.touches[0].y)
  ctx.stroke()
  lastX = e.touches[0].x
  lastY = e.touches[0].y
}

function endDraw(e) {
  painting = false
}

步骤四:在横屏模式下显示页面

为了在横屏模式下显示绘图页面,需要在manifest.json文件中进行配置:

{
  "h5": {
    "screenOrientation": "landscape"
  },
  "app-plus": {
    "orientation": "landscape",
    "softinputMode": "adjustResize"
  }
}

示例1:在PDF中展示签名页面

我们可以利用uniapp创建的签名页面,在PDF中展示签名页面,并允许用户在该页面上进行签名操作。以下为示例代码:

const width = 595.28 // A4纸的宽
const height = 841.89 // A4纸的高

let ctx = uni.createCanvasContext('canvas')
let painting = false
let lastX = 0
let lastY = 0

uni.onWindowResize(() => {
  let systemInfo = uni.getSystemInfoSync()
  ctx.canvas.width = systemInfo.screenHeight
  ctx.canvas.height = systemInfo.screenWidth
})

function startDraw(e) {
  painting = true
  lastX = e.touches[0].x
  lastY = e.touches[0].y
}

function onDraw(e) {
  if (!painting) return
  ctx.beginPath()
  ctx.moveTo(lastX, lastY)
  ctx.lineTo(e.touches[0].x, e.touches[0].y)
  ctx.stroke()
  lastX = e.touches[0].x
  lastY = e.touches[0].y
}

function endDraw(e) {
  painting = false
}

function savePDF() {
  uni.canvasToTempFilePath(
    {
      canvasId: 'canvas',
      x: 0,
      y: 0,
      destWidth: width,
      destHeight: height,
      fileType: 'pdf',
      quality: 1,
      success: function (res) {
        uni.saveFile({
          tempFilePath: res.tempFilePath,
          success: function (res) {
            uni.openDocument({
              filePath: res.savedFilePath,
              fileType: 'pdf',
              success: function () {
                console.log('打开文档成功')
              },
              fail: function (err) {
                console.log(err)
              },
            })
          },
          fail: function (err) {
            console.log(err)
          },
        })
      },
      fail: function (err) {
        console.log(err)
      },
    },
    this
  )
}

示例2:签字并保存图片至本地相册

我们可以利用uniapp创建的签名页面,让用户进行签名,并将签名保存至本地相册。以下为示例代码:

let ctx = uni.createCanvasContext('canvas')
let painting = false
let lastX = 0
let lastY = 0

uni.onWindowResize(() => {
  let systemInfo = uni.getSystemInfoSync()
  ctx.canvas.width = systemInfo.screenHeight
  ctx.canvas.height = systemInfo.screenWidth
})

function startDraw(e) {
  painting = true
  lastX = e.touches[0].x
  lastY = e.touches[0].y
}

function onDraw(e) {
  if (!painting) return
  ctx.beginPath()
  ctx.moveTo(lastX, lastY)
  ctx.lineTo(e.touches[0].x, e.touches[0].y)
  ctx.stroke()
  lastX = e.touches[0].x
  lastY = e.touches[0].y
}

function endDraw(e) {
  painting = false
}

function saveImage() {
  uni.canvasToTempFilePath(
    {
      canvasId: 'canvas',
      success: function (res) {
        uni.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: function () {
            console.log('保存图片成功')
          },
          fail: function (err) {
            console.log(err)
          },
        })
      },
      fail: function (err) {
        console.log(err)
      },
    },
    this
  )
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:uniapp实现横屏签字版 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js 上传文件预览的简单实例

    下面是针对“js上传文件预览的简单实例”的攻略,具体步骤如下: 准备工作 在开始编写 js 上传文件预览的代码之前,需要先准备好以下工作: 一个文本编辑器,用于编写代码。 一个支持 JavaScript 的浏览器,用于运行代码和进行预览。 需要用到的 HTML 和 CSS 代码,用来实现页面布局和样式。 实现方法 具体实现 js 上传文件预览,需要分以下几个…

    JavaScript 2023年5月27日
    00
  • 浅谈 Webpack 如何处理图片(开发、打包、优化)

    浅谈 Webpack 如何处理图片(开发、打包、优化) 在Web开发中,图片作为Web页面重要的组成部分,在Webpack中如何处理图片是一个必须要掌握的技能。常见的处理方式包括以下几种: 1. 在代码中使用 import 或 require 导入图片 Webpack支持将图片(包括PNG、JPG、GIF、SVG等格式)作为模块来处理,并通过模块化的方式导入…

    JavaScript 2023年5月19日
    00
  • javascript计时器编写过程与实现方法

    JavaScript计时器编写过程与实现方法 什么是JavaScript计时器 JavaScript计时器是一种用于控制时间和间隔函数调用的工具。通过计时器,我们可以创建定时器、循环定时器、超时定时器等,实现各种定时任务。 实现方法 1. 基本定时器 使用基本setTimeout函数来创建定时器,setTimeout函数包含两个参数,一个是需要调用的函数,另…

    JavaScript 2023年5月27日
    00
  • js中通过getElementsByName访问name集合对象的方法

    获取name集合对象是DOM中的常见操作之一,使用getElementsByName方法可以获取到相应名字的元素节点集合。下面为大家提供选定属性值的两条示例说明: 语法说明 getElementsByName方法通过指定元素的name特定属性来获取文档中具有相同name属性值的元素集合。其基本语法如下: var elements = document.get…

    JavaScript 2023年6月10日
    00
  • 将字符串中由空格隔开的每个单词首字母大写

    要将字符串中由空格隔开的每个单词首字母大写,可以使用字符串操作方法和正则表达式。 步骤如下: 首先要将字符串进行拆分,将每个单词分离。可以使用split()方法,该方法可以按照指定字符或正则表达式对字符串进行分割,返回一个由分割出来的子字符串组成的数组。 例如: let str = "hello world"; let arr = str…

    JavaScript 2023年6月11日
    00
  • js实现导航栏上下动画效果

    JS实现导航栏上下动画效果攻略 1. 确定导航栏样式 首先,我们需要确定导航栏的样式,通常包括容器样式、菜单样式和链接样式。可以使用CSS给导航栏添加样式。 .navbar { background-color: #fff; color: #333; display: flex; justify-content: space-between; align-i…

    JavaScript 2023年6月10日
    00
  • JavaScript判断文件是否存在的实例代码

    下面是详细讲解 JavaScript 判断文件是否存在的完整攻略。 问题描述 有时我们需要在 JavaScript 中判断某个文件是否存在,这在处理文件上传、下载等场景中很常见。那么如何用 JavaScript 判断文件是否存在呢?我们分别从前端和后端两个方面进行说明。 前端方案 前端方案是通过发送 HTTP 请求,并监听响应状态码来判断文件是否存在。 下面…

    JavaScript 2023年5月27日
    00
  • javascript 中Cookie读、写与删除操作

    当我们在使用 JavaScript 进行网站开发时,常常需要使用到 Cookie,Cookie 可以用于保存一些用户信息、网站访问次数、用户偏好设置等数据。本文将详细介绍 JavaScript 中如何进行 Cookie 的读、写与删除操作。 Cookie 的读取 在 JavaScript 中,我们可以使用 document.cookie 读取当前网站的 Co…

    JavaScript 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部