H5新特新--canvas之刮刮乐案例

原理及思路分析:

  • 首先在“刮刮乐”的底层放置两张图片,一张是中奖的、一张是没中的,然后利用随机数给定一个中奖率。例如,当达到百分之多少时,即为中奖,那么此时就应该显示中奖的那张图片,反之显示未中奖的图片
  • 然后利用canvas给图片增加一个遮罩层,以此来模拟现实中的刮奖效果
  • 再者利用鼠标的按下事件、移动事件以及抬起事件,当鼠标按下并移动时,则利用canvas的擦除也就是clearRect()来进行模拟
  • 最后为了防止当鼠标抬起时,在屏幕上滑动也能实现“刮奖”效果,在这里我们需要清除,也就是当鼠标抬起时,原本的“刮奖”效果失效,只有当鼠标按下并移动时,才能实现“刮奖”效果

 canvas {
            border: 1px solid orangered;
            margin: 100px;
        }
 <canvas>您的浏览器不支持canvas标签</canvas>

 <script>
        var arr = ['img/1.jpg', 'img/2.jpg'];
        var flag = 0;
        var obj = {};

        //图片预加载
        for (var i = 0; i < 2; i++) {
            //创建对象
            var img = new Image();

            img.src = arr[i];

            // 将图片存入对象
            obj[i] = img;

            img.onload = function() {
                flag++;

                // 判断图片是否加载完
                if (flag == arr.length) {
                    // console.log('图片加载完成');
                    // console.log(obj);
                    callback(obj);
                }
            }
        }

        function callback(obj) {
            var mycanvas = document.querySelector('canvas');

            //10%的中奖率
            var num = Math.ceil(Math.random() * 10);

            // 判断是否中奖
            if (num == 8) {
                mycanvas.style.background = 'url(' + arr[1] + ')';
            } else {
                mycanvas.style.background = 'url(' + arr[0] + ')';
            }

            //绘制一个遮盖层
            var ctx = mycanvas.getContext('2d');

            // 填充颜色
            ctx.fillStyle = '#ccc';

            //绘制
            ctx.fillRect(0, 0, mycanvas.width, mycanvas.height);

            //刮开效果
            mycanvas.onmousedown = function() {
                mycanvas.onmousemove = function(e) {
                    e = e || window.event;
                    var mouseX = e.offsetX;
                    var mouseY = e.offsetY;

                    // 擦除
                    ctx.clearRect(mouseX, mouseY, 10, 10);
                }
            }

            //当鼠标放开时,取消onmousemove事件
            mycanvas.onmouseup = document.onmouseup = function() {
                mycanvas.onmousemove = null;
            }
        }
</script>

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白小白从不日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值