define('main', function(require, exports, module) {
var Engine = require('famous/core/Engine');
var Surface = require('famous/core/Surface');
var Transform = require('famous/core/Transform');
var Modifier = require('famous/core/Modifier');
var StateModifier = require('famous/modifiers/StateModifier');
var Draggable = require('famous/modifiers/Draggable');
var TransitionableTransform = require('famous/transitions/TransitionableTransform');
var mainContext = Engine.createContext();
var transTransform = new TransitionableTransform();
transTransform.set(Transform.translate(100, 0, 0));
var surface = new Surface({
size: [300, 100],
properties: {
backgroundColor: 'rgba(255,0,0,0.1)',
cursor: 'pointer'
}
});
var dragSurface = new Surface({
content: 'Drag Me',
size: [100, 100],
properties: {
backgroundColor: 'rgba(0,0,0,0.1)',
cursor: 'pointer'
}
});
var draggable = new Draggable();
var modifier = new Modifier({
origin: [0, 0],
align: [0, 0],
transform: transTransform
});
function getTransform() {
var pos = draggable.getPosition();
surface.setContent('Draggable Position is ' + pos);
transTransform.setTranslate([pos[0] + 100, pos[1], 0]);
return transTransform.get();
}
draggable.subscribe(dragSurface);
surface._eventOutput.subscribe(draggable.eventOutput);
surface.on('updating', function(e) {
var pos = e.position;
surface.setContent('Draggable Position is ' + pos);
transTransform.setTranslate([pos[0] + 100, pos[1], 0]);
});
surface.on('startedEnd', function(e) {
modifier.transformFrom(getTransform);
});
surface.on('endedEnd', function(e) {
modifier.transformFrom(transTransform);
});
surface.setContent('Not Draggable');
mainContext.add(modifier).add(surface);
mainContext.add(draggable).add(dragSurface);
draggable.on('update', function(e) {
this.eventOutput.emit('updating', {
position: e.position
});
});
draggable.on('end', function(e) {
var finalPos = [0, 0];
var duration = 2000
this.eventOutput.emit('startedEnd', {
position: e.position,
finalPos: finalPos
});
this.setPosition(finalPos, {
duration: duration
}, function() {
this.eventOutput.emit('endedEnd', {
position: this.position
});
}.bind(this));
});
});
// Start Main App
require(['main']);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://requirejs.org/docs/release/2.1.16/minified/require.js"></script>
<script src="http://code.famo.us/lib/requestAnimationFrame.js"></script>
<script src="http://code.famo.us/lib/classList.js"></script>
<script src="http://code.famo.us/lib/functionPrototypeBind.js"></script>
<link rel="stylesheet" type="text/css" href="http://code.famo.us/famous/0.3.5/famous.css" />
<script src="http://code.famo.us/famous/0.3.5/famous.min.js"></script>