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>

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

相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端