午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

js+canvas實(shí)現(xiàn)轉(zhuǎn)盤效果(兩個(gè)版本)

瀏覽:212日期:2024-04-20 08:12:56

本文實(shí)例為大家分享了js+canvas實(shí)現(xiàn)轉(zhuǎn)盤效果的具體代碼,供大家參考,具體內(nèi)容如下

用到了canvas的繪制,旋轉(zhuǎn),重繪操作,定時(shí)器,文本,平移,線條,圓,清理畫布等等;

版本一

不可以點(diǎn)擊,刷新旋轉(zhuǎn)

<!DOCTYPE html><html> <head> <meta charset='UTF-8'> <title>轉(zhuǎn)盤抽獎(jiǎng)</title> <style type='text/css'> #myCanvas { background: #FAEBD7; } </style> </head> <body> <canvas height='500'></canvas> </body> <script type='text/javascript'> var myCanvas = document.getElementById('myCanvas'); var cxt = myCanvas.getContext('2d'); // 平移畫布 cxt.translate(250, 250); // 圓心坐標(biāo) var oX = 0; var oY = 0; // 大圓半徑 var oR = 150; // 小圓半徑 var oR1 = 50; // 弧度 var oH = Math.PI / 180; // 定時(shí)器 var timer; // 角度 var angle = 0; // 文本 var textArr = ['JavaScript', 'jQuery', 'Vue', 'ajax', 'rect', 'angular', 'HTML', 'css']; // 顏色 var colorArr = []; // 隨機(jī)生成顏色 for (var i = 0; i < textArr.length; i++) { var c = 'rgb(' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ')' colorArr.push(c); } //起始速度 var seep = Math.random() * 100 + 100; timer = setInterval(function() { if (seep < 0.3) { clearInterval(timer); var index = Math.floor(angle / 45); console.log(index); cxt.font = '12px Arial'; cxt.textAlign = 'center'; cxt.textBaseline = 'middle' cxt.fillStyle = 'black'; var txt = textArr[textArr.length - index-1]; // console.log(cxt.measureText(txt).width); cxt.fillText(txt, 0, 0); } else { //重繪 // 清除畫布 cxt.clearRect(-250, -250, 500, 500); // 處理角度 if (angle >= 360) { angle = 0; } // 處理速度 seep *= 0.95; // 減小速度 angle += seep; // 畫短線 cxt.beginPath(); cxt.strokeStyle = 'red'; cxt.lineWidth = 2; cxt.moveTo(150, 0); cxt.lineTo(180, 0); cxt.stroke(); // 保存環(huán)境,旋轉(zhuǎn)畫布 cxt.strokeStyle = 'chartreuse'; cxt.save(); cxt.rotate(angle * oH); // 畫扇形 for (var i = 0; i < 8; i++) { cxt.fillStyle = colorArr[i]; cxt.beginPath(); cxt.moveTo(0, 0); cxt.arc(0, 0, 150, i * 45 * oH, (i + 1) * 45 * oH); cxt.closePath(); cxt.fill(); cxt.stroke(); } // 畫中心圓 cxt.fillStyle = '#FFF'; cxt.beginPath(); cxt.arc(oX, oY, oR1, 0, 2 * Math.PI); cxt.fill(); // 添加文字 for (var i = 0; i < textArr.length; i++) { cxt.save(); cxt.rotate((i * 45 + 25) * oH); cxt.fillStyle = '#fff'; cxt.font = '16px 微軟雅黑'; cxt.fillText(textArr[i], 70, 0); cxt.restore(); } cxt.restore(); // 環(huán)境釋放與環(huán)境保存成對(duì) } }, 50); </script></html>

版本二

加了點(diǎn)擊事件

<!DOCTYPE html><html> <head> <meta charset='UTF-8'> <title>轉(zhuǎn)盤抽獎(jiǎng)</title> <style type='text/css'> #myCanvas { background: #FAEBD7; } </style> </head> <body> <canvas height='500'></canvas> </body> <script type='text/javascript'> var myCanvas = document.getElementById('myCanvas'); var cxt = myCanvas.getContext('2d'); // 平移畫布 cxt.translate(250, 250); // 圓心坐標(biāo) var oX = 0; var oY = 0; // 大圓半徑 var oR = 150; // 小圓半徑 var oR1 = 50; // 弧度 var oH = Math.PI / 180; // 定時(shí)器 var timer; // 角度 var angle = 0; // 文本 var textArr = ['JavaScript', 'jQuery', 'Vue', 'ajax', 'rect', 'angular', 'HTML', 'css']; // 顏色 var colorArr = []; // 隨機(jī)生成顏色 for (var i = 0; i < textArr.length; i++) { var c = 'rgb(' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ')' colorArr.push(c); } //起始速度 var seep = Math.random() * 100 + 100; drawLine(); myCanvas.onclick = function(event) { var mX = event.clientX - myCanvas.offsetLeft; var mY = event.clientX - myCanvas.offsetTop; if (cxt.isPointInPath(mX, mY)) { var j = 50; var times = null; if (times == null) { times = setInterval(function() { if (seep < 0.3) { clearInterval(timer); var index = Math.floor(angle / 45); console.log(index); cxt.font = '12px Arial'; cxt.textAlign = 'center'; cxt.textBaseline = 'middle' cxt.fillStyle = 'black'; var txt = textArr[textArr.length - index - 1]; cxt.fillText(txt, 0, 0); } else { drawLine(); } }, 50); } } else { alert('no') } } function drawLine() { //重繪 // 清除畫布 cxt.clearRect(-250, -250, 500, 500); // 處理角度 if (angle >= 360) { angle = 0; } // 處理速度 seep *= 0.95; // 減小速度 angle += seep; // 畫短線 cxt.beginPath(); cxt.strokeStyle = 'red'; cxt.lineWidth = 2; cxt.moveTo(150, 0); cxt.lineTo(180, 0); cxt.stroke(); // 保存環(huán)境,旋轉(zhuǎn)畫布 cxt.strokeStyle = 'chartreuse'; cxt.save(); cxt.rotate(angle * oH); // 畫扇形 for (var i = 0; i < 8; i++) { cxt.fillStyle = colorArr[i]; cxt.beginPath(); cxt.moveTo(0, 0); cxt.arc(0, 0, 150, i * 45 * oH, (i + 1) * 45 * oH); cxt.closePath(); cxt.fill(); cxt.stroke(); } // 畫中心圓 cxt.fillStyle = '#FFF'; cxt.beginPath(); cxt.arc(oX, oY, oR1, 0, 2 * Math.PI); cxt.fill(); // 添加文字 for (var i = 0; i < textArr.length; i++) { cxt.save(); cxt.rotate((i * 45 + 25) * oH); cxt.fillStyle = '#fff'; cxt.font = '16px 微軟雅黑'; cxt.fillText(textArr[i], 70, 0); cxt.restore(); } cxt.restore(); // 環(huán)境釋放與環(huán)境保存成對(duì) } </script></html>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品久久久久中文字幕二区 | 天天干天天操av | 欧美日韩精品区 | 九色porny丨国产精品 | 亚洲视频欧洲视频 | 成人黄色在线播放 | av网站在线免费观看 | 黄色免费一级片 | 亚洲女人在线 | 久久亚洲视频 | 亚洲免费网站在线观看 | 亚洲黄色一级 | 在线视频观看你懂的 | 在线国产一区 | 亚洲精品字幕在线观看 | 亚洲欧洲国产综合 | 久久婷五月 | 日韩一区二区在线观看视频 | 欧美精品久久久久久久久老牛影院 | 青青草国产在线 | 国产麻豆91视频 | 亚洲一区二区三区三州 | 国产一区99 | 999国产精品视频免费 | 日韩激情在线播放 | 日韩在线小视频 | 国产精品久久久久久久成人午夜 | 成人午夜免费在线观看 | 国产女av| 久久99免费视频 | 中文字幕的 | 国产成人在线网址 | 亚洲一级免费视频 | 第一页国产| 亚洲毛片一区 | avtt亚洲| 日韩中文字幕av在线 | 白白色在线观看 | 人人草人人看 | 国产精品不雅视频 | 在线视频一区二区三区 |