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 基础问答三
Dec 03 Javascript
Javascript 静态页面实现随机显示广告的办法
Nov 17 Javascript
JS JQUERY实现滚动条自动滚到底的方法
Jan 09 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
BootStrap Table对前台页面表格的支持实例讲解
Dec 22 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
Aug 03 Javascript
angular动态表单制作
Feb 23 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 24 Javascript
浅谈克隆 JavaScript
Nov 02 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 session安全问题分析
2011/06/24 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
jQuery1.6 使用方法二
2011/11/23 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
粗略分析Python中的内存泄漏
2015/04/23 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
师范教师毕业鉴定
2014/01/13 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
保留意见审计报告
2015/06/05 职场文书
孝女彩金观后感
2015/06/10 职场文书
教师节祝酒词
2015/08/11 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle