123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- Button = (function () {
- var scene,
- camera,
- renderer,
- button,
- theButtonThe;
- function makeAScene() {
- scene = new THREE.Scene();
- camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
- renderer = new THREE.WebGLRenderer({
- antialias: true,
- transparent: true,
- alpha: true
- });
- renderer.setSize(window.innerWidth - 15, window.innerHeight - 15);
- var container = document.querySelector('.container');
- container.appendChild(renderer.domElement);
- var buttonOuterGeometry = new THREE.TorusGeometry(5, .5, 25, 50),
- buttonMaterial = new THREE.MeshPhongMaterial({
- color: 0xec6115,
- emissive: 0xbd411e,
- shininess: 60
- }),
- extrudeSettings = {
- amount: 0.485,
- bevelEnabled: false
- };
- button = new THREE.Mesh(buttonOuterGeometry, buttonMaterial);
- var buttonInnerShape = new THREE.Shape();
- buttonInnerShape.moveTo(5, 0);
- buttonInnerShape.absarc(0, 0, 5, 0, Math.PI * 2, false),
- holePath1 = new THREE.Path(),
- holePath2 = new THREE.Path(),
- holePath3 = new THREE.Path(),
- holePath4 = new THREE.Path();
- holePath1.moveTo(-1, 1.5);
- holePath1.absarc(-1.53, 1.5, .5, 0, Math.PI * 2, true);
- buttonInnerShape.holes.push(holePath1);
- holePath2.moveTo(-2, 1.5);
- holePath2.absarc(-1.5, -1.5, .5, 0, Math.PI * 2, true);
- buttonInnerShape.holes.push(holePath2);
- holePath3.moveTo(2, -1.5);
- holePath3.absarc(1.5, -1.5, .5, 0, Math.PI * 2, true);
- buttonInnerShape.holes.push(holePath3);
- holePath4.moveTo(2, 1.5);
- holePath4.absarc(1.5, 1.5, .5, 0, Math.PI * 2, true);
- buttonInnerShape.holes.push(holePath4);
- var buttonInnerGeometry = new THREE.ExtrudeGeometry(buttonInnerShape, extrudeSettings),
- buttonInner = new THREE.Mesh(buttonInnerGeometry, buttonMaterial);
- button.add(buttonInner);
- button.rotation.set(Math.PI / 2, 0, 0);
- scene.add(button);
- var light = new THREE.DirectionalLight(0xffffff, 1);
- light.position.set(0, 1, 0);
- scene.add(light);
- var cameraZPosition = window.innerHeight < 500 ? 10 : 17;
- camera.position.set(0, 0, cameraZPosition);
- render();
- }
- function update() {
- renderer.setSize(window.innerWidth - 15, window.innerHeight - 15);
- camera.aspect = window.innerWidth / window.innerHeight;
- camera.updateProjectionMatrix();
- var cameraZPosition = window.innerHeight < 500 ? 10 : 17;
- camera.position.set(0, 0, cameraZPosition);
- }
- function render() {
- requestAnimationFrame(render);
- renderer.render(scene, camera);
- };
- function itsAButton() {
- this.className += ' click';
- theButtonThe.removeEventListener('mousedown', itsAButton);
- var click = new Audio('click.mp3');
- click.volume = .3;
- click.preload = true;
- click.play();
- var flip = new Audio('whoosh.mp3');
- flip.volume = .75;
- flip.preload = true;
- flip.play();
- var currentRotation = button.rotation.x;
- TweenMax.to(button.rotation, 8, {
- x: currentRotation + (Math.PI * 2), ease: Power2.easeInOut, onComplete: function () {
- theButtonThe.removeAttribute('class');
- theButtonThe.addEventListener('mousedown', itsAButton);
- }
- });
- }
- function init() {
- theButtonThe = document.getElementsByTagName('button')[0];
- theButtonThe.addEventListener('mousedown', itsAButton);
- window.addEventListener('resize', update);
- makeAScene();
- }
- document.addEventListener("DOMContentLoaded", init);
- })();
|