uniapp 开发app使用renderjs操作dom

需求 :把页面中的对话内容另存为一张图片保存到手机相册。
解决方案 :这时我们需要使用到document对象创建一个dom对象计算对话内容的宽高、位置等,再利用canvas能力将内容绘制绘制成一张图保存。
现状 :总所周知,非H5端,不能使用浏览器自带对象,比如document、window、localstorage、cookie等,更不能使用jquery等依赖这些浏览器对象的框架。
uniapp解决方案:uniapp文档提示到App端若要使用操作window、document的库,需要通过renderjs来实现。

首先uniapp是不支持vue3的setup语法糖的,所以获取到图片后保存到相册逻辑需要这样写:

<script>
export default defineComponent({
	setup(props, context) {
		const saveImg = async (url) => {
			uni.saveImageToPhotosAlbum({
				filePath:url,
				success: (res) => {
					console.log("保存图片成功");
				},
				fail: (err) => {
					console.log("保存图片失敗");
				}
			});
		};
		return {
			saveImg
		};
	}
});
</script>

视图层中的保存按钮:

<template>
  <view class="save" @click="sharechat.generateImage">
	{{ t("share") }}
  </view>		
</template>

renderjs生成图片:

<script module="sharechat" lang="renderjs">  // sharechat和视图层调用的一致
export default {
  data(){
    return { }
  },
  computed: {},
  methods: {
    generateImage(event, ownerInstance) {
    // 计算内容宽高,位置
    // canvas dom生成图片
    // 利用uinapp保存图片到相册
    ownerInstance.callMethod('saveImg', {url: dataURL})
    }
  },
  mounted(){}
}
</script>

此致,就完成了所有的功能了。

相关推荐
艾小逗12 分钟前
uniapp快速入门教程,内容来源于官方文档,仅仅记录快速入门需要了解到的知识点
小程序·uni-app·app·es6
程序员凡尘22 分钟前
完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
前端·javascript·vue.js
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦6 小时前
JavaScript substring() 方法
前端
无心使然云中漫步6 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者6 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_7 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋8 小时前
AJAX 入门 day1
前端·javascript·ajax
2401_858120538 小时前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
阿树梢8 小时前
【Vue】VueRouter路由
前端·javascript·vue.js