下面一段代码给大家分享JavaScript 动态三角函数,具体代码如下所述:
<html>
<head>
<meta charset="utf8" />
<title>三角函数图形</title>
<style type="text/css">
body {
background-color:black;
}
#canvas {
position:absolute;
top:50%;
left:50%;
margin:-151px 0 0 -401px;
border:1px dashed #171717;
}
</style>
</head>
<body>
<canvas id="canvas" width="800px" height="300px">您的浏览器不支持canvas</canvas>
<script type="text/javascript">
//判断是否支持canvaas
function isSupportCanvas(canvas) {
return !!(canvas.getContext && canvas.getContext("2d"));
}
//requestAnimationFrame会自动使用最优的帧率进行渲染
function setupRAF() {
var lastTime = 0;
//兼容各个浏览器,Internet Explorer11、Google Chrome(Microsoft Edge)、Mozilla Firefox、Opera
var vendors = ["ms", "moz", "webkit", "o"];
for(var i=0; i<vendors.length; i++) {
window.requestAnimationFrame = window[vendors[i] + "RequestAnimationFrame"];
window.cancelAnimationFrame = window[vendors[i] + "CancelAnimationFrame"] || window[vendors[i] + "CancelRequestAnimationFrame"];
//测试浏览器支持哪一张
if(window.requestAnimationFrame) {
console.log(vendors[i] + "requestAnimationFrame");
}
if(window[vendors[i] + "CancelAnimationFrame"]) {
console.log(vendors[i] + "CancelAnimationFrame");
}
if(window[vendors[i] + "CancelRequestAnimationFrame"]) {
console.log(vendors[i] + "CancelRequestAnimationFrame");
}
}
//回退机制
if(!window.requestAnimationFrame) {
window.requestAnimationFrame = function(callback, element) {
var currentTime = new Date().getTime();
var timeToCall = Math.max(0, 16-(currentTime-lastTime));
var callTime = currentTime + timeToCall;
var id = window.setTimeout(function() {
callback(callTime);
}, timeToCall);
lastTime = callTime;
return id;
};
}
//回退机制
if(!window.cancelAnimationFrame) {
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
}
}
}
var CanvasController = function(canvas) {
var ctx = canvas.getContext("2d");
ctx.lineWidth = 1;
ctx.textAlign = "left";
ctx.textBaseline = "middle";
ctx.font = "bold 18pt Calibri";
var i = 0;
var step = 1;
var unitX = 90
var unitY = canvas.height * 0.3;
function update() {
i += step;
i %= 360;
}
//渲染坐标
function rendeRcoordinate() {
ctx.strokeStyle = "white";
ctx.beginPath();
var topUnit = 0.5 * canvas.height - unitY;
var bottomUnit = 0.5 * canvas.height + unitY;
ctx.moveTo(0, topUnit);
ctx.lineTo(canvas.width, topUnit);
ctx.moveTo(0, bottomUnit);
ctx.lineTo(canvas.width, bottomUnit);
ctx.stroke();
}
//渲染三角函数
function render(trigonometricFunction, color) {
ctx.strokeStyle = color;
ctx.beginPath();
var isInRange = false;
for(var x=0; x < canvas.width; x++) {
var a = (x + i) / 180 * Math.PI;
var y = trigonometricFunction(a);
//tan值有可能是无穷大或无穷小
if(isFinite(y)) {
y = y * unitY + 0.5 * canvas.height;
if(isInRange) {
if(y < 0 || y > canvas.height) {
isInRange = false;
} else {
ctx.lineTo(x, y);
}
} else {
isInRange = true;
ctx.moveTo(x, y);
}
if(x == 0) {
ctx.fillStyle = color;
var funcName = trigonometricFunction.toString();
var reg = /function\s*(\w*)/i;
var matches = reg.exec(funcName);
ctx.fillText(matches[1], 0, y);
}
} else {
isInRange = false;
}
}
ctx.stroke();
}
this.init = function() {
function loop() {
requestAnimationFrame(loop, canvas);
ctx.clearRect(0, 0, canvas.width, canvas.height);
update();
rendeRcoordinate();
render(Math.sin, "red");
render(Math.cos, "green");
render(Math.tan, "blue");
}
loop();
}
}
function init() {
var canvas = document.getElementById("canvas");
if(!isSupportCanvas(canvas)) {
return;
}
setupRAF();
var canvasController = new CanvasController(canvas);
canvasController.init();
}
init();
</script>
</body>
</html>
</html>
# js
# 动态三角函数
# 三角函数
# js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、U
# AngularJS中一般函数参数传递用法分析
# JS中关于事件处理函数名后面是否带括号的问题
# 深入理解Node.js 事件循环和回调函数
# js调用父框架函数与弹窗调用父页面函数的简单方法
# 您的
# 有可能
# 给大家
# 不支持
# 所述
# 最优
# 判断是否
# amp
# getContext
# return
# canvaas
# height
# requestAnimationFrame
# isSupportCanvas
# javascript
# script
# function
# width
# Opera
# vendors
相关文章:
c# 服务器GC和工作站GC的区别和设置
建站之星展会模版如何一键下载生成?
如何挑选优质建站一级代理提升网站排名?
建站主机服务器选购指南:轻量应用与VPS配置解析
家具网站制作软件,家具厂怎么跑业务?
建站之星如何修改网站生成路径?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
香港服务器选型指南:免备案配置与高效建站方案解析
如何选择高效响应式自助建站源码系统?
C#如何使用XPathNavigator高效查询XML
独立制作一个网站多少钱,建立网站需要花多少钱?
网站微信制作软件,如何制作微信链接?
浅析上传头像示例及其注意事项
北京制作网站的公司,北京铁路集团官方网站?
seo网站制作优化,网站SEO优化步骤有哪些?
建站VPS选购需注意哪些关键参数?
如何通过wdcp面板快速创建网站?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何通过IIS搭建网站并配置访问权限?
已有域名和空间如何搭建网站?
如何选购建站域名与空间?自助平台全解析
建站之星CMS五站合一模板配置与SEO优化指南
香港服务器租用每月最低只需15元?
如何用虚拟主机快速搭建网站?详细步骤解析
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
做企业网站制作流程,企业网站制作基本流程有哪些?
Python lxml的etree和ElementTree有什么区别
如何通过免费商城建站系统源码自定义网站主题与功能?
5种Android数据存储方式汇总
建站之星3.0如何解决常见操作问题?
个人网站制作流程图片大全,个人网站如何注销?
如何在万网开始建站?分步指南解析
招商网站制作流程,网站招商广告语?
如何零成本快速生成个人自助网站?
常州企业网站制作公司,全国继续教育网怎么登录?
建站之星2.7模板快速切换与批量管理功能操作指南
长沙做网站要多少钱,长沙国安网络怎么样?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
如何通过西部数码建站助手快速创建专业网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
实例解析Array和String方法
网站制作壁纸教程视频,电脑壁纸网站?
常州自助建站费用包含哪些项目?
如何用免费手机建站系统零基础打造专业网站?
网站制作需要会哪些技术,建立一个网站要花费多少?
微信小程序 五星评分(包括半颗星评分)实例代码
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何用景安虚拟主机手机版绑定域名建站?
如何撰写建站申请书?关键要点有哪些?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
*请认真填写需求信息,我们会在24小时内与您取得联系。