JavaScript 動態(tài)三角函數(shù)實例詳解
更新時間:2017年01月08日 09:36:08 作者:司馬懿字仲達
本文通過實例代碼給大家實例講解了javascript動態(tài)三角函數(shù)知識,非常不錯,具有參考借鑒價值,需要的朋友參考下
下面一段代碼給大家分享JavaScript 動態(tài)三角函數(shù),具體代碼如下所述:
<html> <head> <meta charset="utf8" /> <title>三角函數(shù)圖形</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會自動使用最優(yōu)的幀率進行渲染 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(); } //渲染三角函數(shù) 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>
相關(guān)文章
JS實現(xiàn)數(shù)組去重方法總結(jié)(六種方法)
這篇文章給大家總結(jié)下JS實現(xiàn)數(shù)組去重方法(六種方法),面試中也經(jīng)常會遇到這個問題。文中給大家引申的還有合并數(shù)組并去重的方法,感興趣的朋友跟隨腳本之家小編一起學習吧2017-07-07微信小程序視圖容器(swiper)組件創(chuàng)建輪播圖
這篇文章主要為大家詳細介紹了微信小程序視圖容器(swiper)組件創(chuàng)建輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08實現(xiàn)超用戶體驗 table排序javascript實現(xiàn)代碼
2009-06-06function, new function, new Function之間的區(qū)別
function, new function, new Function之間的區(qū)別...2007-03-03