Except where otherwise noted, the contents of this document are Copyright 2012 Marty Stepp, Jessica Miller, Victoria Kirst and Roy McElmurry IV. All rights reserved. Any redistribution, reproduction, transmission, or storage of part or all of the contents in any form is prohibited without the author's expressed written permission.
Scriptaculous : a JavaScript library, built on top of Prototype, that adds:
<script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/scriptaculous.js" type="text/javascript"></script>
.js files to your project folder
(appearing)
(disappearing)
(Getting attention)
Click effects above
element.effectName(); // for most effects
new Effect.Name(element or id); // for some effects
$("sidebar").shake();
var buttons = $$("results > button");
for (var i = 0; i < buttons.length; i++) {
buttons[i].fade();
}
element.effectName({
option: value,
option: value,
...
});
$("my_element").pulsate({
duration: 2.0,
pulses: 2
});
{})delay,
direction,
duration,
fps,
from,
queue,
sync,
to,
transition
$("my_element").fade({
duration: 3.0,
afterFinish: displayMessage
});
function displayMessage(effect) {
alert(effect.element + " is done fading now!");
}
beforeStart,
beforeUpdate,
afterUpdate,
afterFinish
afterFinish event fires once the effect is done animating
Effect object as its parameter
element, options, currentFrame, startOn, finishOnShrink) are technically "parallel effects", so to access the modified element, you write effect.effects[0].element rather than just effect.elementScriptaculous provides several objects for supporting drag-and-drop functionality:
Sortable : a list of items that can be reorderedDraggable : an element that can be draggedDraggables : manages all Draggable objects on the pageDroppables : elements on which a Draggable can be droppedSortable
Sortable.create(element or id of list, {
options
});
ul, ol) as being able to be dragged into any orderDraggables and Droppablestag,
only,
overlap,
constraint,
containment,
format,
handle,
hoverclass,
ghosting,
dropOnEmpty,
scroll,
scrollSensitivity,
scrollSpeed,
tree,
treeTag
Sortable.destroy on itSortable demo<ol id="simpsons"> <li id="simpsons_0">Homer</li> <li id="simpsons_1">Marge</li> <li id="simpsons_2">Bart</li> <li id="simpsons_3">Lisa</li> <li id="simpsons_4">Maggie</li> </ol>
document.observe("dom:loaded", function() {
Sortable.create("simpsons");
});
Sortable list events| event | description |
|---|---|
onChange
|
when any list item hovers over a new position while dragging |
onUpdate
|
when a list item is dropped into a new position (more useful) |
document.observe("dom:loaded", function() {
Sortable.create("simpsons", {
onUpdate: listUpdate
});
});
onChange handler function receives the dragging element as its parameteronUpdate handler function receives the list as its parameterSortable list events example
document.observe("dom:loaded", function() {
Sortable.create("simpsons", {
onUpdate: listUpdate
});
});
function listUpdate(list) {
// can do anything I want here; effects, an Ajax request, etc.
list.shake();
}
Sortable eventsonUpdate to work, each li must have an id of the form listID_index
<ol id="simpsons"> <li id="simpsons_0">Homer</li> <li id="simpsons_1">Marge</li> <li id="simpsons_2">Bart</li> <li id="simpsons_3">Lisa</li> <li id="simpsons_4">Maggie</li> </ol>
Sortable.create on the list again to fix itDraggable
new Draggable(element or id, {
options
});
handle,
revert,
snap,
zindex,
constraint,
ghosting,
starteffect,
reverteffect,
endeffect
onStart,
onDrag,
onEnd
Draggable object, and the mouse eventDraggable example
<div id="draggabledemo1">Draggable demo 1. Default options.</div>
<div id="draggabledemo2">Draggable demo 2.
{snap: [40,40], revert: true}</div>
document.observe("dom:loaded", function() {
new Draggable("draggabledemo1");
new Draggable("draggabledemo2", {revert: true, snap: [40, 40]});
});
Draggable demo 1.
Draggable demo 2.Draggablesdrags,
observers
register,
unregister,
activate,
deactivate,
updateDrag,
endDrag,
keyPress,
addObserver,
removeObserver,
notify
Droppables
Droppables.add(element or id, {
options
});
accept,
containment,
hoverclass,
overlap,
greedy
onHover,
onDrop
Draggable, the Droppable, and the event<img id="shirt" src="images/shirt.png" alt="shirt" /> <img id="cup" src="images/cup.png" alt="cup" /> <div id="droptarget"></div>
document.observe("dom:loaded", function() {
new Draggable("shirt");
new Draggable("cup");
Droppables.add("droptarget", {onDrop: productDrop});
});
function productDrop(drag, drop, event) {
alert("You dropped " + drag.id);
}
Scriptaculous offers ways to make a text box that auto-completes based on prefix strings *:
Autocompleter.Local :
auto-completes from an array of choices
Ajax.Autocompleter :
fetches and displays list of choices using Ajax
* (won't be necessary once HTML5 datalist element is well supported)
Autocompleter.Local
new Autocompleter.Local(
element or id of text box,
element or id of div to show completions,
array of choices,
{ options }
);
div to store the auto-completion matches
ul that you can style with CSSclass of selected{ }
choices, partialSearch, fullSearch, partialChars, ignoreCaseAutocompleter.Local demo<input id="bands70s" size="40" type="text" /> <div id="bandlistarea"></div>
document.observe("dom:loaded", function() {
new Autocompleter.Local(
"bands70s",
"bandlistarea",
["ABBA", "AC/DC", "Aerosmith", "America", "Bay City Rollers", ...],
{}
);
});
<input id="bands70s" size="40" type="text" /> <div id="bandlistarea"></div>
#bandlistarea {
border: 2px solid gray;
}
/* 'selected' class is given to the autocomplete item currently chosen */
#bandlistarea .selected {
background-color: pink;
}
Ajax.Autocompleter
new Ajax.Autocompleter(
element or id of text box,
element or id of div to show completions,
url,
{ options }
);
ul with li elements in itparamName,
tokens,
frequency,
minChars,
indicator,
updateElement,
afterUpdateElement,
callback,
parameters
Ajax.InPlaceEditor
new Ajax.InPlaceEditor(element or id,
url,
{ options }
);
Makes it possible to edit the content of elements on a page "live" and send the edits back to the server using Ajax.
okButton,
okText,
cancelLink,
cancelText,
savingText,
clickToEditText,
formId,
externalControl,
rows,
onComplete,
onFailure,
cols,
size,
highlightcolor,
highlightendcolor,
formClassName,
hoverClassName,
loadTextURL,
loadingText,
callback,
submitOnBlur,
ajaxOptions
onEnterHover,
onLeaveHover,
onEnterEditMode,
onLeaveEditMode
Ajax.InPlaceCollectionEditor
new Ajax.InPlaceCollectionEditor(element or id, url, {
collection: array of choices,
options
});
Ajax.InPlaceEditor that gives a collection of choicescollection option whose value is an array of strings to choose fromAjax.InPlaceEditor| method | description |
|---|---|
Sound.play("url");
|
plays a sound/music file |
Sound.disable();
|
stops future sounds from playing (doesn't mute any sound in progress) |
Sound.enable();
|
re-enables sounds to be playable after a call to Sound.disable()
|
Sound.play("music/java_rap.mp3");
Sound.play("music/wazzaaaaaap.wav");
Sound.play('', {replace: true});
new Control.Slider("id of knob", "id of track", {options});
Builder - convenience class to replace document.createElement :
var img = Builder.node("img", {
src: "images/lolcat.jpg",
width: 100, height: 100,
alt: "I can haz Scriptaculous?"
});
$("main").appendChild(img);