(el, getCanvasSize)
| 11 | var LOADER_TITLE_CLASS = 'a-loader-title'; |
| 12 | |
| 13 | export function setup (el, getCanvasSize) { |
| 14 | sceneEl = el; |
| 15 | getSceneCanvasSize = getCanvasSize; |
| 16 | var loaderAttribute = sceneEl.hasAttribute(ATTR_NAME) ? styleParser.parse(sceneEl.getAttribute(ATTR_NAME)) : undefined; |
| 17 | var dotsColor = loaderAttribute && loaderAttribute.dotsColor || 'white'; |
| 18 | var backgroundColor = loaderAttribute && loaderAttribute.backgroundColor || '#24CAFF'; |
| 19 | var loaderEnabled = loaderAttribute === undefined || loaderAttribute.enabled === 'true' || loaderAttribute.enabled === undefined; // true default |
| 20 | var loaderScene; |
| 21 | var sphereGeometry; |
| 22 | var sphereMaterial; |
| 23 | var sphereMesh1; |
| 24 | var sphereMesh2; |
| 25 | var sphereMesh3; |
| 26 | var camera; |
| 27 | var timer; |
| 28 | var time; |
| 29 | var render; |
| 30 | |
| 31 | if (!loaderEnabled) { return; } |
| 32 | |
| 33 | // Setup Scene. |
| 34 | loaderScene = new THREE.Scene(); |
| 35 | sphereGeometry = new THREE.SphereGeometry(0.20, 36, 18, 0, 2 * Math.PI, 0, Math.PI); |
| 36 | sphereMaterial = new THREE.MeshBasicMaterial({color: dotsColor}); |
| 37 | sphereMesh1 = new THREE.Mesh(sphereGeometry, sphereMaterial); |
| 38 | sphereMesh2 = sphereMesh1.clone(); |
| 39 | sphereMesh3 = sphereMesh1.clone(); |
| 40 | camera = new THREE.PerspectiveCamera(80, window.innerWidth / window.innerHeight, 0.0005, 10000); |
| 41 | timer = new THREE.Timer(); |
| 42 | time = 0; |
| 43 | render = function () { |
| 44 | sceneEl.renderer.render(loaderScene, camera); |
| 45 | timer.update(); |
| 46 | time = timer.getElapsed() % 4; |
| 47 | sphereMesh1.visible = time >= 1; |
| 48 | sphereMesh2.visible = time >= 2; |
| 49 | sphereMesh3.visible = time >= 3; |
| 50 | }; |
| 51 | |
| 52 | loaderScene.background = new THREE.Color(backgroundColor); |
| 53 | loaderScene.add(camera); |
| 54 | sphereMesh1.position.set(-1, 0, -15); |
| 55 | sphereMesh2.position.set(0, 0, -15); |
| 56 | sphereMesh3.position.set(1, 0, -15); |
| 57 | camera.add(sphereMesh1); |
| 58 | camera.add(sphereMesh2); |
| 59 | camera.add(sphereMesh3); |
| 60 | setupTitle(); |
| 61 | |
| 62 | // Delay 200ms to avoid loader flashes. |
| 63 | setTimeout(function () { |
| 64 | if (sceneEl.hasLoaded) { return; } |
| 65 | resize(camera); |
| 66 | titleEl.style.display = 'block'; |
| 67 | window.addEventListener('resize', function () { resize(camera); }); |
| 68 | sceneEl.renderer.setAnimationLoop(render); |
| 69 | }, 200); |
| 70 | } |
no test coverage detected