PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛
新春佳节,祝大家虎年大吉大利,都能抢到回家的火车票
素材准备
高铁票背景图
界面实现
根据需求,我们需要将文字定位到图片的指定位置上,我们很自然的就会想到使用 absolute
来进行定位,但如果我们不指定其父元素的 relative
定位,那么 absolute
元素中的 top
、 left
等属性将相对于 body
来进行定位,这样在不同的分辨率情况下定位将会错乱。如下图:
随机趣味信息
车次和价格的信息是预先定义在数组里的,每次输入信息后,都会随机取出一个展示到页面上,而这时我们就需要一个随机函数来生成所需的数组下标。代码如下:
getRandomInt: function(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
}
代码解释
Math.ceil()
函数返回大于或等于一个给定数字的最小整数Math.floor()
返回小于或等于一个给定数字的最大整数Math.random()
函数返回一个浮点数, 伪随机数在范围[0,1)
- 首先对输入参数进行处理,最小数保证为大于或等于自身的整数,最大数保证为小于或等于自身的整数。
Math.random() * (max - min)
保证生成[0, (max - min))
区间的随机数,再用Math.floor()
来返回一个小于或等于自身的最大整数,这样就生成了[0, (max - min))
的随机整数,最后再加上最小数,就可以保证生成[min, max)
的随机整数
保存为图片
最后,我们需要将生成的效果保存为图片,这里我用到的插件是 html2canvas
,这个插件使用起来也很简单,代码如下:
handleExportData: function() {
html2canvas(document.querySelector('.show-info'), {
scale: 2, //放大一倍,使图像清晰一点
useCORS: true, //(图片跨域相关)
allowTaint: false, //允许跨域(图片跨域相关)
onrendered: function(canvas){
const exportImgLinkEle = document.querySelector('#exportImgLink');
exportImgLinkEle.href = canvas.toDataURL('image/png');
exportImgLinkEle.click(); // 执行 <a> 元素的下载
}
})
}
注意
- 对应节点引入的图片必须是
http
链接的形式,如果是相对路径图片将不展示 - 必须添加跨域配置
useCORS: true
、allowTaint: false
,否则图片也不会展示