js canvas实现QQ拨打电话特效


Posted in Javascript onMay 10, 2017

首先呢,先给特效。自己找手机录的,有点不清楚,请见谅!

js canvas实现QQ拨打电话特效

本来是打算做 腾讯的贝塞尔曲线下拉刷新图。然后和朋友打了个QQ电话,稍微注意了一下未接通时候的动画。然后就想着实现以下。

这里要注意的就是:

canvas的中心点经过变化到canvas的正中后
canvas的 Y轴由上至下 是从(-,+);而数学坐标系的Y轴由上至下 是从(+,-)的。

首先看一下html代码。就至少简单的添加一个canvas,基本没进行其他操作。

HTML代码

<canvas id="canvas1" width="500" height="500"></canvas>

JS代码

var paint, r;    //设置画笔和半径
var width, height; //获得canvas的长度和宽度
var count = 0;   //设置正铉曲线的便宜量
var colors = ["#66ccff", "#ff0000"];

/*程序入口*/
function main() {
  var canvas1 = document.getElementById("canvas1");
  paint = canvas1.getContext("2d");
  width = paint.canvas.width;
  height = paint.canvas.height;
  r = width / 2;
  start();
  setInterval(start, 200);
}

/*开始进行清除和绘制*/
function start() {
  paint.clearRect(0, 0, width, height);
  drawXY();
  drawSin();
  paint.restore();
}

/*绘制一个坐标系*/
function drawXY() {
  paint.save();
  paint.translate(r, r);
  paint.beginPath();
  paint.lineWidth = 1;
  paint.moveTo(0, -r);
  paint.lineTo(0, r);
  paint.stroke();

  paint.lineWidth = 1;
  paint.moveTo(-r, 0);
  paint.lineTo(r, 0);
  paint.stroke();
}

/*正弦曲线可表示为y=Asin(ωx+φ)+k,定义为函数y=Asin(ωx+φ)+k在直角坐标系上的图象,*/

/*绘制sin正弦图像*/
function drawSin() {
  paint.save();
  count++;//设置每一刻的偏移量
  var i, j, rad, y;
  for (j = 0; j < 2; j++) {
    for (i = -1000; i < 1000; i++) {
      paint.beginPath();
      paint.strokeStyle = colors[j];
      rad = i * Math.PI / 180;
      y = -20 * Math.sin(rad - (count + j));
      paint.arc(i, y, 0.3, 0, 2 * Math.PI, false);
      paint.stroke();
    }
  }

  paint.restore();
}

JS中需要注意的就是。在对图像进行计时改变的时候,一定要的先进行清除。之后要对绘制过的图像进行保存和恢复。不然程序会出现重叠或者无法显示等bug。

这里定义的paint变量名是按照安卓绘图的习惯来的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js获取TreeView控件选中节点的Text和Value值的方法
Nov 24 Javascript
JavaScript 函数replace深入了解
Mar 14 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
jquery仅用6行代码实现滑动门效果
Sep 07 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
微信小程序实现点赞业务
Feb 10 Javascript
bootstrap弹出层的多种触发方式
May 10 #Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 #Javascript
微信小程序 支付后台java实现实例
May 09 #Javascript
使用 Vue.js 仿百度搜索框的实例代码
May 09 #Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
May 09 #Javascript
使用ES6语法重构React代码详解
May 09 #Javascript
JQuery实现定时刷新功能代码
May 09 #jQuery
You might like
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
vue-router传参用法详解
2019/01/19 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python删除文本中行数标签的方法
2018/05/31 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
django的ORM模型的实现原理
2019/03/04 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
python输出数学符号实例
2020/05/11 Python
如何验证python安装成功
2020/07/06 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
什么是serialVersionUID
2016/03/04 面试题
一套Delphi的笔试题一
2016/02/14 面试题
马智宇婚礼主持词
2014/03/22 职场文书
小学运动会口号
2014/06/07 职场文书
中文专业求职信
2014/06/20 职场文书
双拥工作宣传标语
2014/06/26 职场文书
国庆促销活动总结
2014/08/29 职场文书
大学生求职自荐信
2015/03/24 职场文书
美丽心灵观后感
2015/06/01 职场文书
环境卫生整治简报
2015/07/20 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python