美文网首页
2018-01-16 canvas刮刮卡引发的各种问题

2018-01-16 canvas刮刮卡引发的各种问题

作者: 虾米不吃 | 来源:发表于2018-01-16 19:29 被阅读0次

Canvas 刮刮卡引发的问题

效果

最近在写一个移动端刮奖页面,本身很简单,网络上也有许多过程,但有许多坑需要说一下。

'destination-out' 造成图片无法渲染

网页上的刮奖教程大部分的图层都是固定颜色:

ctx.beginPath();
ctx.fillStyle = "silver"; //银色图层
ctx.rect(0, 0, width, height);
ctx.closePath();
ctx.fill();

但我做的刮层是小图标拼接的大图片,如果在一开始就设置

ctx.globalCompositeOperation = 'destination-out';

那么图片和刮层的重合部分会消除,无法实现效果。
解决方法:将设置写在触摸过程中

myCanvasObject.addEventListener(tapmove, function (event) {
  var e = window.event || event;
  if (isDown) { //判断鼠标是否按下
  ctx.globalCompositeOperation = 'destination-out';
  ...
});

这样只有触摸后才会开始重合消除的功能

canvas 领奖按钮被遮挡

刮完图层后会显示领奖按钮,但canvasDOM元素遮挡了领奖按钮。这时需要将canvasDOM元素从页面中删除。那么需要判断图层刮到某个程度(某个百分比)后将canvas元素删除。这就需要获取画布中的所有像素,像素的透明度小于某个值的时候就将判断为透明。这就需要使用 getImageData 方法

canvas getImageData方法跨域

为了获取画布中的所有像素,需要使用getImageData。然而canvas获取图片的像素信息时,有跨域的问题:


浏览器报错

解决办法有:

  1. 服务端设置cors
    然而一般不会仅为一张图片就设置cors。
  2. 将图片地址转为base64的格式
    利用canvas可以很方便的将图片转为base64格式
function getBase64(url){
  var img = new Image(),
        dataURL='';
  img.src=url;
   //确保图片加载完成
  img.onload=function(){
    // 创建canvas元素
    var canvas = document.createElement("canvas"),
    // 确保canvas的尺寸和图片一样
    width=Img.width,
    height=Img.height;
    canvas.width=width;
    canvas.height=height;
    canvas.getContext("2d").drawImage(Img,0,0,width,height); //将图片绘制到canvas中
    dataURL=canvas.toDataURL('image/jpeg'); //转换图片为dataURL
    return dataURL;
    };
  }

触摸坐标偏移

我是利用e.touches[0]pageXoffsetLeft等进行坐标的获取,这是就不能在canvas的父元素设置position,否则触摸会出现错位

相关文章

  • 2018-01-16 canvas刮刮卡引发的各种问题

    Canvas 刮刮卡引发的问题 最近在写一个移动端刮奖页面,本身很简单,网络上也有许多过程,但有许多坑需要说一下。...

  • Canvas 刮刮卡

    利用canvas实现刮刮卡效果 步骤大概分为4点: 现在奖项上方绘制一个遮罩效果,可以用纯色或者图片 然后监听触碰...

  • 关于DOM整理

    canvas的刮刮卡 奖品图是canvas的背景图, 绘制一个纯色Mark 通过ctx.globalComposi...

  • OpenGL ES 实现刮刮卡和手写板功能

    该原创文章首发于微信公众号:字节流动 刮刮卡效果实现原理 其实利用 Android Canvas 实现类似刮刮卡或...

  • canvas 实现刮刮卡

    今天分享一个好玩的玩意儿,就是小时候最喜欢玩的刮刮卡,不同的是,这个刮刮卡用HTML5 canvas绘制。 查看效...

  • canvas绘制刮刮卡

    前端时间做的一个项目需要支持多终端,网页版需要使用html5中canvas画布对象对一组数据进行渲染还原,但是在实...

  • 前端效果链接

    canvas canvas实现各种点线效果 Canvas设置width与height 的问题!

  • canvas实现刮刮卡 -- 移动端

    刮刮卡,现实生活中的刮刮层应该都玩过,这次封装的组件是模拟这种操作的刮刮卡,用到的技术是h5操作画布canvas。...

  • canvas制图做刮刮卡效果

    感谢小厨笔记的代码,事件那块写的很好.其实我一开始只是想把变形金刚画出来,最后画成这样了. 效果图展示

  • canvas基础之 刮刮卡效果

网友评论

      本文标题:2018-01-16 canvas刮刮卡引发的各种问题

      本文链接:https://www.haomeiwen.com/subject/hxleoxtx.html