内容简介:canvas 绘制的时候需要 load 跨域图片(比如cdn,或者其他域的图片)查看html2canvas 日志,发现有一个图片丢失状态(不一定丢失下面你这种,还有可能是背景)
canvas设置了allowTaint ps: allowTaint:Whether to allow cross-origin images to taint the canvas 允许绘制跨域图片,但是不允许调用 canvas.toDataURL 复制代码
解决方案
如果需要得到 Base64 的话,不适合开启 allowTaint 1. 禁用 allowTaint 2. 解决跨域图片,参考一下个问题 复制代码
canvas无法加载跨域图片
详情描述
canvas 绘制的时候需要 load 跨域图片(比如cdn,或者其他域的图片)
解决方案
在img标签上面增加 crossorigin="anonymous" config 设置 useCORS: true 注意:base64的图片,不要添加 crossorigin="anonymous" 复制代码
ios 上面偶发截图不全
详情描述
在 ios 上面,特别是 iphonex 容易出现偶发截图不全(某张图片丢失) 猜测是图片已经加载完毕,但是还未渲染完毕,就开始转base64,导致截图不全(ios特有。。。) 复制代码
解决方案
查看html2canvas 日志,发现有一个
有一个图片的Finished loading钩子
在这里做了一个sleep.. 复制代码
图片丢失状态(不一定丢失下面你这种,还有可能是背景)
正常截图
pad 宽屏适配
详情描述
在宽度大于540的机型上面,rem适配失败,定位不准 复制代码
解决方案
适配的方案是采用的 flexible.js + px2rem,通过观察flexible源码得知 复制代码
这一段代码限定住了html的元素fontSize,因此将if语句中的 540 改为 width 可以完成简单的适配 复制代码
微信/支付宝的sdk差异
需要注意的
1. Wechat可以长按识别base64的图片,但是其他webview不行 2. 微信不支持canvas跨域加载本地的base64图片,支付宝可以 3. 微信/支付宝sdk选择照片返回的是app内的图片地址,如果想获得图片上传,需要自己转base64,微信的转出Base64需要自己添加 data:image/jpeg;base64, 头部信息 复制代码
分离 Promise 的res,不在 Promise 的构造函数中 res/rej 一个 Promise 对象,封装一个获得file的举例
class myPormise { constructor() { this.init(); } res(value) { this.$r(value); } init() { console.log("初始化promise"); this.p = new Promise(res => { this.$r = res; }); } } export class GetInputFile { constructor(type) { this.inputEle = document.createElement("input"); this.inputEle.setAttribute("accept", "image/*"); this.inputEle.setAttribute("type", "file"); if (type == "camera") { //如果是camera则直接调用照相机 this.inputEle.setAttribute("capture", "camera"); } this.inputEle.addEventListener("change", this.uploadFile.bind(this)); //document.append(this.inputEle); this.avatarFile = new myPormise(); window.inputEle = this.inputEle; console.log("创建GetInputFile", this.inputEle); } click() { this.inputEle.click(); return this; } uploadFile(e) { let files = e.target.files || e.dataTransfer.files; if (!files.length) { console.log("not image"); return; } this.avatarFile.res(files[0]); } getfile() { return this.avatarFile.p; } destroyed() { for (let i in this) { if (i !== "destroyed") this[i] = null; } } } export function chooseImageH5(sourceType) { const getInputFile = new GetInputFile(sourceType[0]); return new Promise(res => { console.log("other选择图片"); getInputFile .click() .getfile() .then(e => { res(e); }); }); } 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 如何使用 Adaboost 预测下一次营销活动的效果
- 小程序商城模块 Oejia_WeShop v0.2.1 发布,各种营销活动支持打通线上线下业务
- 营销产品化:擦出营销与产品之间的火花
- 听大佬说营销②丨没有数据分析的营销?怕是不行
- 2019年数字营销趋势展望
- 数字中台:企业数字营销的支点
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms Sequential & Parallel
Russ Miller、Laurence Boxer / Charles River Media / 2005-08-03 / USD 59.95
With multi-core processors replacing traditional processors and the movement to multiprocessor workstations and servers, parallel computing has moved from a specialty area to the core of computer scie......一起来看看 《Algorithms Sequential & Parallel》 这本书的介绍吧!