原文:https://blog.100boot.cn/post/3067

前言

夹娃娃营销活动大家应该都不陌生那如何用小程序实现呢?
今天就带大家用canvas撸了一个全手工绘制的夹娃娃分享给大家。此处应有掌声 : )

一、效果图

二、项目结构

三、运行流程

  • 获取所有奖品列表
  • 依次绘制背景、爪子、展台、顶部海报
  • 点击任意区域出发开始夹娃娃
  • 请求后端获取得到的奖品,也可以为空(没有夹到)
  • 展示夹到的奖品

四、关键代码

点击屏幕开始
模拟后台返回数据

// 点击屏幕开始
if (!isStart && clip) {isStart = true;var prizes = this.data.prizes;// 模拟后台返回数据wx.showLoading({title: '请求中',});setTimeout(function () {wx.hideLoading();// 随机一个奖品var rIndex = utils.getRandom(prizes.length * 2);var prize = rIndex > prizes.length - 1 ? null : prizes[rIndex];// 启动夹子clip.open(prize);}, 1000);
}

当爪子动画完成回到顶部后回调函数

// 当爪子动画完成回到顶部后回调函数
clip.onMoveUp = function () {isStart = false;// 获取夹到的物品, 可能为空var prize = clip.getPrize();// 显示夹到的物品, 可能为空if (prize) {wx.showToast({image: prize.img,title: "获得'" + prize.text + "'",duration: 3000,mask: true,})}else{wx.showToast({icon: "none",title: "哎呀! 什么也没有抓到。",duration: 3000,mask: true,})}
};

计算流逝的时间和绘制每个模块

// 更新动画
var currentTime = new Date().getTime();
// 上一次的时间
var lastTime = currentTime;
var update = function () {// 当前时间currentTime = new Date().getTime();// 计算流逝的时间var time = currentTime - lastTime;// 绘制背景context.drawImage(bgImg, 0, 0, w, h);// 绘制爪子clip.draw(context);clip.update(time);// 绘制展台booth.draw(context);booth.update(time);// 绘制顶部海报context.drawImage(headerImg, 0, 0, w, headerH);// 绘图画布context.draw();// 记录上次的时间lastTime = currentTime;
};

爪子的绘制

Clip.prototype.draw = function (context) {// 线条context.save();context.drawImage(lineImg, this.line.left, 0, this.line.w, this.line.h);context.restore();var theta = Math.PI * this.angle / 180;// left clipcontext.save();context.translate(this.lb.right, this.lb.top); // 以左边爪子的右上为圆心旋转context.rotate(theta);context.drawImage(clipLImg, -this.lb.w, 0);context.restore();// right clipcontext.save();context.translate(this.rb.left, this.rb.top); // 以右边爪子的左上为圆心旋转context.rotate(-theta);context.drawImage(clipRImg, 0, 0);context.restore();context.save();context.drawImage(screwImg, this.screw.left, this.screw.top);context.restore();// 显示被抓的娃娃if (this.showPrize && this.prize && this.prize.img) {context.save();context.drawImage(this.prize.img, this.lb.left, this.lb.y, this.prize.w, this.prize.h);context.restore();}
};

小伙用微信小程序的Canvas手撸了一个娃娃机相关推荐

  1. 微信小程序自定义canvas手写签名组件

    需求如下图展示,因为小程序中有好几个地方使用签名,所以做成组件. 1.创建组件 signature.js const app = getApp(); Component({/*** 组件的属性列表*/ ...

  2. 微信小程序-基于canvas画画涂鸦

    代码地址如下: http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  3. html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能

    小程序对 canvas api 跟h5的不太一致 ,所以这个搞的比较久,不多说,先贴代码 Page({ /** * 页面的初始数据 */ data: { awardsConfig: {}, resta ...

  4. 解决了:微信小程序使用canvas绘制倒计时圆圈和数字居中的实现

    微信小程序使用canvas绘制倒计时圆圈和数字居中的实现 1.显示结果 2.过程: (1)wxml + css <!-- 每道题 --><view style="backg ...

  5. 微信小程序使用canvas绘制二维码实现跳转小程序

    开始接到这个需求的时候,我查阅文档获取小程序码 | 微信开放文档 发现两种途径 需要后端在服务器上调用接口拿到二维码,因为调用的 https://api.weixin.qq.com这个域名是不允许上白 ...

  6. 微信小程序利用canvas实现六边形蜘蛛图

    微信小程序利用canvas实现六边形蜘蛛图 发布时间:2018-01-24 14:30:29 1..wxml <canvas style="width: 200px; height: ...

  7. 微信小程序使用canvas绘制海报并保存本地相册

    在做微信小程序的时候,很多都会用到生成海报分享功能,刚好最近项目有这个需求,今天就发出来记录下 首先是使用canvas绘制一张海报,微信小程序的canvas有老版本和新版本我是用的是新版本 代码如下 ...

  8. 微信小程序使用canvas绘图并下载

    微信小程序使用canvas绘图并下载 实现的功能: canvas绘制页面 当前页面可下载 文字自动换行 实现的效果最终如下图所示: 在这里插入图片描述 实现步骤: 1.页面初始化获取屏幕尺寸 onLo ...

  9. 微信小程序实现跳转到另外一个小程序的方法

    微信小程序实现跳转到另外一个小程序的方法 1,首先需要在当前小程序app.json中定义:需要跳转的小程序的app-id app.josn "navigateToMiniProgramApp ...

  10. 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常

    微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常 参考文章: (1)微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,i ...

最新文章

  1. matlab2013a vs2013 opencv2.4.8 编译TLD
  2. java B2B2C Springcloud电子商城系统-Ribbon设计原理
  3. CentOS下LAMP实战与心得
  4. 白话Elasticsearch73_ES生产集群中的索引管理01
  5. sougou ubuntu 优麒麟_优麒麟(Ubuntu Kylin)17.04 正式版及银河麒麟社区版发布
  6. RS-232交叉串口线的做法与测试.doc
  7. 战斗民族开源神器。ClickHouse为什么能够征服各个大厂?
  8. CondLaneNet | 使用动态卷积核预测每个车道线实例
  9. iOS 程序 main函数之前发生什么
  10. JavaScript的RegExp实例方法exec()
  11. js生成java uuid_javascript 生成UUID
  12. 【多媒体】媒体的概念和分类
  13. 如何更好的提问-在提问之前试试Stack Overflow、小黄鸭调试法
  14. 站在商业、技术与人文三叉路口的实体书店
  15. Scanner的close()方法的使用以及Scanner应该如何关闭
  16. java 统一日志_基于log4j实现统一日志管理
  17. c#与python 交互(调用第三方库)
  18. [思语]_我的人生理念
  19. (七)Python绘图基础:Matplotlib绘图
  20. bucket list 函数解析

热门文章

  1. Linux内核入门(二)——用户态向内核态切换
  2. Android下播放YUV视频文件
  3. 内核中的中断函数request_irq()
  4. tensorflow object detect API 使用,并修改一部分
  5. 全国370城市空间权重矩阵及计算方法、城市点坐标、城市道路网、城市poi感兴趣点
  6. 深度学习优化算法大全系列4:AdaGrad(Adaptive Gradient)
  7. 【图论】Spfa算法求最短路(长得像Dijkstra的,Bellman_Ford的优化算法)
  8. 一秒钟世界上会发生多少事_再多涂改,人性也总会醒来,也总会主动去追寻那一秒钟...
  9. python约瑟夫环单向循环链表_用单向循环链表解决约瑟夫环(Joseph)问题
  10. 在布局空间标注的尺寸量不对_装修公司为什么要量房?量房到底在量什么?又该注意什么?...