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判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
Oct 25 Javascript
bootstrap fileinput 插件使用项目总结(经验)
Feb 22 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 jQuery
AngularJS中table表格基本操作示例
Oct 10 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
微信小程序 wx.getUserInfo引导用户授权问题实例分析
Mar 09 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
python PyTorch预训练示例
2018/02/11 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
python 5个顶级异步框架推荐
2020/09/09 Python
师范毕业生求职信
2014/07/11 职场文书
应聘护士求职信
2014/07/21 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
英文导游词
2015/02/13 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年教师节活动总结
2015/03/20 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android