UNPKG

@rawify/vector3

Version:

The RAW JavaScript 3D Vector library

177 lines (140 loc) 5.18 kB
'use strict'; var smallStar = vectors.star(5, 0.38, Math.PI / 2).scale(50), largeStar = vectors.star(6).scale(250), events = (function () { 'use strict'; var addEvent = ('addEventListener' in document)? 'addEventListener': 'attachEvent', removeEvent = ('removeEventListener' in document)? 'removeEventListener': 'detachEvent', elements = [], targets = []; if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length >>> 0; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) if (from in this && this[from] === elt) return from; return -1; }; } function add (element, type, listener, useCapture) { if (!(element instanceof window.Element) && element !== window.document) { return; } var target = targets[elements.indexOf(element)]; if (!target) { target = { events: {} } target.events[type] = []; elements.push(element); targets.push(target); } if (typeof target.events[type] !== 'array') { target.events[type] = []; } target.events[type].push(listener); return element[addEvent](type, listener, useCapture || false); } function remove (element, type, listener, useCapture) { var i, target = targets(elements.indexOf(element)); if (index === -1) { return; } if (target && target.events && target.events[type]) { if (listener === 'all') { for (i = 0; i < target.events[type].length; i++) { element[removeEvent](type, target.events[type][i], useCapture || false); target.events[type].splice(i, 1); } } else { for (i = 0; i < target.events[type].length; i++) { if (target.events[type][i] === listener) { element[removeEvent](type, target.events[type][i], useCapture || false); target.events[type].splice(i, 1); } } } } } function removeAll (element) { var type, target = targets(elements.indexOf(element)); for (type in target.events) { if (target.events.hasOwnProperty(type)) { events.remove(target, type, 'all'); } } } return { add: add, remove: remove, removeAll: removeAll }; }()), demoElement = document.createElement('div'), canvas = vectors.canvas, supportsTouch = 'createTouch' in document, pageX = 0, pageY = 0, interval = 2000; function animScale (progress) { progress = (progress % interval) / interval; return 1 + 0.5 * Math.sin(progress * 2 * Math.PI); } function animRot (Progress) { return 4 * Math.PI * pageX / window.innerWidth; } function animTrans (progress) { progress = (progress % interval) / interval; return Vector(pageX - canvas.element.offsetLeft + 30 * (Math.sin(progress * 2 * Math.PI)), pageY - canvas.element.offsetTop + 30 * (Math.cos(progress * 2 * Math.PI)) ); } function demo () { var smallStar = vectors.star(5, 0.38, 0.5 * Math.PI).scale(50), largeStar = smallStar.scale(5); smallStar .animate({ translation: largeStar.translate(Vector(300, 300)), duration: 2000 }) .interpolate(50) .animate({ scale: [1, 5], rotation: [0, 2 * Math.PI], duration: 3000 }) .interpolate(100); } function setXY (event) { if (supportsTouch) { event = event.touches[0]; } pageX = event.pageX; pageY = event.pageY; } events.add(document, 'DOMContentLoaded', function (event) { var pre = document.createElement('pre'); pre.appendChild(document.createTextNode(demo.toString())); demoElement.appendChild(pre); demoElement.style.position = 'absolute'; demoElement.style.left = '0px'; demoElement.style.top = '0px'; demoElement.style.cursor = 'pointer'; document.body.appendChild(demoElement); events.add(document, 'mousemove', setXY); events.add(document, 'touchmove', setXY); events.add(demoElement, 'click', demo); events.add(demoElement, 'touchStart', demo); smallStar.animate({ scale: animScale, rotation: animRot, translation: animTrans }); });