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 相关文章推荐
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
Jun 26 Javascript
JavaScript 高级语法介绍
Jun 15 Javascript
浅谈Javascript嵌套函数及闭包
Nov 09 Javascript
分享27个jQuery 表单插件集合推荐
Apr 25 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
用js格式化金额可设置保留的小数位数
May 09 Javascript
jQuery文件上传控件 Uploadify 详解
Jun 20 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
Javascript继承机制详解
May 30 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
浅谈vue项目用到的mock数据接口的两种方式
Oct 09 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脚本的10个技巧(6)
2006/10/09 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP Reflection API详解
2015/05/12 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
python实现爬虫下载美女图片
2015/07/14 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
python定义类的简单用法
2020/07/24 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
几个人围成一圈的问题
2013/09/26 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
施工工地安全标语
2014/06/07 职场文书
经济管理自荐书
2014/06/09 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
三好学生评语大全
2014/12/29 职场文书
单位接收函范文
2015/01/30 职场文书
志愿者个人总结
2015/03/03 职场文书
技能培训通讯稿
2015/07/18 职场文书
决心书格式范文
2015/09/23 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js