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 相关文章推荐
JavaScript QueryString解析类代码
Jan 17 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 Javascript
js location.replace与location.reload的区别
Sep 08 Javascript
JS中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
JS将秒换成时分秒实现代码
Sep 03 Javascript
javascript简单实现命名空间效果
Mar 06 Javascript
jquery动态分页效果堪比时光网
Sep 25 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
如何制作一个Node命令行图像识别工具
Dec 12 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
Jul 26 jQuery
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
Jun 17 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
Terran建筑一览
2020/03/14 星际争霸
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
pycharm安装和首次使用教程
2018/08/27 Python
Python 获取div标签中的文字实例
2018/12/20 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
python实现图像拼接
2020/03/05 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
贷款担保书范文
2014/05/13 职场文书
交通事故和解协议书
2015/01/27 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
开会通知
2015/04/20 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis