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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
JavaScript Array扩展实现代码
Oct 14 Javascript
WEB 浏览器兼容 推荐收藏
May 14 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 Javascript
一文让你彻底搞清楚javascript中的require、import与export
Sep 24 Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 Javascript
浅谈如何使用webpack构建多页面应用
May 30 Javascript
小程序自定义日历效果
Dec 29 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 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
php支持中文字符串分割的函数
2015/05/28 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
node使用request请求的方法
2019/12/20 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python中正则表达式的用法总结
2019/02/22 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
详解python的变量缓存机制
2021/01/24 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
三年级小学生评语
2014/04/22 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
用Python将GIF动图分解成多张静态图片
2021/06/11 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技