How to add custom A-Frame elements into the player
Getting started
In order to add custom 3-D elements you will need to use aframe
API in order to bind callbacks to the player as follows.
1.Create player
var config = { plugins: { aframe: { resources: [ {src: "//aframe.io/releases/1.0.4/aframe.min.js",debug:"//aframe.io/releases/1.0.4/aframe.js", type: "text/javascript", async: true}, {src: "${paths.plugins}aframe/Aframe.min.js", debug: "${paths.plugins}aframe/Aframe.js", type: "text/javascript", async: true}, {src: "${paths.plugins}aframe/Aframe.min.css", debug: "${paths.plugins}aframe/Aframe.css", type: "text/css", async: true} ], data: { rotation: "0 270 0", strict: true }, mouse: { speed: 2 } } } }; akamai.amp.AMP.create("#akamai-media-player", config);
2.Create an aframe entity and its handle-events
component
var thebox = document.createElement('a-box'); thebox.innerHTML = `<a-box position='1.5 0.25 5.5' color='#00B5B5' width='2' height='2' depth='2' src = 'play.jpg' handle-events> <a-animation attribute='rotation' begin='click' repeat='0' to='0 360 0'></a-animation></a-box>`
3.Append it to aframe's scene within the player
var scene = document.getElementsByTagName("a-scene"); scene[0].appendChild(thebox); #### 4. Register `handle-events` custom componentAFRAME.registerComponent('handle-events', { init: function () { var el = this.el; //el.addEventListener("mouseenter", function () { el.setAttribute("color", "#24CAFF"); }); el.addEventListener("mouseleave", function () { el.setAttribute("color", "#EF2D5E"); }); el.addEventListener("click", function () { if (!amp.getPaused()) { // amp is player instance amp.pause() } else { amp.play() } }); } }); 5. Put everything in place.
Once the player is being created you can now create and register custom components. See the following full sample.
var config = { plugins: { aframe: { resources: [ {src: "//aframe.io/releases/1.0.4/aframe.min.js",debug:"//aframe.io/releases/1.0.4/aframe.js", type: "text/javascript", async: true}, {src: "${paths.plugins}aframe/Aframe.min.js", debug: "${paths.plugins}aframe/Aframe.js", type: "text/javascript", async: true}, {src: "${paths.plugins}aframe/Aframe.min.css", debug: "${paths.plugins}aframe/Aframe.css", type: "text/css", async: true} ], data: { rotation: "0 270 0", strict: true }, mouse: { speed: 2 } } } }; var amp; akamai.amp.AMP.create("#akamai-media-player", config).then(function (player) { amp = player; amp.once("canplaythrough",addCustomElement); }); function addCustomElement(){ var scene = document.getElementsByTagName("a-scene"); AFRAME.registerComponent("handle-events", { init: function () { var el = this.el; // <a-box> el.addEventListener("mouseenter", function () { el.setAttribute("color", "#24CAFF"); }); el.addEventListener("mouseleave", function () { el.setAttribute("color", "#EF2D5E"); }); el.addEventListener("click", function () { if (!amp.getPaused()) { // amp is player instance amp.pause() } else { amp.play() } }); } }); var text = document.createElement("a-text"); text.setAttribute("value", "Move the camera sight at the figure to pause/play"); text.setAttribute("rotation", "0 15 0"); text.setAttribute("width", "8"); var camera = document.createElement("a-camera"); camera.innerHTML = "<a-cursor id='cursor' material='color: cyan; shader: flat' geometry='primitive: ring; radiusInner: 0.09; radiusOuter: 0.11'> </a-cursor>; var thebox = document.createElement("a-box"); thebox.innerHTML = `<a-box position='1.5 0.25 5.5' color='#00B5B5' width='2' height='2' depth='2' src = 'play.jpg' handle-events> <a-animation attribute='rotation' begin='click' repeat='0' to='0 360 0'></a-animation></a-box>` scene[0].appendChild(text); scene[0].appendChild(thebox); scene[0].appendChild(camera); }