operators-particles.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /* eslint-disable */
  2. require('./three')
  3. var runAnimation = true
  4. function init(dom) {
  5. var SEPARATION = 80,
  6. AMOUNTX = 100,
  7. AMOUNTY = 30;
  8. var container, stats;
  9. var camera, scene, renderer;
  10. var particles, particle, count = 0;
  11. var mouseX = 0,
  12. mouseY = -190;
  13. var windowHalfX = window.innerWidth;
  14. var windowHalfY = 300;
  15. function init(container) {
  16. console.log(container)
  17. // container = $("#operaters .hero");
  18. camera = new THREE.PerspectiveCamera(50, window.innerWidth / 300, 10, 5000);
  19. camera.position.z = 900;
  20. scene = new THREE.Scene();
  21. particles = new Array();
  22. var PI2 = Math.PI * 2;
  23. var material = new THREE.SpriteCanvasMaterial({
  24. color: 0x696969,
  25. program: function (context) {
  26. context.beginPath();
  27. context.arc(0, 0, 0.5, 0, PI2, true);
  28. context.fill();
  29. }
  30. });
  31. var i = 0;
  32. for (var ix = 0; ix < AMOUNTX; ix++) {
  33. for (var iy = 0; iy < AMOUNTY; iy++) {
  34. particle = particles[i++] = new THREE.Sprite(material);
  35. particle.position.x = ix * SEPARATION - ((AMOUNTX * SEPARATION) / 2);
  36. particle.position.z = iy * SEPARATION - ((AMOUNTY * SEPARATION) / 2);
  37. scene.add(particle);
  38. }
  39. }
  40. renderer = new THREE.CanvasRenderer();
  41. renderer.setPixelRatio(window.devicePixelRatio);
  42. renderer.setSize(window.innerWidth, 300);
  43. renderer.setClearColor(0xffffff);
  44. container.appendChild(renderer.domElement)
  45. }
  46. function onWindowResize() {
  47. windowHalfX = window.innerWidth;
  48. windowHalfY = 300;
  49. camera.aspect = window.innerWidth / 300;
  50. camera.updateProjectionMatrix();
  51. renderer.setSize(window.innerWidth, 300);
  52. }
  53. function animate() {
  54. if (runAnimation) {
  55. requestAnimationFrame(animate);
  56. render();
  57. }
  58. }
  59. function render() {
  60. camera.position.x += (mouseX - camera.position.x) * .05;
  61. camera.position.y += (-mouseY - camera.position.y) * .05;
  62. camera.lookAt(scene.position);
  63. var i = 0;
  64. for (var ix = 0; ix < AMOUNTX; ix++) {
  65. for (var iy = 0; iy < AMOUNTY; iy++) {
  66. particle = particles[i++];
  67. particle.position.y = (Math.sin((ix + count) * 0.3) * 50) +
  68. (Math.sin((iy + count) * 0.5) * 10);
  69. particle.scale.x = particle.scale.y = (Math.sin((ix + count) * 0.3) + 1) * 4 +
  70. (Math.sin((iy + count) * 0.5) + 1) * 3;
  71. }
  72. }
  73. renderer.render(scene, camera);
  74. count += 0.1;
  75. }
  76. init(dom);
  77. animate();
  78. window.addEventListener('resize', onWindowResize)
  79. window.___resize = onWindowResize
  80. }
  81. export default {
  82. init(dom) {
  83. runAnimation = true;
  84. init(dom)
  85. },
  86. destroyed() {
  87. runAnimation = false;
  88. window.removeEventListener('resize', window.___resize)
  89. }
  90. }
  91. /* eslint-enable */