home.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>中科在线</title>
  6. <!-- layui -->
  7. <link rel="stylesheet" href="static/home/lib/layui/css/layui.css">
  8. <link rel="stylesheet" href="static/home/css/lib.css">
  9. <link rel="stylesheet" href="static/home/css/road.css">
  10. <link rel="stylesheet" href="static/home/css/index.css">
  11. <style>
  12. .canvas-stats {
  13. display: none;
  14. }
  15. .notice{
  16. color:#fff;
  17. display: block;
  18. padding: 0 80px;
  19. text-align: right;
  20. font-size: 20px;
  21. }
  22. .notice:hover{
  23. cursor: pointer;
  24. color: #0085d2;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div class="header">
  30. <a href="" style="display: none;">
  31. <div class="home-btn"></div>
  32. </a>
  33. <img class='image' src="static/images/logo.png" alt="">
  34. <p class='title'>中科在线</p>
  35. <p class='notice' onclick="noticeBtn()">通知</p>
  36. </div>
  37. <img class="sci-wheel" src="static/home/images/sci.gif" alt="">
  38. <div class="center">
  39. <a class="list fn_1 moveUpDownFla1" target="_blank" href="market/index">
  40. <p>科技超市</p>
  41. </a>
  42. <a class="list fn_2 moveUpDownFla2" target="_blank" href="hallList/index">
  43. <p>直播大厅</p>
  44. </a>
  45. <a class="list fn_3 moveUpDownFla1" target="_blank" href="dynamic/index">
  46. <p>动态监测</p>
  47. </a>
  48. <a class="list fn_4 moveUpDownFla2" target="_blank" href="live/service">
  49. <p>创新服务</p>
  50. </a>
  51. <a class="list fn_5 moveUpDownFla2" target="_blank" href="technical/index">
  52. <p>技术交流</p>
  53. </a>
  54. </div>
  55. <!--流星-->
  56. <div class="liuxing liuxing1 liuxingFla"></div>
  57. <div class="liuxing liuxing2 liuxingFla2"></div>
  58. <div class="liuxing liuxing3 liuxingFla3"></div>
  59. <div class="liuxing liuxing4 liuxingFla4"></div>
  60. <div id="canvas-container-1" class="canvas-container">
  61. <canvas id="canvas-1"></canvas>
  62. </div>
  63. <script src="static/home/js/stats.min.js"></script>
  64. <script src="static/home/js/three.min.js"></script>
  65. <script src="static/js/jquery-1.8.3.min.js"></script>
  66. <script>
  67. window.onload = function () {
  68. $.ajax({
  69. url:'/api/market/notice',
  70. type:"GET",
  71. contentType:'application/json',
  72. success:function(res){
  73. console.log(res);
  74. if(res.errcode =='0') {
  75. if(res.data.length>0) {
  76. var head = res.data[0];
  77. $('.notice').text(head.title)
  78. }
  79. }
  80. },
  81. error:function (e) {
  82. console.error(e)
  83. }
  84. })
  85. }
  86. function ThreeJSCanvas(CANVAS_ID) {
  87. var SCREEN_HEIGHT = Math.min(window.innerWidth, window.innerHeight);
  88. var SCREEN_WIDTH = SCREEN_HEIGHT;
  89. var SCREEN_ASPECT_RATIO = SCREEN_WIDTH / SCREEN_HEIGHT;
  90. var canvas, container;
  91. var container, loader, stats;
  92. var renderer, camera, scene;
  93. var raycaster, controls;
  94. var ANIMATION_FRAME_LENGTH = 30,
  95. INTERACT_DISTANCE = 2.5;
  96. var objetArray = [],
  97. animationQueue = [];
  98. var color1 = [0 / 255, 110 / 255, 255 / 255],
  99. color2 = [0 / 255, 255 / 255, 140 / 255];
  100. var bitmap = [];
  101. var BITMAP_SKIP = 1;
  102. var fov = 90;
  103. var cameraPos = [0, 0, 30];
  104. var cameraLookAt = [0, 0, 0];
  105. var viewHeight = 2 * Math.tan(THREE.Math.degToRad(fov / 2)) * cameraPos[2],
  106. viewWidth = viewHeight * SCREEN_ASPECT_RATIO;
  107. var mouse = new THREE.Vector3(10000, 10000, -1),
  108. mouseScaled = new THREE.Vector3(10000, 10000, -1);
  109. var frame = 0;
  110. function init() {
  111. // Global Variables
  112. container = document.getElementById("canvas-container-" + CANVAS_ID);
  113. canvas = document.getElementById("canvas-" + CANVAS_ID);
  114. canvas.addEventListener('mousemove', onDocumentMouseMove, false);
  115. loader = new THREE.JSONLoader();
  116. stats = new Stats();
  117. stats.domElement.classList.add("canvas-stats");
  118. stats.domElement.id = "canvas-stats-" + CANVAS_ID;
  119. /* If you are familiar with python and opencv
  120. you can use this python script to generate custom bitmaps
  121. --------------------
  122. https://git.io/vdBAu
  123. --------------------
  124. */
  125. var data = '#000000000000000000011110000000000000000000' +
  126. '#000000000000000011111111110000000000000000' +
  127. '#000000000000001111111111111100000000000000' +
  128. '#000000000000011111111111111110000000000000' +
  129. '#000000000000111111111111111111000000000000' +
  130. '#000000000001111111111111111111100000000000' +
  131. '#000000000011111111111111111111110000000000' +
  132. '#000000000011111111111111111111110000000000' +
  133. '#000000000111111111111111111111111000000000' +
  134. '#000000000111111111111111111111111000000000' +
  135. '#000000001111111111111111111111111100000000' +
  136. '#000000001111111111111111111111111100000000' +
  137. '#000000001111111111111111111111111100000000' +
  138. '#000000001111111111111111111111111100000000' +
  139. '#000000001111111111111111111111111100000000' +
  140. '#000000000111111111111111111111111000000000' +
  141. '#000000000111111111111111111111111000000000' +
  142. '#000000000111111111111111111111111000000000' +
  143. '#000000000011111111111111111111110000000000' +
  144. '#000000000011111111111111111111110000000000' +
  145. '#000000000001111111111111111111100000000000' +
  146. '#000000000001111111111111111111100000000000' +
  147. '#000000000000111111111111111111000000000000' +
  148. '#000000000000111111111111111110000000000000' +
  149. '#000000000000011111111111111110000000000000' +
  150. '#000000000000001111111111111100000000000000' +
  151. '#000000000000001111111111111100000000000000' +
  152. '#000000000000001111111111111000000000000000' +
  153. '#000000000000000111111111111000000000000000' +
  154. '#000000000000000111111111111000000000000000' +
  155. '#000000000000000111111111111000000000000000' +
  156. '#000000000000000111111111111000000000000000' +
  157. '#000000000000000011111111110000000000000000' +
  158. '#000000000000000010000000010000000000000000' +
  159. '#000000000000000011111111110000000000000000' +
  160. '#000000000000000010000000010000000000000000' +
  161. '#000000000000000011111111110000000000000000' +
  162. '#000000000000000010000000010000000000000000' +
  163. '#000000000000000011111111110000000000000000' +
  164. '#000000000000000000100001000000000000000000' +
  165. '#000000000000000000110011000000000000000000' +
  166. '#000000000000000000011110000000000000000000';
  167. for (var i = 0; i < data.length; i++) {
  168. if (data[i] == '#') {
  169. bitmap.push([]);
  170. } else {
  171. bitmap[bitmap.length - 1].push(data[i] - '0');
  172. }
  173. }
  174. container.appendChild(stats.domElement);
  175. // Renderer
  176. renderer = new THREE.WebGLRenderer({
  177. alpha: true,
  178. antialias: true,
  179. canvas: canvas,
  180. });
  181. renderer.setClearColor(0x212121, 0);
  182. renderer.setPixelRatio(window.devicePixelRatio);
  183. renderer.shadowMap.enabled = true;
  184. renderer.shadowMap.type = THREE.PCFSoftShadowMap;
  185. renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
  186. // Camera and Controls
  187. camera = new THREE.PerspectiveCamera(fov, SCREEN_ASPECT_RATIO, 0.1, 1000);
  188. // camera = new THREE.OrthographicCamera(-viewWidth, viewWidth, viewHeight, -viewHeight, 1, 300);
  189. camera.position.set(cameraPos[0], cameraPos[1], cameraPos[2]);
  190. camera.lookAt(new THREE.Vector3(cameraLookAt[0], cameraLookAt[1], cameraLookAt[2]));
  191. raycaster = new THREE.Raycaster();
  192. // controls = new THREE.OrbitControls(camera);
  193. // controls.rotateSpeed = 2.0;
  194. // controls.zoomSpeed = 2.0;
  195. // controls.enableZoom = true;
  196. // controls.enablePan = true;
  197. // controls.dampingFactor = 0.2;
  198. // controls.addEventListener('change', render);
  199. //Scene
  200. scene = new THREE.Scene();
  201. //Lights
  202. // Making Object Array
  203. var xOffset = -bitmap[0].length / (BITMAP_SKIP * 2);
  204. var yOffset = bitmap.length / (BITMAP_SKIP * 2);
  205. for (var i = 0; i < bitmap.length; i += BITMAP_SKIP) {
  206. for (var j = 0; j < bitmap[i].length; j += BITMAP_SKIP) {
  207. if (bitmap[i][j] == 1) {
  208. planeGeometry = new THREE.PlaneGeometry(1, 1);
  209. var circleGeometry = new THREE.CircleGeometry(1, 5);
  210. var frac = i / bitmap.length;
  211. // Materials
  212. planeMaterial = new THREE.MeshBasicMaterial({
  213. color: new THREE.Color(
  214. color1[0] * frac + color2[0] * (1 - frac),
  215. color1[1] * frac + color2[1] * (1 - frac),
  216. color1[2] * frac + color2[2] * (1 - frac)
  217. ),
  218. transparent: true,
  219. opacity: THREE.Math.randFloat(0.4, 0.6),
  220. side: THREE.DoubleSide
  221. });
  222. var circleMaterial = new THREE.MeshBasicMaterial({
  223. color: new THREE.Color(1, 1, 1),
  224. transparent: true,
  225. opacity: THREE.Math.randFloat(0.8, 1),
  226. side: THREE.DoubleSide
  227. });
  228. // Mesh
  229. planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);
  230. planeMesh.position.set(xOffset + j / BITMAP_SKIP, yOffset - i / BITMAP_SKIP, 0);
  231. var randWidth = THREE.Math.randFloat(0.6, 1.2);
  232. var randHeight = randWidth
  233. planeMesh.scale.set(randWidth, randHeight, 1);
  234. scene.add(planeMesh);
  235. objetArray.push([planeMesh, false]);
  236. circleMesh = new THREE.Mesh(circleGeometry, circleMaterial);
  237. circleMesh.position.set(xOffset + j / BITMAP_SKIP + THREE.Math.randFloat(-0.5, 0.5), yOffset - i / BITMAP_SKIP + THREE.Math.randFloat(-0.5, 0.5), 0.1);
  238. var randRadius = THREE.Math.randFloat(0.05, 0.1);
  239. circleMesh.scale.set(randRadius, randRadius, 1);
  240. scene.add(circleMesh);
  241. objetArray.push([circleMesh, false]);
  242. }
  243. }
  244. }
  245. //Geometry
  246. // Materials
  247. // Mesh
  248. // Helpers
  249. //Add Stuff to Scene
  250. }
  251. function animate() {
  252. requestAnimationFrame(animate);
  253. render();
  254. stats.update();
  255. // controls.update();
  256. frame++;
  257. }
  258. function render() {
  259. while (animationQueue.length > 0) {
  260. var obj_index = animationQueue[0][0];
  261. var ani_frame = animationQueue[0][1];
  262. if (ani_frame > ANIMATION_FRAME_LENGTH) {
  263. objetArray[obj_index][1] = false;
  264. animationQueue.shift();
  265. } else {
  266. break;
  267. }
  268. }
  269. for (var i = 0; i < objetArray.length; i++) {
  270. var obj = objetArray[i][0];
  271. var isAnimating = objetArray[i][1];
  272. if (isAnimating == false) {
  273. var px = obj.position.x;
  274. var py = obj.position.y;
  275. var dist = Math.sqrt(Math.pow(px - mouseScaled.x, 2) + Math.pow(py - mouseScaled.y, 2));
  276. if (dist < INTERACT_DISTANCE) {
  277. var startPosVector = obj.position.clone();
  278. var mouseRepelVector = new THREE.Vector3().subVectors(startPosVector, mouseScaled).multiplyScalar(THREE.Math.randFloat(INTERACT_DISTANCE + 0.5, INTERACT_DISTANCE + 2) - dist);
  279. var endPosVector = new THREE.Vector3().addVectors(startPosVector, mouseRepelVector);
  280. animationQueue.push([i, 0, startPosVector, endPosVector]);
  281. objetArray[i][1] = true;
  282. }
  283. }
  284. }
  285. for (var i = 0; i < animationQueue.length; i++) {
  286. var obj = objetArray[animationQueue[i][0]][0];
  287. var ani_frame = animationQueue[i][1];
  288. var startPosVector = animationQueue[i][2];
  289. var endPosVector = animationQueue[i][3];
  290. var curPosVector = new THREE.Vector3();
  291. var frac = 1 - Math.abs(ani_frame - (ANIMATION_FRAME_LENGTH / 2)) / (ANIMATION_FRAME_LENGTH / 2);
  292. frac = easeOutQuad(frac);
  293. curPosVector.lerpVectors(startPosVector, endPosVector, frac);
  294. obj.position.x = curPosVector.x;
  295. obj.position.y = curPosVector.y;
  296. obj.position.z = curPosVector.z;
  297. animationQueue[i][1] += 1;
  298. }
  299. mouse = new THREE.Vector3(10000, 10000, -2);
  300. mouseScaled = new THREE.Vector3(10000, 10000, -2);
  301. renderer.render(scene, camera);
  302. }
  303. function onWindowResize() {
  304. SCREEN_HEIGHT = Math.min(window.innerWidth, window.innerHeight);
  305. SCREEN_WIDTH = SCREEN_HEIGHT;
  306. SCREEN_ASPECT_RATIO = SCREEN_WIDTH / SCREEN_HEIGHT;
  307. camera.aspect = SCREEN_ASPECT_RATIO;
  308. camera.updateProjectionMatrix();
  309. renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
  310. console.log(SCREEN_WIDTH + "x" + SCREEN_HEIGHT)
  311. }
  312. function onDocumentMouseMove(event) {
  313. var rect = canvas.getBoundingClientRect();
  314. mouse.x = event.clientX - rect.left;
  315. mouse.y = event.clientY - rect.top;
  316. mouseScaled.x = mouse.x * viewWidth / SCREEN_WIDTH - viewWidth / 2;
  317. mouseScaled.y = -mouse.y * viewHeight / SCREEN_HEIGHT + viewHeight / 2;
  318. }
  319. function sigmoid(t) {
  320. return 1 / (1 + Math.pow(Math.E, -t));
  321. }
  322. // no easing, no acceleration
  323. function linear(t) {
  324. return t;
  325. }
  326. // accelerating from zero velocity
  327. function easeInQuad(t) {
  328. return t * t;
  329. }
  330. // decelerating to zero velocity
  331. function easeOutQuad(t) {
  332. return t * (2 - t);
  333. }
  334. // acceleration until halfway, then deceleration
  335. function easeInOutQuad(t) {
  336. return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
  337. }
  338. // accelerating from zero velocity
  339. function easeInCubic(t) {
  340. return t * t * t;
  341. }
  342. // decelerating to zero velocity
  343. function easeOutCubic(t) {
  344. return (--t) * t * t + 1;
  345. }
  346. // acceleration until halfway, then deceleration
  347. function easeInOutCubic(t) {
  348. return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
  349. }
  350. // accelerating from zero velocity
  351. function easeInQuart(t) {
  352. return t * t * t * t;
  353. }
  354. // decelerating to zero velocity
  355. function easeOutQuart(t) {
  356. return 1 - (--t) * t * t * t;
  357. }
  358. // acceleration until halfway, then deceleration
  359. function easeInOutQuart(t) {
  360. return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t;
  361. }
  362. // accelerating from zero velocity
  363. function easeInQuint(t) {
  364. return t * t * t * t * t;
  365. }
  366. // decelerating to zero velocity
  367. function easeOutQuint(t) {
  368. return 1 + (--t) * t * t * t * t;
  369. }
  370. // acceleration until halfway, then deceleration
  371. function easeInOutQuint(t) {
  372. return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t;
  373. }
  374. //Event Handlers
  375. window.addEventListener("resize", onWindowResize);
  376. init();
  377. animate();
  378. }
  379. ThreeJSCanvas(1);
  380. </script>
  381. <script>
  382. function noticeBtn() {
  383. window.location.href="../platlive/notice/index"
  384. }
  385. </script>
  386. </body>
  387. <!-- layui -->
  388. <script type="text/javascript" src="static/home/lib/layui/layui.all.js"></script>
  389. </html>