快放假了,来领取一张火车票吧

564 阅读2分钟

PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛

新春佳节,祝大家虎年大吉大利,都能抢到回家的火车票

素材准备

高铁票背景图

ticket_bg.png

界面实现

根据需求,我们需要将文字定位到图片的指定位置上,我们很自然的就会想到使用 absolute 来进行定位,但如果我们不指定其父元素的 relative 定位,那么 absolute 元素中的 topleft 等属性将相对于 body 来进行定位,这样在不同的分辨率情况下定位将会错乱。如下图:

image.png

随机趣味信息

车次和价格的信息是预先定义在数组里的,每次输入信息后,都会随机取出一个展示到页面上,而这时我们就需要一个随机函数来生成所需的数组下标。代码如下:

getRandomInt: function(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
}
代码解释
  1. Math.ceil() 函数返回大于或等于一个给定数字的最小整数
  2. Math.floor() 返回小于或等于一个给定数字的最大整数
  3. Math.random() 函数返回一个浮点数, 伪随机数在范围 [0,1)
  4. 首先对输入参数进行处理,最小数保证为大于或等于自身的整数,最大数保证为小于或等于自身的整数。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> 元素的下载
    }
  })
}
注意
  1. 对应节点引入的图片必须是 http 链接的形式,如果是相对路径图片将不展示
  2. 必须添加跨域配置 useCORS: trueallowTaint: false,否则图片也不会展示

Demo 地址

链接直达:output.jsbin.com/wuneyovuce