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日

相关文章

  • 解析ajaxFileUpload 异步上传文件简单使用

    解析ajaxFileUpload 异步上传文件简单使用攻略 异步上传文件简介 在传统的表单提交中,如果需要上传文件,则需要重新加载整个页面,用户体验并不好,而且上传大文件还会影响页面的响应速度。而异步上传则是采用ajax技术,实现上传文件的同时不刷新整个页面,从而提升用户体验。 ajaxFileUpload 简介 在实现异步上传功能的过程中,ajaxFile…

    JavaScript 2023年6月11日
    00
  • 使用UglifyJS合并/压缩JavaScript的方法

    当我们开发JavaScript应用程序时,经常需要将多个JavaScript模块进行合并,并对合并后的JavaScript代码进行压缩,以减小文件大小,提高加载速度。这个过程可以使用UglifyJS完成。以下是使用UglifyJS合并/压缩JavaScript的方法: 准备工作 在开始使用UglifyJS之前,我们需要先安装Node.js和npm包管理器。安…

    JavaScript 2023年5月27日
    00
  • 在javascript将NodeList作为Array数组处理的方法

    将NodeList作为Array数组处理的方法是在javascript中非常有用的技巧之一。在许多情况下,获得的是NodeList类型的HTML元素集合,我们可能需要对集合进行操作,比如对集合进行排序,筛选等。然而,NodeList不是真正的数组类型,它缺少数组类型的操作和方法。幸运的是,我们可以使用一些技巧将NodeList转换为以进行操作的数组。 在ja…

    JavaScript 2023年5月27日
    00
  • JavaScript程序开发之JS代码放置的位置

    JavaScript程序开发中,JS代码的放置位置主要有内部JS和外部JS两种方式。下面将详细讲解这两种方式的使用方法及注意事项。 一、内部JS 内部JS是将JS代码直接嵌入到HTML文档中的一种方式。我们可以通过<script>标签来实现内部JS的操作。 下面是一个简单的内部JS示例: <!DOCTYPE html> <htm…

    JavaScript 2023年5月27日
    00
  • Python Selenium操作Cookie的实例方法

    下面是详细讲解“Python Selenium操作Cookie的实例方法”的完整攻略: 什么是Cookie? 在网站上保存数据的一种机制,通常由服务器发送给用户的Web浏览器,并存储在本地机器上。当浏览器再次尝试连接到相同的服务器时,将发送之前存储的Cookie。 Selenium操作Cookie Selenium是一个支持Web驱动的自动化测试工具,包含一…

    JavaScript 2023年6月11日
    00
  • 在JavaScript中使用严格模式(Strict Mode)

    当在JavaScript中启用严格模式时,代码会按照更高的标准进行解析和执行,从而减少了一些在松散模式下合法但可能引起错误的语法和行为。 要在JavaScript中启用严格模式,只需在js文件或script标签的顶部添加”use strict”;即可。 以下是使用严格模式的示例代码: "use strict"; // strict mod…

    JavaScript 2023年5月28日
    00
  • Javascript控制input输入时间格式的方法

    下面是“Javascript控制input输入时间格式的方法”的完整攻略: 问题背景 在前端开发中,我们经常需要对用户输入的时间进行格式化或验证。而在页面中使用input元素接收用户输入的时间,需要对用户的输入进行限制或格式化。因此,我们需要一种方法来控制input的时间格式。本文将介绍如何使用JavaScript对input输入时间格式进行控制。 方案一:…

    JavaScript 2023年5月27日
    00
  • 详解WordPress开发中get_current_screen()函数的使用

    当我们开发WordPress主题或插件时,可能需要根据当前页面的信息进行一些处理。此时,可以使用get_current_screen()函数来获取当前页面的信息。本文将详解get_current_screen()函数在WordPress开发中的使用方法。 一、get_current_screen()简介 get_current_screen()函数是Word…

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