需求先定好,页面展现什么元素,和产品先核对好
1.端内答题 获得结果,结果页上面没有二维码和长按保存提示(由于端内不支持)。点击唤起分享平台分享出去是卡牌。
2.端外和端内同样的答题流程。答完题获得结果页,长按保存图片,保存图片有用户的昵称和头像。
html
let Y = window.pt === 'adr' ? 930 : 910;
// ios和安卓对于轴的文字定位的误差,ios符合设计稿尺寸
Local.shareStyleImage(
this.bgURL, //必填 放背景图片,分享的卡牌大小是由此背景图片决定。
[ // 定位在页面的图片数组,能够放置多个。[]必传;
{
url: this.qrURL, //图片地址
location: { x: 502, y: 850 }, // 定位的位置,参考绝对定位方法。
width: 135, // 图片宽度
height: 135 // 图片高度
}
],
[ // 放定位文字的数组,[]必传,ios666/667的安装包必须
要把text的参数写上。安卓666/667能够不穿
{
text: `长按扫码,作套题压压惊`,
location: {x: 390, y: Y},
color: "ffffff", // 注意这里没有#
fontSize: 25
}
]
);
复制代码
1.这种方法,填写的动态文字只支持修改颜色和字号,不能使用特殊字体。
2.结果分类过多,设计同窗工做量增大。
3.使用同一组件,有动态信息,不能支持端外长按保存功能。ios
html2canvas. 官网连接
思路:
git
代码github
html2canvas(document.querySelector('#capture')).then(canvas=>{
let context = canvas.getContext('2d');
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
this.canvasPic = canvas.toDataURL(); // 获得base64图片
});
复制代码
html2canvas(document.querySelector('#capture'), {}).then(canvas => {
let context = canvas.getContext('2d');
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
this.canvasPic = canvas.toDataURL();
// 将base64转化成png/jpg图片的接口。原来的接口不支持png的,先接口已经完善。
const imageData = encodeURIComponent(canvas.toDataURL().split(',')[1])
const request = new XMLHttpRequest()
request.open('POST', 'https://ptwapmusic3.reader.qq.com/activity/common/uploadPic');
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
request.send(`imageData=${imageData}&actid=10171`)
request.onload = _ => {
const data = JSON.parse(request.response)z
let imgObj = new Image(); // 建立图片对象
imgObj.src = data.url;
imgObj.addEventListener('load', function () {
console.log('fenxtu')
}, false);
this.canvasPicPng = data.url;
}
);
Local.shareStyleImage(
this.bgURL, // !!!不能够不传 我用了一个透明的png的图片。这个图片的宽高就是你卡牌展现的宽高
[
{
url: this.canvasPicPng, // 生成的图片
location: { x: 0, y: 0 },
width: 700,
height: 1032
},
{
url: this.qrURL, //二维码
location: { x: 450, y: 770 },
width: 135,
height: 135
}
],
[
{
text: `长按扫码,作套题压压惊`,
location: {
x: 390,
y: Y
},
color: "ffffff",
fontSize: 25
}
]
);
复制代码
html2canvas(document.querySelector('#capture'), {useCORS:true}).then(canvas => {}
复制代码
后期优化问题。
由于图片生成而后传给后台再到后台返回给咱们 须要必定的时间。若是在图片尚未返回来的时候 ,点击生成图片的按钮就会有问题。因此优化是在进入到结果页的时候,默认的结果页在后台图片尚未拿到的时候,先将图片透明,加一个用户提示,图片生成中。等图片彻底返回后,再将页面的透明度去掉。这样就能保证用户点击生成图片按钮的时候 彻底没有问题。web
没有动态数据,不须要用html2canvas生成图片。须要注意的问题。canvas