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日

相关文章

  • 基于JavaScript实现百叶窗动画效果不只单纯flas可以实现

    使用JavaScript实现百叶窗动画效果是一项非常有趣且有挑战性的任务。以下是实现该效果的完整攻略: 步骤一:HTML结构 首先,我们需要创建一个基本的HTML结构,这个结构包含两个主要的元素: <div id="blinds"> <div class="blind-container"> &…

    JavaScript 2023年6月10日
    00
  • 分享JavaScript监听全部Ajax请求事件的方法

    下面就是关于“分享JavaScript监听全部Ajax请求事件的方法”的完整攻略。 标题 分享JavaScript监听全部Ajax请求事件的方法 正文 在前端开发中,JavaScript监听Ajax请求事件是非常重要的一个功能,常常需要根据请求事件做一些处理,比如显示Loading、禁用表单等等。以下是一种比较简单的方法,既可以使用原生的JavaScript…

    JavaScript 2023年6月11日
    00
  • 推荐自用 Javascript 缩图函数 (onDOMLoaded)……

    推荐自用 Javascript 缩图函数 (onDOMLoaded) 完整攻略 简介 本文介绍如何使用自制的Javascript缩图函数,在网页加载完成时动态生成缩略图并缓存到浏览器。这个缩图函数可以实现对任何图片的缩放和加载加速,用户能够更快地预览高清图片,同时亦可以节省流量和加载时间。 准备工作 在开始之前,您需要了解一些前置知识: HTML, CSS和…

    JavaScript 2023年6月10日
    00
  • Javascript Math abs() 方法

    JavaScript中的Math.abs()方法用于返回一个数的绝对值。该方法接受一个参数,即要计算绝对值的数值。以下是关于Math.abs()方法的完整攻略,包括两个示例。 JavaScript Math对象中的abs()方法 JavaScript Math对象中的abs()方法用于返回一个数的绝对值。该方法接受一个参数,即要计算绝对值的数值。 下面是ab…

    JavaScript 2023年5月11日
    00
  • 一文彻底理解js原生语法prototype,__proto__和constructor

    一文彻底理解js原生语法prototype, __proto__ 和 constructor 什么是 prototype 在 JavaScript 中,每个函数都有一个 .prototype 属性。这个属性是一个指向对象的引用,它被称为原型对象(prototype object)。 如果在函数对象中定义了某个属性或方法,则该函数的所有实例都将继承该属性或方法…

    JavaScript 2023年6月10日
    00
  • GoJs中导出图片或者SVG实现示例详解

    当我们需要在GoJs中快速导出图片或SVG文件时,可以使用GoJs的API来实现这一目标。下面我将详细讲解“GoJs中导出图片或者SVG实现示例详解”的完整攻略。 第一步:加载相关库文件 要使用GoJs的导出功能,首先需要在您的网站中引入GoJs和后端服务器使用的库文件。 <script src="https://unpkg.com/gojs…

    JavaScript 2023年6月11日
    00
  • 微信小程序实现表单验证源码

    准备工作首先需要准备微信小程序开发环境,下载并安装微信web开发者工具。在微信开发者工具中新建一个小程序项目。 创建表单页面在微信开发者工具中,创建一个新的页面作为表单页面。可以使用 WXML 语言编写页面结构,使用 WXSS 语言编写页面样式。 表单验证使用 JavaScript 代码对表单进行验证。可以在表单提交时将数据传递给验证函数。 示例代码: //…

    JavaScript 2023年6月10日
    00
  • js中eval详解

    JS中eval详解 eval 函数是 JavaScript 中的一个内置函数,它将字符串作为代码来解析和执行。这个函数通常被认为是危险的,因为它可以执行任何代码,包括恶意代码,从而导致安全风险。因此在使用 eval 函数时需要格外小心。 eval的语法 eval 函数的语法如下: eval(string) 其中,string 是一个字符串,可以包含任何有效的…

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