lst.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>坐标雷达扫描特效</title>
  6. <script src="__BOX__/js/jquery.min.js"></script>
  7. <style>
  8. html, body {
  9. width: 100%;
  10. height: 100%;
  11. padding: 0;
  12. margin: 0;
  13. overflow: hidden;
  14. font-family: Abel;
  15. }
  16. canvas {
  17. background-color: #333;
  18. -webkit-transform: scaleY(-1);
  19. transform: scaleY(-1);
  20. }
  21. .info {
  22. position: absolute;
  23. left: 50px;
  24. bottom: 50px;
  25. }
  26. h1 {
  27. color: white;
  28. letter-spacing: 3px;
  29. margin: 0;
  30. }
  31. .message {
  32. margin: 0;
  33. color: #b99362;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <canvas id="myCanvas"></canvas>
  39. <div class="info">
  40. <h1>Boss, CODING Please.</h1>
  41. <p class="message">temp</p>
  42. </div>
  43. <script>
  44. var c = $("#myCanvas")[0];
  45. var ctx = c.getContext("2d");
  46. var color_gold="185,147,98";
  47. var ww,wh;
  48. var center={x: 0,y: 0};
  49. function getWindowSize(){
  50. ww=$(window).outerWidth();
  51. wh=$(window).outerHeight();
  52. c.width=ww;
  53. c.height=wh;
  54. center={x: ww/2,y: wh/2};
  55. ctx.restore();
  56. ctx.translate(center.x,center.y);
  57. }
  58. getWindowSize();
  59. $(window).resize(getWindowSize);
  60. var enemies=Array(10).fill({}).map(
  61. function(obj){
  62. return {
  63. r: Math.random()*200,
  64. deg: Math.random()*360,
  65. opacity: 0
  66. }
  67. }
  68. );
  69. setInterval(draw,10);
  70. var time=0;
  71. var deg_to_pi=Math.PI/180;
  72. function Point(r,deg){
  73. return {
  74. x: r*Math.cos(deg_to_pi*deg),
  75. y: r*Math.sin(deg_to_pi*deg),
  76. };
  77. }
  78. function Color(op){
  79. return "rgba("+color_gold+","+op+")";
  80. }
  81. function draw(){
  82. time+=1;
  83. ctx.fillStyle = "#111";
  84. ctx.beginPath();
  85. ctx.rect(-2000,-2000,4000,4000);
  86. ctx.fill();
  87. ctx.strokeStyle="rgba(255,255,255,0.1)";
  88. ctx.moveTo(-ww/2,0);
  89. ctx.lineTo(ww/2,0);
  90. ctx.moveTo(0,-wh/2);
  91. ctx.lineTo(0,wh/2);
  92. ctx.stroke();
  93. ctx.strokeStyle=Color(1);
  94. var r=200;
  95. var deg=time;
  96. var newpoint=Point(r,deg);
  97. var line_deg = (time/2) % 360;
  98. // console.log(line_deg);
  99. var line_deg_len=100;
  100. for(var i=0;i<line_deg_len;i++){
  101. // var deg = (time-i);
  102. var deg1 = (line_deg-i-1) ;
  103. var deg2 = (line_deg-i) ;
  104. var point1=Point(r,deg1);
  105. var point2=Point(r,deg2);
  106. var opacity=1-(i/line_deg_len)-0.3;
  107. if (i==0) opacity=1;
  108. ctx.beginPath();
  109. // ctx.fillStyle="white";
  110. ctx.fillStyle=Color(opacity);
  111. ctx.moveTo(0,0);
  112. ctx.lineTo(point1.x,point1.y);
  113. ctx.lineTo(point2.x,point2.y);
  114. // ctx.stroke();
  115. ctx.fill();
  116. }
  117. enemies.forEach(function(obj){
  118. ctx.fillStyle=Color(obj.opacity);
  119. var obj_point=Point(obj.r,obj.deg);
  120. ctx.beginPath();
  121. ctx.arc(
  122. obj_point.x,obj_point.y,
  123. 4,0,2*Math.PI
  124. );
  125. ctx.fill();
  126. ctx.strokeStyle= Color(obj.opacity);
  127. var x_size=6;
  128. ctx.lineWidth=4;
  129. ctx.beginPath();
  130. ctx.moveTo(obj_point.x-x_size,obj_point.y+x_size);
  131. ctx.lineTo(obj_point.x+x_size,obj_point.y-x_size);
  132. ctx.moveTo(obj_point.x+x_size,obj_point.y+x_size);
  133. ctx.lineTo(obj_point.x-x_size,obj_point.y-x_size);
  134. ctx.stroke();
  135. if (Math.abs(obj.deg - line_deg)<=1){
  136. obj.opacity=1;
  137. $(".message").text("Detected: "+ obj.r.toFixed(3) + " at " +obj.deg.toFixed(3));
  138. }
  139. obj.opacity*=0.99;
  140. ctx.strokeStyle= Color(obj.opacity);
  141. ctx.lineWidth=1;
  142. ctx.beginPath();
  143. ctx.arc(
  144. obj_point.x,obj_point.y,
  145. 10*(1/(obj.opacity+0.0001)),0,2*Math.PI
  146. );
  147. ctx.stroke();
  148. });
  149. ctx.strokeStyle=Color(1);
  150. var split =120;
  151. var feature =15;
  152. var start_r=230;
  153. var len = 5;
  154. for(var i=0;i<split;i++){
  155. ctx.beginPath();
  156. var deg = (i/120) * 360;
  157. if (i%feature==0){
  158. len=10;
  159. ctx.lineWidth=3;
  160. }else{
  161. len=5;
  162. ctx.lineWidth=1;
  163. }
  164. var point1 =Point(start_r,deg);
  165. var point2 =Point(start_r+len,deg);
  166. ctx.moveTo(point1.x,point1.y);
  167. ctx.lineTo(point2.x,point2.y);
  168. ctx.stroke();
  169. }
  170. function CondCircle(r,lineWidth,func_cond){
  171. ctx.lineWidth=lineWidth;
  172. ctx.strokeStyle=Color(1);
  173. ctx.beginPath();
  174. for(var i=0;i<=360;i++){
  175. var point =Point(r,i);
  176. if (func_cond(i)){
  177. ctx.lineTo(point.x,point.y);
  178. }else{
  179. ctx.moveTo(point.x,point.y);
  180. }
  181. }
  182. ctx.stroke();
  183. }
  184. // CondCircle(300);
  185. CondCircle(300,2,function(deg){
  186. return ((deg+time/10)%180)<90;
  187. });
  188. CondCircle(100,1,function(deg){
  189. return (deg%3)<1;
  190. });
  191. CondCircle(190,1,function(deg){
  192. return true;
  193. });
  194. }
  195. </script>
  196. </body>
  197. </html>