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修改css样式style
Apr 15 Javascript
js substr、substring和slice使用说明小记
Sep 15 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
js封装成插件_Canvas统计图插件编写实例
Sep 12 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
JavaScript寄生组合式继承原理与用法分析
Jan 11 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
Jul 19 Javascript
vue实现计算器功能
Feb 22 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
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
python实现自动发送报警监控邮件
2018/06/21 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
Otel.com:折扣酒店预订
2017/08/24 全球购物
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
2014年两会学习心得体会
2014/03/10 职场文书
听课评语大全
2014/04/30 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
班风学风建设方案
2014/05/06 职场文书
期末考试复习计划
2015/01/19 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
创业计划书之酒吧
2019/12/02 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
python正则表达式re.search()的基本使用教程
2021/05/21 Python