&l..._"">
当前位置:   article > 正文

canvas基础

"

代码片段如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>canvas基础</title>
  6. <script type="text/javascript" src="jquery-3.2.1.min.js"></script>
  7. <link href="css/monokai_sublime.min.css" rel="stylesheet" />
  8. <link href="css/style.css" rel="stylesheet" />
  9. <link href="codemirror/lib/codemirror.css" rel="stylesheet" type="text/css">
  10. <link href="codemirror/theme/monokai.css" rel="stylesheet" type="text/css">
  11. <link href="codemirror/addon/display/fullscreen.css" rel="stylesheet" type="text/css">
  12. </head>
  13. <body class="example">
  14. <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">
  15. Your browser does not support the canvas element.
  16. </canvas>
  17. <textarea id="joldy">
  18. <script type="text/javascript" class="joldy">
  19. var c = document.getElementById("myCanvas");
  20. var cxt = c.getContext("2d");
  21. cxt.moveTo(10, 10);
  22. cxt.lineTo(150, 50);
  23. cxt.lineTo(10, 50);
  24. cxt.stroke();
  25. </script>
  26. </textarea>
  27. <script type="text/javascript" class="joldy">
  28. var c = document.getElementById("myCanvas");
  29. var cxt = c.getContext("2d");
  30. cxt.moveTo(10, 10);
  31. cxt.lineTo(150, 50);
  32. cxt.lineTo(10, 50);
  33. cxt.stroke();
  34. </script>
  35. <!-- 2 -->
  36. <canvas id="myCanvas1" width="200" height="100" style="border:1px solid #c3c3c3;">
  37. Your browser does not support the canvas element.
  38. </canvas>
  39. <p>在canvas中绘制圆形, 我们将使用以下方法:</p>
  40. <p>arc(x,y,r,start,stop)</p>
  41. <textarea id="myCanvas1">
  42. <script type="text/javascript">
  43. var c = document.getElementById("myCanvas1");
  44. var cxt = c.getContext("2d");
  45. cxt.fillStyle = "#FF0000";
  46. cxt.beginPath();
  47. cxt.arc(70, 18, 15, 0, Math.PI * 2, true);
  48. cxt.closePath();
  49. cxt.fill();
  50. </script>
  51. </textarea>
  52. <script type="text/javascript">
  53. var c = document.getElementById("myCanvas1");
  54. var cxt = c.getContext("2d");
  55. cxt.fillStyle = "#FF0000";
  56. cxt.beginPath();
  57. cxt.arc(70, 18, 15, 0, Math.PI * 2, true);
  58. cxt.closePath();
  59. cxt.fill();
  60. </script>
  61. <!-- 3 -->
  62. <canvas id="myCanvas3" width="200" height="100" style="border:1px solid #c3c3c3;">
  63. Your browser does not support the canvas element.
  64. </canvas>
  65. <img src="eg_flower.png" style="display: none">
  66. <textarea>
  67. <script type="text/javascript">
  68. var c = document.getElementById("myCanvas3");
  69. var cxt = c.getContext("2d");
  70. var img = new Image()
  71. img.src = "eg_flower.png"
  72. cxt.drawImage(img, 0, 0);
  73. </script>
  74. </textarea>
  75. <script type="text/javascript" class="joldy">
  76. var c = document.getElementById("myCanvas3");
  77. var cxt = c.getContext("2d");
  78. var img = new Image()
  79. img.src = "eg_flower.png"
  80. cxt.drawImage(img, 0, 0);
  81. </script>
  82. <!-- 4 -->
  83. <p>
  84. 使用 canvas 绘制文本,重要的属性和方法如下:
  85. </p>
  86. <p>font - 定义字体</p>
  87. <p>fillText(text,x,y) - 在 canvas 上绘制实心的文本</p>
  88. <p>strokeText(text,x,y) - 在 canvas 上绘制空心的文本</p>
  89. <canvas id="myCanvas4" width="300" height="200" style="border:1px solid #d3d3d3;">
  90. 您的浏览器不支持 HTML5 canvas 标签。</canvas>
  91. <script type="text/javascript">
  92. var c = document.getElementById("myCanvas4");
  93. var ctx = c.getContext("2d");
  94. ctx.font = "30px YaHei";
  95. ctx.fillStyle = "red";
  96. ctx.fillText("Hello World", 10, 50);
  97. /*
  98. fillText(text,x,y,maxWidth);
  99. text 规定在画布上输出的文本。
  100. x 开始绘制文本的 x 坐标位置(相对于画布)。
  101. y 开始绘制文本的 y 坐标位置(相对于画布)。
  102. maxWidth 可选。允许的最大文本宽度,以像素计。
  103. */
  104. ctx.strokeStyle = "red";
  105. ctx.strokeText("Hello World", 20, 100);
  106. </script>
  107. <!-- 5 -->
  108. <pre>
  109. Canvas - 渐变
  110. 渐变可以填充在矩形, 圆形, 线条, 文本等等, 各种形状可以自己定义不同的颜色。
  111. 以下有两种不同的方式来设置Canvas渐变:
  112. createLinearGradient(x,y,x1,y1) - 创建线条渐变
  113. createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变
  114. 当我们使用渐变对象,必须使用两种或两种以上的停止颜色。
  115. addColorStop()方法指定颜色停止,参数使用坐标来描述,可以是0至1.
  116. 使用渐变,设置fillStyle或strokeStyle的值为 渐变,然后绘制形状,如矩形,文本,或一条线。
  117. 使用 createLinearGradient():
  118. </pre>
  119. <canvas id="myCanvas5" width="300" height="200" style="border:1px solid #d3d3d3;"></canvas>
  120. <script type="text/javascript">
  121. var c = document.getElementById("myCanvas5");
  122. var ctx = c.getContext("2d");
  123. // 创建渐变
  124. /*
  125. addColorStop(stop,color); 方法规定 gradient 对象中的颜色和位置。
  126. stop: 介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置
  127. color: 在结束位置显示的 CSS 颜色值
  128. */
  129. var grd = ctx.createLinearGradient(0, 0, 200, 0);
  130. grd.addColorStop(0, "red");
  131. grd.addColorStop(1, "white");
  132. // 填充渐变
  133. ctx.fillStyle = grd;
  134. ctx.fillRect(10, 10, 150, 80);
  135. // 创建渐变
  136. var grd1 = ctx.createRadialGradient(75, 140, 5, 90, 150, 100);
  137. grd1.addColorStop(0, "red");
  138. grd1.addColorStop(1, "white");
  139. // 填充渐变
  140. ctx.fillStyle = grd1;
  141. ctx.fillRect(10, 100, 150, 80); // fillRect(x,y,width,height); 矩形左上角的 x 坐标; 矩形左上角的 y 坐标; 矩形的宽度,以像素计; 矩形的高度,以像素计
  142. </script>
  143. <!-- 6 -->
  144. <p>canvas渐变文字</p>
  145. <canvas id="canvas6" width="600" height="200"></canvas>
  146. <script type="text/javascript">
  147. var canvas = document.getElementById('canvas6'),
  148. ctx = canvas.getContext('2d'),
  149. gradient = ctx.createLinearGradient(0, 0, canvas.width, 0); // 渐变开始点的 x 坐标; 渐变开始点的 y 坐标; 渐变结束点的 x 坐标; 渐变结束点的 y 坐标
  150. gradient.addColorStop('0', 'black');
  151. gradient.addColorStop('0.3', 'green');
  152. gradient.addColorStop('0.6', 'yellow');
  153. gradient.addColorStop('1', 'red');
  154. /*
  155. addColorStop(stop,color); 方法规定 gradient 对象中的颜色和位置。
  156. stop: 介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置
  157. color: 在结束位置显示的 CSS 颜色值
  158. */
  159. ctx.font = '40px yahei';
  160. ctx.fillStyle = gradient
  161. ctx.fillText('hello world', 100, 100);
  162. </script>
  163. <!-- canvas7 绘制一个带有黑色阴影的蓝色矩形: -->
  164. <p>绘制一个带有黑色阴影的蓝色矩形:</p>
  165. <canvas id="canvas7" width="300" height="150" style="border:1px solid #d3d3d3;"></canvas>
  166. <pre>
  167. <code>
  168. var c=document.getElementById("canvas7");
  169. var ctx=c.getContext("2d");
  170. ctx.shadowBlur=20;
  171. ctx.fillStyle="blue";
  172. ctx.shadowColor="black";
  173. ctx.fillRect(20,20,100,80);
  174. ctx.shadowColor="red";
  175. ctx.fillRect(140,20,100,80);
  176. </code>
  177. </pre>
  178. <script type="text/javascript">
  179. var c = document.getElementById("canvas7");
  180. var ctx = c.getContext("2d");
  181. ctx.shadowBlur = 20; // 返回阴影的模糊级数
  182. ctx.shadowOffsetX = 20; // 正值或负值,定义阴影与形状的水平距离。
  183. ctx.shadowOffsetY = 20; // 正值或负值,定义阴影与形状的垂直距离。
  184. ctx.fillStyle = "blue";
  185. ctx.shadowColor = "black";
  186. ctx.fillRect(20, 20, 100, 80);
  187. ctx.shadowColor = "red";
  188. ctx.fillRect(140, 20, 100, 80);
  189. </script>
  190. <!-- canvas 8 canvas lineCap lineJoin lineWidth 属性 -->
  191. <p>canvas lineCap 属性</p>
  192. <canvas id="canvas8" width="300" height="300" style="border:1px solid #d3d3d3;"></canvas>
  193. <script>
  194. var c = document.getElementById("canvas8");
  195. var ctx = c.getContext("2d");
  196. ctx.beginPath();
  197. ctx.lineWidth = 10; // 属性设置或返回当前线条的宽度,以像素计。
  198. ctx.lineCap = "butt"; // 向线条的每个末端添加平直的边缘。
  199. ctx.moveTo(20, 20);
  200. ctx.lineTo(200, 20);
  201. ctx.stroke();
  202. ctx.beginPath();
  203. ctx.lineCap = "round"; // 向线条的每个末端添加圆形线帽。
  204. ctx.moveTo(20, 40);
  205. ctx.lineTo(200, 40);
  206. ctx.stroke();
  207. ctx.beginPath();
  208. ctx.lineCap = "square"; // 向线条的每个末端添加正方形线帽。
  209. ctx.moveTo(20, 60);
  210. ctx.lineTo(200, 60);
  211. ctx.stroke();
  212. // lineJoin 属性设置或返回所创建边角的类型,当两条线交汇时。
  213. ctx.beginPath();
  214. ctx.lineJoin = "round";
  215. ctx.moveTo(80, 80);
  216. ctx.lineTo(150, 110);
  217. ctx.lineTo(80, 160);
  218. ctx.stroke();
  219. /*
  220. miterLimit 属性设置或返回最大斜接长度。
  221. 斜接长度指的是在两条线交汇处内角和外角之间的距离。
  222. 提示:只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。
  223. 边角的角度越小,斜接长度就会越大。
  224. 为了避免斜接长度过长,我们可以使用 miterLimit 属性。
  225. */
  226. ctx.beginPath();
  227. ctx.lineJoin = "miter";
  228. ctx.miterLimit = 50;
  229. ctx.moveTo(160, 160);
  230. ctx.lineTo(200, 167);
  231. ctx.lineTo(160, 174);
  232. ctx.stroke();
  233. </script>
  234. <!-- canvas9 转换 -->
  235. <p>转换</p>
  236. <pre>
  237. 定义和用法
  238. scale() 方法缩放当前绘图,更大或更小。
  239. 注释:如果您对绘图进行缩放,所有之后的绘图也会被缩放。定位也会被缩放。如果您 scale(2,2),那么绘图将定位于距离画布左上角两倍远的位置。
  240. JavaScript 语法:
  241. context.scale(scalewidth,scaleheight);
  242. 参数值
  243. 参数 描述
  244. scalewidth 缩放当前绘图的宽度 (1=100%, 0.5=50%, 2=200%, 依次类推)
  245. scaleheight 缩放当前绘图的高度 (1=100%, 0.5=50%, 2=200%, etc.)
  246. </pre>
  247. <canvas id="canvas9" width="1000" height="250" style="border:1px solid #d3d3d3;"></canvas>
  248. <script type="text/javascript">
  249. var c = document.getElementById("canvas9");
  250. var ctx = c.getContext("2d");
  251. ctx.strokeRect(5, 5, 25, 15);
  252. ctx.scale(2, 2); // 放大200%
  253. ctx.strokeRect(5, 5, 25, 15);
  254. ctx.scale(2, 2);
  255. ctx.strokeRect(5, 5, 25, 15);
  256. ctx.scale(2, 2);
  257. ctx.strokeRect(5, 5, 25, 15);
  258. // rotate
  259. ctx.scale(0.1, 0.1);
  260. ctx.rotate(20 * Math.PI / 180);
  261. ctx.fillRect(400, 20, 100, 50);
  262. </script>
  263. <p>canvas transform()</p>
  264. <pre>
  265. 绘制一个矩形;通过 transform() 添加一个新的变换矩阵,再次绘制矩形;添加一个新的变换矩阵,然后再次绘制矩形。
  266. 请注意,每当您调用 transform() 时,它都会在前一个变换矩阵上构建:
  267. JavaScript 语法:
  268. context.transform(a,b,c,d,e,f);
  269. 参数值
  270. 参数 描述
  271. a 水平缩放绘图
  272. b 水平倾斜绘图
  273. c 垂直倾斜绘图
  274. d 垂直缩放绘图
  275. e 水平移动绘图
  276. f 垂直移动绘图
  277. </pre>
  278. <canvas id="canvas10" width="1000" height="250" style="border:1px solid #d3d3d3;"></canvas>
  279. <script>
  280. var c = document.getElementById("canvas10");
  281. var ctx = c.getContext("2d");
  282. ctx.fillStyle = "yellow";
  283. ctx.fillRect(0, 0, 250, 100)
  284. ctx.transform(1, 0.5, -0.5, 1, 30, 10);
  285. ctx.fillStyle = "red";
  286. ctx.fillRect(0, 0, 250, 100);
  287. ctx.transform(1, 0.5, -0.5, 1, 30, 10);
  288. ctx.fillStyle = "blue";
  289. ctx.fillRect(0, 0, 250, 100);
  290. </script>
  291. <p>canvas setTransform() 方法</p>
  292. <pre>
  293. 绘制一个矩形,通过 setTransform() 重置并创建新的变换矩阵,再次绘制矩形,重置并创建新的变换矩阵,然后再次绘制矩形。
  294. 请注意,每当您调用 setTransform() 时,它都会重置前一个变换矩阵然后构建新的矩阵,因此在下面的例子中,不会显示红色矩形,因为它在蓝色矩形下面:
  295. </pre>
  296. <canvas id="canvas11" width="1000" height="250" style="border:1px solid #d3d3d3;"></canvas>
  297. <script>
  298. var c = document.getElementById("canvas11");
  299. var ctx = c.getContext("2d");
  300. ctx.fillStyle = "yellow";
  301. ctx.fillRect(0, 0, 250, 100)
  302. ctx.setTransform(1, 0.5, -0.5, 1, 30, 10);
  303. ctx.fillStyle = "red";
  304. ctx.fillRect(0, 0, 250, 100);
  305. ctx.setTransform(1, 0.5, -0.5, 1, 30, 10);
  306. ctx.fillStyle = "blue";
  307. ctx.fillRect(0, 0, 250, 100);
  308. </script>
  309. <!-- canvas -->
  310. <p>canvas星空背景</p>
  311. <canvas id="starrynight"></canvas>
  312. <script>
  313. function drawing() {
  314. var c = document.getElementById('starrynight');
  315. var ctx = c.getContext('2d');
  316. var xMax = c.width = 700; //获取浏览器的屏幕的可用宽度
  317. var yMax = c.height = 300; //获取浏览器的屏幕的可用高度
  318. var hmTimes = Math.round(xMax + yMax); //获得 int 四舍五入(绘制星星数量)
  319. for (var i = 0; i <= hmTimes; i++) {
  320. var randomX = Math.floor((Math.random() * xMax) + 1); //绘制矩形的X坐标(1-xMax的随机数)
  321. var randomY = Math.floor((Math.random() * yMax) + 1); //绘制矩形的Y坐标(1-yMax的随机数)
  322. var randomSize = Math.floor((Math.random() * 2) + 1); //星星大小(1-2随机数)
  323. var randomOpacityOne = Math.floor((Math.random() * 9) + 1); //随机1-9透明度值
  324. var randomOpacityTwo = Math.floor((Math.random() * 9) + 1); //随机1-9透明度值
  325. var randomHue = Math.floor((Math.random() * 360) + 1); //随机1-360颜色值
  326. //大于1添加阴影
  327. if (randomSize > 1) {
  328. ctx.shadowBlur = Math.floor((Math.random() * 15) + 5); //阴影,随机5-15
  329. ctx.shadowColor = "white"; //阴影颜色,白色
  330. }
  331. ctx.fillStyle = "hsla(" + randomHue + ", 30%, 80%, ." + randomOpacityOne + randomOpacityTwo + ")"; //hsla 颜色设置(a是透明度)
  332. ctx.fillRect(randomX, randomY, randomSize, randomSize); //绘制矩形
  333. }
  334. }
  335. drawing();
  336. </script>
  337. <!-- canvas -->
  338. <p>canvas动画</p>
  339. <canvas id="canvas_1"></canvas>
  340. <script type="text/javascript" src="common.js"></script>
  341. <p>想继续学习的同学可以登录 <a href="http://canvas.migong.org">migong</a> 进行学习</p>
  342. <!-- 引入CodeMirror核心文件 -->
  343. <script type="text/javascript" src="codemirror.js"></script>
  344. <!-- CodeMirror支持不同语言,根据需要引入JS文件 -->
  345. <!-- 因为HTML混合语言依赖Javascript、XML、CSS语言支持,所以都要引入 -->
  346. <script type="text/javascript" src="codemirror/mode/javascript/javascript.js"></script>
  347. <script type="text/javascript" src="codemirror/mode/xml/xml.js"></script>
  348. <script type="text/javascript" src="codemirror/mode/css/css.js"></script>
  349. <script type="text/javascript" src="codemirror/mode/htmlmixed/htmlmixed.js"></script>
  350. <!-- 下面分别为显示行数、括号匹配和全屏插件 -->
  351. <script type="text/javascript" src="codemirror/addon/selection/active-line.js"></script>
  352. <script type="text/javascript" src="codemirror/addon/edit/matchbrackets.js"></script>
  353. <script type="text/javascript" src="codemirror/addon/display/fullscreen.js"></script>
  354. <script type="text/javascript">
  355. /*$(document).ready(function() {
  356. $('pre code').each(function(i, block) {
  357. hljs.highlightBlock(block);
  358. });
  359. });*/
  360. (function($) {
  361. var ele = document.getElementsByTagName('textarea');
  362. /*var arr = [];
  363. for ( var i = 0; i < ele.length; i++) {
  364. arr.push(`
  365. editor${i} = CodeMirror.fromTextArea(ele[${i}], {
  366. lineNumbers: true, // 显示行数
  367. indentUnit: 4, // 缩进单位为4
  368. styleActiveLine: true, // 当前行背景高亮
  369. matchBrackets: true, // 括号匹配
  370. mode: 'htmlmixed', // HMTL混合模式
  371. lineWrapping: true, // 自动换行
  372. theme: 'monokai', // 使用monokai模版
  373. });
  374. editor${i}.on("change", function (edt, changes) {
  375. console.log(edt.getValue());
  376. //eval('(' + edt.getValue() + ')');
  377. $('.joldy').remove();
  378. var c=$("#myCanvas");
  379. c.attr('width', c.width());
  380. c.attr('height', c.height());
  381. $('body').append(edt.getValue());
  382. editor.refresh();
  383.   });
  384. `
  385. )
  386. }
  387. for(var i = 0; i < arr.length; i++) {
  388. eval(arr[i]);
  389. }*/
  390. var id1 = CodeMirror.fromTextArea(document.getElementById('joldy'), {
  391. lineNumbers: true, // 显示行数
  392. indentUnit: 4, // 缩进单位为4
  393. styleActiveLine: true, // 当前行背景高亮
  394. matchBrackets: true, // 括号匹配
  395. mode: 'htmlmixed', // HMTL混合模式
  396. lineWrapping: true, // 自动换行
  397. theme: 'monokai', // 使用monokai模版
  398. });
  399. id1.setOption("extraKeys", {
  400. // Tab键换成4个空格
  401. Tab: function(cm) {
  402. var spaces = Array(cm.getOption("indentUnit") + 1).join(" ");
  403. cm.replaceSelection(spaces);
  404. },
  405. // F11键切换全屏
  406. "F11": function(cm) {
  407. cm.setOption("fullScreen", !cm.getOption("fullScreen"));
  408. },
  409. // Esc键退出全屏
  410. "Esc": function(cm) {
  411. if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
  412. }
  413. });
  414. id1.on("change", function (edt, changes) {
  415. console.log(edt.getValue());
  416. //eval('(' + edt.getValue() + ')');
  417. $('.joldy').remove();
  418. var c=$("#myCanvas");
  419. c.attr('width', c.width());
  420. c.attr('height', c.height());
  421. $('body').append(edt.getValue());
  422. editor.refresh();
  423.   });
  424. })(jQuery);
  425. </script>
  426. </body>
  427. </html>
  1. var canvas = document.querySelector('#canvas_1'),
  2. ctx = canvas.getContext('2d'), //获取该canvas的2D绘图环境对象
  3. particles = [],
  4. patriclesNum = 10,
  5. w = 500,
  6. h = 500,
  7. colors = ['#f35d4f', '#f36849', '#c0d988', '#6ddaf1', '#f1e85b'];
  8. canvas.width = 500;
  9. canvas.height = 500;
  10. // canvas.style.left = (window.innerWidth - 500)/2+'px';
  11. /*if(window.innerHeight>500)
  12. canvas.style.top = (window.innerHeight - 500)/2+'px';*/
  13. function Factory() {
  14. this.x = Math.round(Math.random() * w); // x轴随机坐标
  15. this.y = Math.round(Math.random() * h); // y轴随机坐标
  16. this.rad = Math.round(Math.random() * 1) + 1;
  17. this.rgba = colors[Math.round(Math.random() * 3)]; // 随机选取color颜色
  18. this.vx = Math.round(Math.random() * 3) - 1.5; // x轴正负加减1.5
  19. this.vy = Math.round(Math.random() * 3) - 1.5; // y轴正负加减1.5
  20. }
  21. function draw() {
  22. ctx.clearRect(0, 0, w, h); //通过clearRect来擦除画布
  23. ctx.globalCompositeOperation = 'lighter';
  24. for (var i = 0; i < patriclesNum; i++) {
  25. var temp = particles[i];
  26. var factor = 1;
  27. for (var j = 0; j < patriclesNum; j++) {
  28. var temp2 = particles[j];
  29. ctx.linewidth = 0.5;
  30. if (temp.rgba == temp2.rgba && findDistance(temp, temp2) < 50) {
  31. ctx.strokeStyle = temp.rgba;
  32. ctx.beginPath();
  33. ctx.moveTo(temp.x, temp.y);
  34. ctx.lineTo(temp2.x, temp2.y);
  35. ctx.stroke();
  36. factor++;
  37. }
  38. }
  39. ctx.fillStyle = temp.rgba;
  40. ctx.strokeStyle = temp.rgba;
  41. ctx.beginPath(); // 重置画笔,避免污染
  42. ctx.arc(temp.x, temp.y, temp.rad * factor, 0, Math.PI * 2, true);
  43. ctx.fill(); // 填充
  44. ctx.closePath();
  45. ctx.beginPath(); // 重置画笔,避免污染
  46. ctx.arc(temp.x, temp.y, (temp.rad + 10) * factor, 0, Math.PI * 2, true);
  47. ctx.stroke(); //描边
  48. ctx.closePath();
  49. temp.x += temp.vx; // x轴正负加减1.5
  50. temp.y += temp.vy; // y轴正负加减1.5
  51. if (temp.x > w) temp.x = 0;
  52. if (temp.x < 0) temp.x = w;
  53. if (temp.y > h) temp.y = 0;
  54. if (temp.y < 0) temp.y = h;
  55. }
  56. }
  57. function findDistance(p1, p2) {
  58. return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
  59. }
  60. window.requestAnimFrame = (function() {
  61. return window.requestAnimationFrame ||
  62. window.webkitRequestAnimationFrame ||
  63. window.mozRequestAnimationFrame ||
  64. function(callback) {
  65. window.setTimeout(callback, 1000 / 60);
  66. };
  67. })();
  68. (function init() {
  69. for (var i = 0; i < patriclesNum; i++) {
  70. particles.push(new Factory);
  71. }
  72. })();
  73. (function loop() {
  74. draw();
  75. requestAnimFrame(loop);
  76. })();

 

转载于:https://my.oschina.net/joldy/blog/1574957

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/332571
推荐阅读
相关标签