Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
EmberConf 2017 Ember VR
Search
Kelly Selden
March 29, 2017
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EmberConf 2017 Ember VR
Kelly Selden
March 29, 2017
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
How to make the Groovebox
asonas
2
2.5k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
It's Worth the Effort
3n
188
29k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
The Invisible Side of Design
smashingmag
301
52k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Transcript
Ember + VR: Bring Your A-Frame Kelly Selden @kellyselden
<a-scene> <a-sphere position="0 1.25 -1" radius="1.25" color="#EF2D5E"> </a-sphere> <a-box position="-1
0.5 1" rotation="0 45 0" width="1" height="1" depth="1" color="#4CC3D9"> </a-box> <a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"> </a-cylinder> <a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"> </a-plane> <a-sky color="#ECECEC"></a-sky> <a-entity position="0 0 3.8"> <a-camera></a-camera> </a-entity> </a-scene> A-Frame
None
<a-scene> <a-sphere position="0 1.25 -1" radius="1.25" color="#EF2D5E"> </a-sphere> <a-box position="-1
0.5 1" rotation="0 45 0" width="1" height="1" depth="1" color="#4CC3D9"> </a-box> <a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"> </a-cylinder> <a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"> </a-plane> <a-sky color="#ECECEC"></a-sky> <a-entity position="0 0 3.8"> <a-camera></a-camera> </a-entity> </a-scene> A-Frame + Ember
A-Frame + Ember + Components {{a-scene}} {{a-sphere position="0 1.25 -1"
radius="1.25" color=“#EF2D5E”}} {{a-box position="-1 0.5 1" rotation="0 45 0" width="1" height="1" depth="1" color="#4CC3D9"}} {{a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"}} {{a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"}} {{a-sky color="#ECECEC"}} {{#a-entity position="0 0 3.8"}} {{a-camera}} {{/a-entity}} {{/a-scene}}
Routing
None
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Templates
None
Macros and Helpers
ember-concurrency • Updating query params • Sending location data •
Scheduling something to run
Social Browsing
Side Note: API Synchronization •Last resort is to maintain a
copied API •Initializers register components? •Solution: Broccoli!
Thank you! github.com/kellyselden/ember-a-frame To mingle with your neighbors in VR:
kellyselden.github.io/ember-a-frame or bit.ly/2nYBYtR