记一次营销活动踩坑

栏目: Html5 · 发布时间: 5年前

内容简介: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);
      });
  });
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

七步掌握业务分析

七步掌握业务分析

芭芭拉·A·卡克诺德 / 2010-9 / 49.00元

《七步掌握业务分析》内容简介:业务分析师是新兴的专业职务。在组织或项目中,业务分析师通过与项目干系人合作,采取一系列技术和知识,分析、理解组织或项目需求,并实现组织或项目目标,提出解决方案。《七步掌握业务分析》作者是国际业务分析协会(IIBA)的《业务分析知识体系指南》BABOK创作委员会的核心成员,全书结合BABOK的标准,以通俗易懂的语言阐述了业务分析的基本概念、任务与目标,介绍了从初级业务分......一起来看看 《七步掌握业务分析》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换