Clicking the link above will animate the square below with these properties:
With an easing of "Expo.inout", at a speed of 2. Clicking the link twice will return it to its original state.
#animationsquare {
margin: 2em;
display: block;
position: relative;
width: 50px;
height: 50px;
background: #049bd4;
}
<p><a id="animationtrigger" href="#">Click Me!</a></p>
<p>Clicking the link above will animate the square below with these properties:</p>
<ol>
<li>width: 200px</li>
<li>height: 80px</li>
<li>top: 20px</li>
<li>left: 300px</li>
<li>opacity: 50%</li>
</ol>
<p>With an easing of "Expo.inout". Clicking the link twice will return it to its original state.</p>
<div id="animationsquare"><!-- :) --></div>
var Animate = function() {
/* Animation Call
*
* optional parameters:
* from (calculated if not present)
* tween (normal by default, can be one of several)
* speed (0.5 by default)
*
* Sample:
* Flow.Animate({
* node : foo,
* from : {
* height : 200
* },
* to : {
* height : 0
* },
* tween : 'Bounce.easeInOut',
* }, 2).start();
*
*/
var node = document.getById("animationtrigger");
var ani;
node.addEventListener("click", function(e) {
var target = document.getById("animationsquare");
this.toggleClass("active");
if (this.hasClass("active")) {
if (ani) {
ani.stop();
}
ani = Flow.Animate({
node : target,
to : {
width : 200,
height : 80,
top : 20,
left : 300,
opacity : 50
},
tween : "Expo.easeInOut"
}, 2).start();
} else {
if (ani) {
ani.stop();
}
ani = Flow.Animate({
node : target,
to : {
width : 50,
height : 50,
top : 0,
left : 0,
opacity : 100
},
tween : "Bounce.easeOut"
}, 2).start();
}
e.preventDefault();
}, false);
};
// Bind on DOMContentLoaded
window.addEventListener("DOMContentLoaded", Animate, false);
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
/* Some basic styles so our demo doesn't look all n00b */
.accordion *.toggle {
display: block;
cursor: pointer;
}
.accordion {
margin: 0 auto;
width: 300px;
border: 3px solid #049bd4;
}
.accordion .accordion {
width: auto;
}
.accordion li {
padding: 1em;
background: #c3dbea;
border-top: 1px solid #fff;
height: 50px;
overflow: auto;
}
.accordion li:first-child {
border: none;
}
.accordion li.open, .accordion li.open * {
background: #fff;
color: #049bd4;
font-weight: bold;
}
.accordion li.open ul, .accordion li.open ul * {
background: #c3dbea;
border-color: #c3dbea;
font-weight: normal;
}
.accordion li.open ul li.open, .accordion li.open ul li.open * {
background: #fff;
color: #049bd4;
font-weight: bold;
}
<ul class="accordion">
<li>
<h3 class="toggle">Foo</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</li>
<li id="test">
<h3 class="toggle">Bar</h3>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</li>
<li class="open">
<h3 class="toggle">Fubar</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</li>
<li>
<h3 class="toggle">Lindsay</h3>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</li>
<li>
<h3 class="toggle">Chuck</h3>
<ul class="accordion">
<li>
<h3 class="toggle">Foo</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</li>
<li>
<h3 class="toggle">Bar</h3>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</li>
<li class="open">
<h3 class="toggle">Fubar</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</li>
<li>
<h3 class="toggle">Lindsay</h3>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</li>
<li>
<h3 class="toggle">Chuck</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</li>
</ul>
</li>
</ul>
var Accordion = function() {
/* Accordion Call
*
* optional parameters:
* autofold (true by default, can be false)
* event ('click' by default, can be any event)
* speed (0.5 by default)
* tween (normal by default)
* property ('height' by default, can be 'width')
*
* Sample:
* new Flow.Fx.Accordion(document.getById('foo'), {
* autofold : false,
* event : 'mouseover',
* speed : 0.5,
* tween : 'Expo.easeInOut',
* property : 'height'
* });
*
*/
new Flow.Fx.Accordion(document.getByClass("accordion"), {
tween : "Elastic.out",
speed : 1
});
};
// Bind on DOMContentLoaded
window.addEventListener("DOMContentLoaded", Accordion, false);
Clicking the link above will generate a list of words injected via JSON. There's no point to this paragraph, other than to give spacing between the link and the generated list. Hi mom.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
ul.generated {
list-style: square;
margin-left: 2em;
}
<h3>Click below to load JSON:</h3>
<p><a id="ajaxtrigger" href="#">Click Me!</a></p>
<p>Clicking the link above will generate a list of words injected via JSON. There's no point to this paragraph, other than to give spacing between the link and the generated list. Hi mom.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<div id="ajaxhook"><!-- :) --></div>
var Ajax = function() {
/* Ajax Call
*
* Sample:
* var req = new HttpRequest();
* req.open("POST", "foo.xml", true); // parameters
* req.addEventListener("success", function() {
* console.log(this);
* }, false); // can also listen for "error"
* req.send(); // Send request
* property ('height' by default, can be 'width')
*
*/
var trigger = document.getById("ajaxtrigger");
trigger.addEventListener("click", function(e) {
// Initialize
var req = new HttpRequest();
// Parameters
req.open("GET", "fake.json", true);
// Add success listener (optional)
req.addEventListener("success", function() {
var json = eval("(" + this.responseText + ")");
// Grab our hook
var target = document.getById("ajaxhook");
// Inject a wrapper ul, make that our hook
target = target.setInnerHTML('<ul class="generated"></ul>');
// For each 'properties', inject a list item into our generated ul
json.properties.forEach(function(prop) {
target.setInnerHTML('<li>' + prop + '</li>', "append");
});
}, false);
// Add error listener (optional)
req.addEventListener("error", function() {
throw new Error(this.status);
}, false);
req.send();
// Return false on link
e.preventDefault();
}, false);
};
// Bind on DOMContentLoaded
window.addEventListener("DOMContentLoaded", Ajax, false);
/* Some basic styles so our demo doesn't look all n00b */
.dragdrop {
margin: 0 auto;
width: 300px;
border: 3px solid #049bd4;
list-style: none;
}
.dragdrop li {
padding: 1em;
background: #c3dbea;
border-top: 1px solid #fff;
}
.dragdrop li:first-child {
border: none;
}
<ul class="dragdrop">
<li>
<h3>Foo</h3>
</li>
<li>
<h3>Bar</h3>
</li>
<li>
<h3>Fubar</h3>
</li>
<li>
<h3>Lindsay</h3>
</li>
<li>
<h3>Chuck</h3>
</li>
</ul>
var Drag = function() {
/* Drag Call
*
* optional parameters:
* space (the amount of separation during dragging, 5px by default)
* speed (how fast to animate the separation, 0.1 by default)
* tween (animate separation using a custom tween, normal by default)
*
* Event Listeners:
* - ondragstart
* - ondragstop
* - ondelete
* - onmove
* - onmoveup
* - onmovedown
*
* Optional Calls:
* - setInnerHTML
* - appendChild
*
* Sample:
* var drag = new Flow.Fx.Drag(document.getById('foo'), {
* space : 30,
* speed : 1,
* tween : 'Expo.easeInOut',
* });
*
* // Omit "on"
* drag.addEventListener("delete", function() {
* alert(this);
* drag.setInnerHTML("<li>Foo</li>", "append");
* }, false);
*
*/
var drag = new Flow.Fx.Drag(document.getByClass("dragdrop")[0]);
drag.addEventListener("dragstart", function() {
console.log("dragstart");
}, false);
drag.addEventListener("dragstop", function() {
console.log("dragstop");
}, false);
drag.addEventListener("delete", function() {
console.log("delete");
drag.setInnerHTML("<li>Foo</li>", "append");
}, false);
};
// Bind on DOMContentLoaded
window.addEventListener("DOMContentLoaded", Drag, false);