uni-app APP、html引入html2canvas截图以及截长图

news2024/11/26 2:30:47

下载安装html2canvas

方式一,https://www.bootcdn.cn/ CDN网站下载html2canvas插件

在这里插入图片描述
在这里插入图片描述
这里下载后放在测项目目录common下面
在这里插入图片描述
页面中引入
在这里插入图片描述

方式二、npm方式安装html2canvas

1、npm方式下载

npm i html2canvas

2、引入html2canvas

import html2canvas from 'html2canvas'

2,uni-app框架引入html2canvas插件资源

renderjs基础知识

renderjs是一个运行在视图层的js,它只支持app-vue和h5, 主要服务于APP
renderjs官网
对于UNI APP端的开发而言,由于上并没有document,不能进行相关的DOM操作,同时有关DOM渲染的第三方库(echart、openlayer、canvas等)也无法有效的使用,因此官方推出了renderjs方案,来解决上述问题。
一、renderjs作用:
大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交互能力,减少通讯损耗提升性能
在视图层操作dom,运行for web的js库(可以操作dom,意味着拥有window、document等这些全局变量,在app-vue的service层没有这些)
二、renderjs和service层的通信
具体分为三部分:
1.在template中通过用户手动操作触发事件
2.在service层中调用方法
3.在renderjs中调用方法
从renderjs到service层:通过this.$ownerInstance.callMethod()方法可以调用service中的方法,第一个参数是方法名,第二个参数是传过去的参数
三、renderjs的使用
概述:
原生层数据通过监听传入renderjs层(可以通过调用原生层的方法触发)
直接调用renderjs层方法传出的数据

设置 script 节点的 lang 为 renderjs

script的module的名称可以随便取,module=(值任意,相当于命名空间,之后会根据这个名字调用其中的方法),但是change:参数名称必须和module保持一致,虽然不会阻断renderjs的运行,但是会报错,也会导致无法捕获数据的变化

注意事项:

目前仅支持内联使用

不要直接引入大型类库,推荐通过创建script方法引入

可以使用vue组件的生命周期不可以使用App Page的生命周期

视图层和逻辑层通讯方式与WXS一致,另外可以通过this.$ownerInstance获取当前组件的ComponentDescriptor实例

观测更新的数据在视图层可以直接访问到

APP端视图层的页面引用资源的路径相对于根目录,例如:./static/test.js

APP端可以使用dom bom API ,不可直接访问逻辑层数据,renderjs不可使用uni或其他框架的API(如:uni.request),需在原生层调用后触发监听将数据传入

H5端逻辑基层和视图层实际运行在同一个环境下,相当于使用mixin,可以直接访问逻辑层数据

在app端renderjs层的data与原生层的data互不相干

this.$ownerInstance.callMethod方法必须通过点击事件执行

地图方法都要写在renderjs层,不能使用子组件

renderjs怎样使用?

1.原生层数据通过监听传入renderjs层(可以通过调用原生层的方法触发)

 <template>
  <view>
    <u-button @click="renderScrpt.emitData" size="mini">按钮</u-button>
    <!-- renderScrpt为renderjs中的组件名字 -->
    <view id="myMap" :info="info" :change:info="renderScrpt.receiveInfo"></view>
  </view>
</template>
 <script>
export default {
  data() {
    return {
      // 用于桥接的数据
      info: '一开始的消息',
    };
  },
  mounted() {
    setTimeout(() => {
      this.info = '变化的消息';
    }, 1000);
  },
  methods: {
    // renderjs发送过来的数据
    receiveRenderData(val) {
      console.log('renderjs返回的值-->', val);
    },
  },
};
</script>
<style lang="scss">
#myMap {
  width: 100%;
  height: 100vh;
}
</style>
<!-- 声明module属性,view中需要通过module声明的调用里面的方法  -->
<script module="renderScrpt" lang="renderjs">
export default {
	data() {
		return {
			map: null,
      		linePath: [],
      	}
	},
	mounted() {
	},
	methods: {
     // 发送数据到逻辑层
    emitData(e, ownerVm) {
      console.log(e);
      ownerVm.callMethod('receiveRenderData', this.linePath)
    },
    // 接收逻辑层发送的数据
    receiveInfo(newValue){
      console.log(newValue);
    },
}
</script>
 

2.视图中直接调用renderjs层方法传出数据

<view style="padding: 8rpx;">
<button style="background-color: #20B2AA;" text="保存此次查询" @click="renderScrpt.receiveInfo(data)"></button>
</view>

遇到的错误

1、canvas图片绘制跨域问题解决方案Tainted canvases may not be exported

原因就在于使用了跨域的图片或者有两张不同来源的图片比如一张本地一张服务器,所以说是被污染的画布。
解决方案如下
1、为image请求添加跨域

var image = new Image()
image.setAttribute("crossOrigin",'Anonymous')
image.src = src

但也许有可能服务器不让你跨域请求图片(也不知道为啥),那么用到方案2
2、通过把请求的图片转化成base64再进行使用
代码如下

function getURLBase64(url) {
  return new Promise((resolve, reject) => {
    var xhr = new XMLHttpRequest()
    xhr.open('get', url, true)
    xhr.responseType = 'blob'
    xhr.onload = function() {
      if (this.status === 200) {
        var blob = this.response
        var fileReader = new FileReader()
        fileReader.onloadend = function(e) {
          var result = e.target.result
          resolve(result)
        }
        fileReader.readAsDataURL(blob)
      }
    }
    xhr.onerror = function() {
      reject()
    }
    xhr.send()
  })
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux系统CAN驱动问题分析

在TI sam3354芯片上&#xff0c;使用3.13及4.19版内核&#xff0c;编译CAN驱动&#xff0c;加载启动后&#xff0c;查看有CAN设备&#xff0c;但无法直接使用ifconfig操作CAN设备&#xff0c;以下简单分析下问题。 加载驱动后&#xff0c;查看网络设备&#xff1a; 可以看到有…

分布式项目15 用户注册,单点登陆,用户退出dubbo来实现

用户注册 分析&#xff1a;当用户填写完成注册信息之后,将请求发送给前台服务器.之后前台消费者利用dubbo框架实现RPC调用。之后将用户信息传递给jt-sso服务提供者.之后完成数据的入库操作。 01.页面url分析 02.查看页面JS $.ajax({ type : "POST", url : "/…

煤矿安全防范,DTU为采矿过程提供实时数据支持

在当今快节奏的时代&#xff0c;采矿行业为我们提供了丰富的资源。然而&#xff0c;随着采矿作业的不断扩大和复杂化&#xff0c;我们也面临着一系列潜在的挑战。其中&#xff0c;数据传输和安全问题尤为突出。 想象一下&#xff0c;在一个繁忙的矿山中&#xff0c;海量的数据需…

让软件研发可视化可量化,华为云CodeArts持续加速企业研发转型

导读&#xff1a;软件开发工具从未像今天这样重要。 “没有度量&#xff0c;就没有管理。” (If you can’t measure it, you can’t manage it.) 管理学大师彼得德鲁克的话时刻提醒人们&#xff0c;度量是管理的必要条件。 在高科技领域&#xff0c;研发投入是企业核心竞争力的…

Linux常用命令——grep命令

在线Linux命令查询工具 grep 强大的文本搜索工具 补充说明 grep&#xff08;global search regular expression(RE) and print out the line&#xff0c;全面搜索正则表达式并把行打印出来&#xff09;是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&…

【MySQL数据库 | 第十二篇】:约束

约束&#xff1a; 在MySQL中&#xff0c;约束是一种限制数据表中列值的规定。保证数据库中的数据正确&#xff0c;有效性和完整性。MySQL中的约束有以下几种&#xff1a; 1. 主键约束&#xff08;Primary Key Constraint&#xff09;&#xff1a;主键是用于唯一标识表中每行记…

国内强大的智能语言模型AI

​ Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 环境列表 视频教程 1.飞书设置 2.克隆feishu-chatgpt项目 3.配置config.yaml文件 4.运行feishu-chatgpt项目 5.安装cpolar内网穿透 6.固定公网地址 7.机器人权…

chatgpt赋能python:Python文件目录切换:简单易用的方法

Python文件目录切换&#xff1a;简单易用的方法 Python语言可以轻松地处理文件和目录。使用Python的os库可以方便地操作文件系统。Python在os库中提供了许多可以轻松完成文件和目录操作的函数&#xff0c;其中之一是os.chdir。os.chdir函数用于更改当前的工作目录。 为什么需…

使用阿里云OSS实现图片文件上传

说明&#xff1a;注册用户时&#xff0c;经常会用到上传头像。文件的上传/接收与一般文本数据不同。 一、创建Demo页面 先准备一个Demo页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>图片上传…

第三章 三段论:所有,有的。

第三章 三段论&#xff1a;所有&#xff0c;有的。 第一节 三段论-推结论 题-三段论-结构-推结论&#xff1a;所有A是B&#xff1b;所有B是C&#xff1b;得&#xff1a;所有A是C。&#xff08;最简单的模型&#xff09; 4.所有高明的管理者都懂得关心雇员福利的重要性&…

Linux目录结构(与window目录结构对比+绝对路径和相对路径)

一、Linux目录结构 Linux目录结构是一个标准化的文件系统层次结构&#xff0c;非常有组织性并且易于管理。而与Windows 操作系统不同&#xff0c;Linux将所有文件和设备都组织在一个单一的根目录下。以下是Linux的标准目录结构&#xff1a; /&#xff1a;根目录&#xff0c;包含…

<DB2>《DB2数据库健康检查》第3部分

《DB2数据库健康检查》第3部分 2 数据库对象检查2.12 检查是否需要对表和索引进行runstats(30天未作统计更新)2.13 检查表和索引是否需要重组2.14 查看表空间所在裸设备权限2.15 查看数据库备份进度 2 数据库对象检查 2.12 检查是否需要对表和索引进行runstats(30天未作统计更…

递归sql查询完整科目名称

已知表 科目编号 科目名称 1001 1001 现金 1002 1002 银行存款 10020100 0100 工商银行存款 100201000001 0001 工行重庆路支行 10020200 0200 建设银行存款 100202000001 0001 建行铁北支行 需要整理成 科目编号 科目称 科目全称 1001 现金 现金 1002 银行存款 银行存款 …

【OI学习笔记】基础算法-前缀和与差分算法

板块&#xff1a;基础算法、线性优化 难度&#xff1a;较易 前置知识&#xff1a;C基础语法 一、前缀和 1、定义 在一维空间中&#xff0c;对于一个数据总量为 n n n 的数组 a a a&#xff0c;有数据 a [ 1 ] , a [ 2 ] , a [ 3 ] , . . . , a [ n − 1 ] , a [ n ] a[1]…

计算数组中各元素的平方根numpy.sqrt()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算数组中各元素的平方根 numpy.sqrt() 选择题 以下程序的运行结果是? import numpy as np a np.array([1, 4, 9, -4]) print("【显示】a ", a) print("【执行】np.sqrt(a)&…

计网常见面试题

参考:小林coding 1.TCP/IP模型 2.说一下TCP的三次握手? 第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中包含标志位SYN=1,序列号seq=x。第一次握手前客户端的状态为CLOSE,第一次握手后客户端的状态为SYN-SENT。…

Stable Diffusion 从听说到超神日记(从安装开始)

1.安装模型&#xff08;B站搜秋叶&#xff09; 看到下面界面就成功了&#xff01; 下载好模型打开主页&#xff01;点击右下角一键启动&#xff01; 首先弹出下面命令界面。 自动弹出一个网页界面&#xff08;地址是http://127.0.0.1:7860/?__themelight&#xff09;&#xf…

Zabbix(二)

所有实验的zabbix_agent客户端都是web1(192.168.29.142) 模板Template 模板是可以方便地应用于多个主机的一组实体。 实体可以是&#xff1a; 监控项触发器图表仪表盘低级别自动发现规则web场景 模板通常用于为特定服务或应用程序&#xff08;如Apache&#xff0c;MySQL&am…

第二章 模态命题:必然、可能

第二章 模态命题&#xff1a;必然、可能 第一节 模态命题-句式转换-逻辑转换 题-模态命题-句式转换-逻辑转换&#xff1a;①不一定不可能&#xff1b;②不一定可能不未必。 1.唐代韩愈在《师说》中指出&#xff1a;“孔子曰&#xff1a;三人行&#xff0c;则必有我师。是故…

MM32F3273G8P火龙果开发板MindSDK开发教程1 - 点亮LED

MM32F3273G8P火龙果开发版MindSDK开发教程1-点亮LED 1、登录官网下载对应的MindSDK固件 https://mindsdk.mindmotion.com.cn/&#xff0c;然后注册下载mm32F3270的固件即可。 下载完的文件为 plus-f3270_mdk.zip 解压后的文件路径如图&#xff1a; 2、新建LED工程 将下载…