O(∩_∩)O包子不才,最近磕磕巴巴写了一个大转盘的效果。现在想说一下整个的思路部分,要是有设么不对的还请多多指教,期待共同成为优秀的前端~~
大转盘整个思路:

  1. 绘制整个转盘
  2. 编写一个随机数,用来当接口调用后的返回时间
  3. 改变css3的属性用来达到想要转动的效果,效果就是先匀速,接口调成功之后就加速,随后缓慢加速
绘制大转盘

(一)可以用一张图片,这是最简单的,转动的话只是针对这张图片的转动
(二)用canvas绘制大转盘
在这里我们主要说一下canvas绘制大转盘:

 // canvas开始绘图
var ctx = canvas.getContext('2d');
for (var i = 0; i < num; i++) {
// 保存当前状态
ctx.save();
// 开始一条新路径
ctx.beginPath();
// 位移到圆心,下面需要围绕圆心旋转
ctx.translate(150, 150);
// 从(0, 0)坐标开始定义一条新的子路径
ctx.moveTo(0, 0);
// 旋转弧度,需将角度转换为弧度,使用 degrees * Math.PI/180 公式进行计算。
ctx.rotate((360 / num * i + 360 / num / 2) * Math.PI/180);
// 绘制圆弧
ctx.arc(0, 0, 150, 0, 2 * Math.PI / num, false);
if (i % 2 == 0) {
ctx.fillStyle = '#b0e0e6';
}else{
ctx.fillStyle = '#e4c6d0';
}
// 填充扇形
ctx.fill();
// 绘制边框
ctx.lineWidth = 0.5;
ctx.strokeStyle = '#b0e0e6';
ctx.stroke(); // 文字
ctx.fillStyle = '#fff';
ctx.font="18px sans-serif";
if(i == 0){
ctx.fillText('六元红包', 55, 55);
}
if(i == 1){
ctx.fillText('没红包', 47, 50);
}
if(i == 2){
ctx.fillText('流量大赠送', 40, 47);
}
if(i == 3){
ctx.fillText('谢谢惠顾',55, 55);
}
if(i == 4){
ctx.fillText('送个人给你',40, 47);
}
if(i == 5){
ctx.fillText('啥玩意',55, 55);
} // 恢复前一个状态
ctx.restore();

讲解一下我所写的代码,就是我先将咱们这个圆主要划分了六块,canvas在画圆的时候,最主要的就是绘制六等分的图形,我们需要将角度转换成弧度,来进行绘制。因为一共6个扇形组合成的圆,所以我们进行一个for循环,然后计算每一个扇形的弧度,整个的公式就是```
degrees * Math.PI/180

![Paste_Image.png](//upload-images.jianshu.io/upload_images/5404409-320240e26580c2f5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#####编写随机数

var randommuil = Math.random(1000)*1000+1;```

因为在正常使用的时候,我们是需要调接口的,然后接口成功给你发挥你需要转动到哪一块,这期间是有一定的等待的时间。设置的这个随机数就是1-1000的随机数。

编写转动的效果

这个我的思路是这样的:就是在后台返回之前,匀速转动,接收到返回之后,先加速,后减速。但是我现在做的是模拟的,所以我设置了一个定时器,时间是随机数产生的。在启发定时器之前是匀速转动的。

$('#btn').click(function(){
var randommuil = Math.random(1000)*1000+1;
// js实现匀速转动5圈,随后加速,再减速
$("#canvas").css("transition","all 6s linear");
setTimeout(function(){
$("#canvas").css("transition","all 6s ease-out");
$("#canvas").css("transform" , "rotate(2780deg)");
},randommuil);

其实我写的很不好,因为用到的是CSS3.这个样子不如用js来控制的有自由度一点。要是大家知道怎么用js写转动效果不是依靠插件的,请给我留言或私信我,让我也学习学习~~~
最后,演示在这

关于canvas绘制大转盘并旋转的更多相关文章

  1. HTML5 Canvas绘制转盘抽奖

    新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...

  2. 小程序 大转盘 抽奖 canvas animation

    项目需求运用到大转盘 可设置概率 可直接自定义结果 效果如下

  3. 利用jQueryRotate旋转插件开发大转盘抽奖

    前言: 公司原来开发大转盘抽奖活动用的是flash 我发现swf文件竟然有6m大,吓尿了! 其实完全可以用js写的,但是自身前端功力有限,且时间紧迫,所以直接用旋转插件就好,兼容各方面都可以保证. 1 ...

  4. canvas绘制旋转图形

    将绘制到canvas上的要素进行旋转: 1.绘制时,通过操作画布的坐标轴状态:平移画布原点,旋转坐标轴等,达到旋转图形的目的 2.操作操作DOM元素,直接旋转canvas画布 操作画布的坐标轴状态: ...

  5. 测试canvas绘制旋转文字的性能

    canvas 绘制各种动画效果时,我们经常会使用画布旋转,使绘制上去的元素有旋转的效果. 最近在项目中碰到了很严重的性能问题,经常排查发现是因为绘制批量文字时使用了画布旋转,且每行文字的旋转角度是不一 ...

  6. 第165天:canvas绘制圆环旋转动画

    canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...

  7. 利用canvas实现抽奖转盘---转载别人的

    功能需求 转盘要美观,转动效果流畅. 转盘上需要显示奖品图片,并且奖品是后台读取的照片和名字. 转动动画完成后要有相应提示. 获取的奖品具体算法在数据库里操作,前端只提供最后的效果展示.   知识要点 ...

  8. 使用canvas绘制时钟

    使用canvas绘制时钟  什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...

  9. H5 canvas绘制出现模糊的问题

    在之前做移动端小游戏幸运转盘.九宫格转盘,使用到了 canvas ,也是第一次在项目中使用 canvas 来实现. 近期测试人员反应 canvas 绘制的内容太模糊,心想着用 canvas 绘制出来的 ...

随机推荐

  1. 用Jquery控制文本框只能输入数字和字母及jquery自定义方法$.fn

    封装成onlyNum(),onlyAlpha()和onlyNumAlpha()3个Jquery扩展方法,方便复用,由于里面一些JS代码涉及到了"禁用输入法,获取剪切板的内容",而& ...

  2. laravel 访问不存在的路由跳转问题!(异常处理)

    1.如果你只是想抛出404错误,debug开关可以满足你: 理论上你把 debug 关了,线上环境是会自动到 404 的. 是想要「跳转到 404 页」还是「显示 404 页」?如果是要跳转的话,请配 ...

  3. @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别

    @@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于 ...

  4. SiteWhere物联网云平台架构

    SystemArchitecture系统架构 Thisdocument describes the components that make up SiteWhere and how theyrela ...

  5. erlang四大behaviour之一gen_server(转载)

    erlang程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能用自己的module实现,这也就是behaviour了,应用behaviour可以减少与本身事务无关的代码量,设计 ...

  6. [J2EE]MyBatis HelloWorld

    一.MyBatis简单介绍 iBatis是apche的一个开源项目.2010年迁移到google code后改名为MyBatis,2013年前已到github.MyBatis是一个基于java的持久层 ...

  7. 怎么来爬取代理服务器ip地址?

    一年前突然有个灵感,想搞个强大的网盘搜索引擎,但由于大学本科学习软件工程偏嵌入式方向,web方面的能力有点弱,不会jsp,不懂html,好久没有玩过sql,但就是趁着年轻人的这股不妥协的劲儿,硬是把以 ...

  8. C#非常规调试场景总结

    场景1:类库独立调试.          方法:可以将类库项目修改成控制台程序,然后增加一个静态的main函数的方式来调试 场景2:程序需要连接数据库,本机调试的时候因为权限问题无法连接上数据库,只能 ...

  9. java 利用同步工具类控制线程

    前言 参考来源:<java并发编程实战> 同步工具类:根据工具类的自身状态来协调线程的控制流.通过同步工具类,来协调线程之间的行为. 可见性:在多线程环境下,当某个属性被其他线程修改后,其 ...

  10. 谈谈对XML的理解?说明Web应用中Web.xml文件的作用?

    谈谈对XML的理解?说明Web应用中Web.xml文件的作用? 解答:XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard ...