jquery loves developers - swdc2009

192
jQuery <3 Developers

Upload: remy-sharp

Post on 08-May-2015

2.578 views

Category:

Technology


0 download

DESCRIPTION

Covering jQuery and the details behind the features. Also covers the new 1.3 features.

TRANSCRIPT

Page 1: jQuery Loves Developers - SWDC2009

jQuery <3 Developers

Page 2: jQuery Loves Developers - SWDC2009

Hi, I'm Remy.

Enjoys: JavaScript & dressing (sort of) like Mr T.

Page 3: jQuery Loves Developers - SWDC2009

Unobtrusive JavaScript

Page 4: jQuery Loves Developers - SWDC2009

Worst example

<a href="javascript:window.open(

'help.html')">Help</a>

Page 5: jQuery Loves Developers - SWDC2009

Just as bad

<a href="#" onclick="window.open(

'help.html')">Help</a>

Page 6: jQuery Loves Developers - SWDC2009

"Why? Doesn't everyone have

JavaScript turned on?"

Page 7: jQuery Loves Developers - SWDC2009

No!

Page 8: jQuery Loves Developers - SWDC2009

No!

Corporatepolicies

Network scriptstripping proxies

NoScript Firefoxplugin

Page 9: jQuery Loves Developers - SWDC2009

No!

Corporatepolicies

Network scriptstripping proxies

NoScript Firefoxplugin

Page 10: jQuery Loves Developers - SWDC2009
Page 11: jQuery Loves Developers - SWDC2009

Unobtrusive way

<a href="help.html">Help</a>

DOM scripting way

Page 12: jQuery Loves Developers - SWDC2009

Graceful Degradation

Progressive Enhancement

????? What's the difference ????

Page 13: jQuery Loves Developers - SWDC2009

GD vs. PE

Page 14: jQuery Loves Developers - SWDC2009

GD vs. PE• Old way

• Top down

• All singing all dancing first

• Add fail cases

• Run out of time, you're caught out

Page 15: jQuery Loves Developers - SWDC2009

GD vs. PE• Old way

• Top down

• All singing all dancing first

• Add fail cases

• Run out of time, you're caught out

• New way

• Bottom up

• Layered development

• No environment assumptions

• Works by default

Page 16: jQuery Loves Developers - SWDC2009

"Find something, do something to it"

Page 17: jQuery Loves Developers - SWDC2009

Why jQuery?

Page 18: jQuery Loves Developers - SWDC2009

Why a DOM Library?

Page 19: jQuery Loves Developers - SWDC2009

• Cross browser quirks handled for you

• DOM scripting made easy

Page 20: jQuery Loves Developers - SWDC2009

Less donkey work

More problem solving

Page 21: jQuery Loves Developers - SWDC2009

Less donkey work

More problem solving

Page 22: jQuery Loves Developers - SWDC2009

What's so special about jQuery?

Page 23: jQuery Loves Developers - SWDC2009

It's pretty popular...

Page 24: jQuery Loves Developers - SWDC2009

Community!

Page 25: jQuery Loves Developers - SWDC2009

Community

Page 26: jQuery Loves Developers - SWDC2009

Community

APIsdocs.jquery.comapi.jquery.com

visualjquery.com

Page 27: jQuery Loves Developers - SWDC2009

Community

APIsdocs.jquery.comapi.jquery.com

visualjquery.com

Blogs, tutorials, screencasts,plugins, development sprints

Page 28: jQuery Loves Developers - SWDC2009

Community

APIsdocs.jquery.comapi.jquery.com

visualjquery.com

Blogs, tutorials, screencasts,plugins, development sprints

Google Groupsjquery-enjquery-dev

jquery-ui-enjquery-ui-devjquery-a11y

Page 29: jQuery Loves Developers - SWDC2009

Community

APIsdocs.jquery.comapi.jquery.com

visualjquery.com

Blogs, tutorials, screencasts,plugins, development sprints

Google Groupsjquery-enjquery-dev

jquery-ui-enjquery-ui-devjquery-a11y

Twitter@jquery

@jquerysites@jqueryui

Page 30: jQuery Loves Developers - SWDC2009

Community

APIsdocs.jquery.comapi.jquery.com

visualjquery.com

Blogs, tutorials, screencasts,plugins, development sprints

Google Groupsjquery-enjquery-dev

jquery-ui-enjquery-ui-devjquery-a11y

IRC channelfreenode.net/#jquery

Twitter@jquery

@jquerysites@jqueryui

Page 31: jQuery Loves Developers - SWDC2009
Page 32: jQuery Loves Developers - SWDC2009

What's in the box?

Page 33: jQuery Loves Developers - SWDC2009

What's in the box?

• Selector engine: Sizzle

• DOM manipulation

• Events

• Effects

• Ajax

• Utilities

Page 34: jQuery Loves Developers - SWDC2009

Sizzlejs.com

New in

1.3

Page 35: jQuery Loves Developers - SWDC2009

The bling function

Page 36: jQuery Loves Developers - SWDC2009

$ == jQuery

Page 37: jQuery Loves Developers - SWDC2009

$('div')

==

jQuery('div')

Page 38: jQuery Loves Developers - SWDC2009

$

• Selectors - CSS1, CSS2 and some CSS3

Page 39: jQuery Loves Developers - SWDC2009

$

• Selectors - CSS1, CSS2 and some CSS3

• DOM elements

Page 40: jQuery Loves Developers - SWDC2009

$

• Selectors - CSS1, CSS2 and some CSS3

• DOM elements

• Raw HTML

Page 41: jQuery Loves Developers - SWDC2009

$

• Selectors - CSS1, CSS2 and some CSS3

• DOM elements

• Raw HTML

• "Ready" functions

Page 42: jQuery Loves Developers - SWDC2009
Page 43: jQuery Loves Developers - SWDC2009

$('ul')

Page 44: jQuery Loves Developers - SWDC2009

$('ul')

$(document.createElement('ul'))

Page 45: jQuery Loves Developers - SWDC2009

$('ul')

$(document.createElement('ul'))

$('<ul />') or $('<ul></ul>')

Page 46: jQuery Loves Developers - SWDC2009

jQuery(document).ready(fn)

$(document).ready(fn)

$(fn)

jQuery(function ($) { // private instance of $})

Page 47: jQuery Loves Developers - SWDC2009

jQuery(document).ready(fn)

$(document).ready(fn)

$(fn)

jQuery(function ($) { // private instance of $})

Page 48: jQuery Loves Developers - SWDC2009

jQuery(document).ready(fn)

$(document).ready(fn)

$(fn)

jQuery(function ($) { // private instance of $})

Page 49: jQuery Loves Developers - SWDC2009

jQuery(document).ready(fn)

$(document).ready(fn)

$(fn)

jQuery(function ($) { // private instance of $})

Page 50: jQuery Loves Developers - SWDC2009

Custom Selectors

• :visible, :hidden

• :first, :last

• :even, :odd

• :animated

• :has

Page 51: jQuery Loves Developers - SWDC2009

$('li a')

<ul>

<li>1st</li>

<li>2nd</li>

<li><a href="#third">3rd</a></li>

<li>4th</li>

</ul>

Page 52: jQuery Loves Developers - SWDC2009

$('li a')

<ul>

<li>1st</li>

<li>2nd</li>

<li><a href="#third">3rd</a></li>

<li>4th</li>

</ul>

Page 53: jQuery Loves Developers - SWDC2009

$('li:has(a)')

<ul>

<li>1st</li>

<li>2nd</li>

<li><a href="#third">3rd</a></li>

<li>4th</li>

</ul>

Page 54: jQuery Loves Developers - SWDC2009

$('li:has(a)')

<ul>

<li>1st</li>

<li>2nd</li>

<li><a href="#third">3rd</a></li>

<li>4th</li>

</ul>

Page 55: jQuery Loves Developers - SWDC2009

Selector Attributes

• selector, e.g. $('li').find('a').selector == 'li a'

• context

New in

1.3

Page 56: jQuery Loves Developers - SWDC2009

Extending Selectors

$.extend($.expr[':'], { visible : function(elem){ return elem.offsetWidth > 0 || elem.offsetHeight > 0; }});

Page 57: jQuery Loves Developers - SWDC2009

Extending Selectors

$.extend($.expr[':'], { visible : function(elem){ return elem.offsetWidth > 0 || elem.offsetHeight > 0; }});

Page 58: jQuery Loves Developers - SWDC2009

Extending Selectors

$.extend($.expr[':'], { visible : function(elem){ return elem.offsetWidth > 0 || elem.offsetHeight > 0; }});

Page 59: jQuery Loves Developers - SWDC2009

Extending Selectors

$.extend($.expr[':'], { visible : function(elem){ return elem.offsetWidth > 0 || elem.offsetHeight > 0; }});

Page 60: jQuery Loves Developers - SWDC2009

Behind the Scenes

• getElementById

• getElementsByTagName

• querySelectorAll

• getElementsByClassName

Page 61: jQuery Loves Developers - SWDC2009

$ returns a new object

Page 62: jQuery Loves Developers - SWDC2009

...that also has array like properties.

Page 63: jQuery Loves Developers - SWDC2009

>>> $('li')[li, li]

>>> $('li')[0]<li>

>>> $('li').length2

Page 64: jQuery Loves Developers - SWDC2009

Does Selector Exist?

if ( $(expr).length ) { // do stuff}

Page 65: jQuery Loves Developers - SWDC2009

Plugin Architecture

$.fn.myPlugin = function () { return this.each(function () { // do stuff });}

Page 66: jQuery Loves Developers - SWDC2009

Plugin Architecture

$.fn.myPlugin = function () { return this.each(function () { // do stuff });}

Page 67: jQuery Loves Developers - SWDC2009

Plugin Architecture

$.fn.myPlugin = function () { return this.each(function () { // do stuff });}

Page 68: jQuery Loves Developers - SWDC2009

Plugin Architecture

$.fn.myPlugin = function () { return this.each(function () { // do stuff });}

Page 69: jQuery Loves Developers - SWDC2009

Chaining

Page 70: jQuery Loves Developers - SWDC2009

Common

$('a').addClass('ready').click(fn);

Page 71: jQuery Loves Developers - SWDC2009

Common

$('a').addClass('ready').click(fn);

Page 72: jQuery Loves Developers - SWDC2009

Common

$('a').addClass('ready').click(fn);

Page 73: jQuery Loves Developers - SWDC2009

Common

$('a').addClass('ready').click(fn);

Page 74: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 75: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 76: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 77: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 78: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 79: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 80: jQuery Loves Developers - SWDC2009

$img = $('<img />') .addClass('loading') .load(function () { $img.removeClass('loading'); }) .error(function () { $img.addClass('error') .attr('src', 'empty.gif'); }) .attr('src', 'somebigimage.jpg') .appendTo('body');

One line!

Page 81: jQuery Loves Developers - SWDC2009

DOM Navigation

Page 82: jQuery Loves Developers - SWDC2009

Finding

Page 83: jQuery Loves Developers - SWDC2009

$('li a')

$('li').find('a')

$('a').next()

$('a').parent()

$('a').parents('ul')

Page 84: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a')

Page 85: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a')

Page 86: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a').next()

Page 87: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a').next()

Page 88: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a').next().parent()

Page 89: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a').next().parent()

Page 90: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a').parents('ul')

Page 91: jQuery Loves Developers - SWDC2009

<ul> <li> <a href="#first">1st</a> <img src="one.gif"> </li> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('li a').parents('ul')

Page 92: jQuery Loves Developers - SWDC2009

.closest('expr')New in

1.3

<ul> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

Page 93: jQuery Loves Developers - SWDC2009

New in

1.3

<ul> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('img').closest('ul')

Page 94: jQuery Loves Developers - SWDC2009

New in

1.3

<ul> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('img').closest('ul')

Page 95: jQuery Loves Developers - SWDC2009

New in

1.3

<ul> <li> <a href="#second">2nd</a> <img src="two.gif"> </li></ul>

$('img').closest('ul')

Page 96: jQuery Loves Developers - SWDC2009

Filtering

Page 97: jQuery Loves Developers - SWDC2009

$('li').filter(':first')

$('a').not(':has(span)')

$('a').slice(1, 1)

Page 98: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li')

Page 99: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li')

Page 100: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li').filter(':has(img)')

Page 101: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li').filter(':has(img)')

Page 102: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li').not(':first')

Page 103: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li').not(':first')

Page 104: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li').slice(0, 2)

Page 105: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><li> <a href="#second">2nd</a> <img src="two.gif"></li><li> <a href="#third">3rd</a></li>

$('li').slice(0, 2)

Page 106: jQuery Loves Developers - SWDC2009

Manipulation

Page 107: jQuery Loves Developers - SWDC2009

• append, appendTo, prepend, prependTo

• after, before, insertAfter, insertBefore

• wrap, wrapAll, wrapInner

• empty, remove

• clone

• html, text

Page 108: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li>

$('li').append('<span />')

Page 109: jQuery Loves Developers - SWDC2009

$('li').append('<span />')

<li> <a href="#first">1st</a> <img src="one.gif"> <span></span></li>

Page 110: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li>

$('li').prepend('<span />')

Page 111: jQuery Loves Developers - SWDC2009

$('li').prepend('<span />')

<li> <span></span> <a href="#first">1st</a> <img src="one.gif"></li>

Page 112: jQuery Loves Developers - SWDC2009

<li> <a href="#first">1st</a> <img src="one.gif"></li><img id="foo" src="foo.gif">

$('#foo').prependTo('li')

Page 113: jQuery Loves Developers - SWDC2009

$('#foo').prependTo('li')

<li> <img id="foo" src="foo.gif"> <a href="#first">1st</a> <img src="one.gif"></li>

Page 114: jQuery Loves Developers - SWDC2009

$('ul').wrap('<div />')

<ul> <li><a href="#first">1st</a></li> </ul><ul> <li><a href="#second">2nd</a></li> </ul>

Page 115: jQuery Loves Developers - SWDC2009

$('ul').wrap('<div />')<div><ul> <li><a href="#first">1st</a></li> </ul></div><div><ul> <li><a href="#second">2nd</a></li> </ul></div>

Page 116: jQuery Loves Developers - SWDC2009

$('ul').wrapAll('<div />')<div><ul> <li><a href="#first">1st</a></li> </ul><ul> <li><a href="#second">2nd</a></li> </ul></div>

Page 117: jQuery Loves Developers - SWDC2009

$('li').wrapInner('<em />')<ul> <li><em><a href="#first">1st</a></em></li></ul><ul> <li><em><a href="#second">2nd</a></em></li></ul>

Page 118: jQuery Loves Developers - SWDC2009

Style Manipulation

Page 119: jQuery Loves Developers - SWDC2009

Key/Value Pair

// get$('input').attr('title');

$('a').css('font-weight');

// set$('input').attr('title', 'Name');

$('a').css('font-weight', 'bold');

Page 120: jQuery Loves Developers - SWDC2009

Changing Multiples

$('input').attr({ 'title' : 'Your username', 'value' : 'Enter your username' });

$('a').css({ 'font-weight' : 'bold', 'background-color' : '#c00' });

Page 121: jQuery Loves Developers - SWDC2009

$('a').attr({ class : 'home', href : '/home' });

<a href="/logout" class="logout">Go</a>

Page 122: jQuery Loves Developers - SWDC2009

$('a').attr({ class : 'home', href : '/home' });

<a href="/home" class="home">Go</a>

Page 123: jQuery Loves Developers - SWDC2009

Dimensions & Position

Page 124: jQuery Loves Developers - SWDC2009

• width, height

• innerHeight, innerWidth

• outerHeight, outerWidth (pass true to include margins)

• scrollLeft, scrollTop

• offset, position (includes margin)

Page 125: jQuery Loves Developers - SWDC2009

Events

Page 126: jQuery Loves Developers - SWDC2009

bind, trigger & unbind

Page 127: jQuery Loves Developers - SWDC2009

bind, trigger & unbind...and .one(fn) (which unbinds on trigger)

Page 128: jQuery Loves Developers - SWDC2009

$('a').bind('click', function () {

alert('you clicked');

return false;

}).trigger('click');

Page 129: jQuery Loves Developers - SWDC2009

$('a').bind('click', function () {

alert('you clicked');

return false;

}).trigger('click');

Page 130: jQuery Loves Developers - SWDC2009

$('a').bind('click', function () {

alert('you clicked');

return false;

}).trigger('click');

Page 131: jQuery Loves Developers - SWDC2009

$('a').bind('click', function () {

alert('you clicked');

return false;

}).trigger('click');

Page 132: jQuery Loves Developers - SWDC2009

$('a').bind('click', function () {

alert('you clicked');

return false;

}).trigger('click');

Page 133: jQuery Loves Developers - SWDC2009

$('a').bind('click', function (event, msg) {

alert('you clicked: ' + msg);

return false;

}).trigger('click', ['ok']);

Page 134: jQuery Loves Developers - SWDC2009

$('a').bind('click', function (event, msg) {

alert('you clicked: ' + msg);

return false;

}).trigger('click', ['ok']);

Page 135: jQuery Loves Developers - SWDC2009

$('a').bind('click', function (event, msg) {

alert('you clicked: ' + msg);

return false;

}).trigger('click', ['ok']);

Page 136: jQuery Loves Developers - SWDC2009

$('a').bind('click', function (event, msg) {

alert('you clicked: ' + msg);

return false;

}).trigger('click', ['ok']);

Page 137: jQuery Loves Developers - SWDC2009

$('a').bind('click', function (event, msg) {

alert('you clicked: ' + msg);

return false;

}).trigger('click', ['ok']);

Page 138: jQuery Loves Developers - SWDC2009
Page 139: jQuery Loves Developers - SWDC2009

blurchange *clickdblclickerrorfocushoverkeydownkeypresskeyuploadmousedown

mousemovemouseoutmouseovermouseupreadyresizescrollselectsubmittoggleunload

Page 140: jQuery Loves Developers - SWDC2009

triggerHandler(event, data)

Page 141: jQuery Loves Developers - SWDC2009

triggerHandler(event, data)

Watch out: doesn't chain!

Page 142: jQuery Loves Developers - SWDC2009

New in

1.3

Event object

• preventDefault()

• stopPropagation()

• return false (preventDefault + stopPropagation)

• stopImmediatePropagation()

Page 143: jQuery Loves Developers - SWDC2009

Live Events

New in

1.3

Page 144: jQuery Loves Developers - SWDC2009

$('.remove').live('click',function(){

$(this).closest('tr').remove();

});

Page 147: jQuery Loves Developers - SWDC2009

Live support

• Supported: click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup

• Not supported: blur, focus, mouseenter, mouseleave, change, submit

Page 148: jQuery Loves Developers - SWDC2009

Effects

Page 149: jQuery Loves Developers - SWDC2009

Built in Effects

• show, hide, toggle

• fadeIn, fadeOut, fadeTo

• slideUp, slideDown, slideToggle

• animate - roll your own!

Page 150: jQuery Loves Developers - SWDC2009

http://remysharp.com/demo/hide-with-margins.html

Page 151: jQuery Loves Developers - SWDC2009

http://remysharp.com/demo/hide-with-margins.html

Page 152: jQuery Loves Developers - SWDC2009

.animate(prop, speed, callback)

Page 153: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 154: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 155: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 156: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 157: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 158: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 159: jQuery Loves Developers - SWDC2009

$('#block').animate({ 'opacity' : 0.5, 'width' : '-=20px', 'height' : '-=20px', 'top' : (winHeight - 168) + 'px'}, 400, 'easeOutBounce').animate({ 'foo' : 1 // acts as a pause}, 500).animate({ 'left' : '150%' // fly off screen}, 500, function () { $(this).hide();});

Page 160: jQuery Loves Developers - SWDC2009

http://remysharp.com/demo/animate.html

Page 161: jQuery Loves Developers - SWDC2009

http://remysharp.com/demo/animate.html

Page 162: jQuery Loves Developers - SWDC2009

Bespoke Steps

$('div').queue(function () {

$(this).removeClass('newcolor');

// pass back to sequence

$(this).dequeue();

});

Page 163: jQuery Loves Developers - SWDC2009

Bespoke Steps

$('div').queue(function () {

$(this).removeClass('newcolor');

// pass back to sequence

$(this).dequeue();

});

Page 164: jQuery Loves Developers - SWDC2009

Bespoke Steps

$('div').queue(function () {

$(this).removeClass('newcolor');

// pass back to sequence

$(this).dequeue();

});

Page 165: jQuery Loves Developers - SWDC2009

$.fx.off = true

New in

1.3

Page 166: jQuery Loves Developers - SWDC2009

Enchantment

Page 167: jQuery Loves Developers - SWDC2009

Enchantment

http://jqueryui.com/docs/Effects/Methods

Page 168: jQuery Loves Developers - SWDC2009

UI Effects Core

• addClass, removeClass, toggleClass

• show, hide, toggle

• animate

Page 171: jQuery Loves Developers - SWDC2009

Ajax

Page 172: jQuery Loves Developers - SWDC2009

Über Easy Ajax

$(expr).load - squirt into expr

$('#info').load('info.html #links li');

Page 173: jQuery Loves Developers - SWDC2009

Über Easy Ajax

$(expr).load - squirt into expr

$('#info').load('info.html #links li');

Page 174: jQuery Loves Developers - SWDC2009

Über Easy Ajax

$(expr).load - squirt into expr

$('#info').load('info.html #links li');

Page 175: jQuery Loves Developers - SWDC2009

Über Easy Ajax

$(expr).load - squirt into expr

$('#info').load('info.html #links li');

Page 176: jQuery Loves Developers - SWDC2009

Über Easy Ajax

$(expr).load - squirt into expr

$('#info').load('info.html #links li');

Page 177: jQuery Loves Developers - SWDC2009

Ajax Shortcuts

• $.get

• $.post

• $.getScript

• $.getJSON

Page 178: jQuery Loves Developers - SWDC2009

$.ajax

• Full control

• Global setup available

• Much easier to debug

• http://docs.jquery.com/Ajax/jQuery.ajax#options

Page 179: jQuery Loves Developers - SWDC2009

$.ajax({ url: 'http://www.twitter.com/statuses/user_timeline/rem.json?callback=?', dataType: 'jsonp', cache: false, success: function(data) { // this == XMLHttpRequest object $('#status').html(data[0].text); }, error: function(xhr, status, e) { // debugging enabled console.log(arguments); }});

Page 180: jQuery Loves Developers - SWDC2009

$.ajax({ url: 'http://www.twitter.com/statuses/user_timeline/rem.json?callback=?', dataType: 'jsonp', cache: false, success: function(data) { // this == XMLHttpRequest object $('#status').html(data[0].text); }, error: function(xhr, status, e) { // debugging enabled console.log(arguments); }});

Page 181: jQuery Loves Developers - SWDC2009

$.ajax({ url: 'http://www.twitter.com/statuses/user_timeline/rem.json?callback=?', dataType: 'jsonp', cache: false, success: function(data) { // this == XMLHttpRequest object $('#status').html(data[0].text); }, error: function(xhr, status, e) { // debugging enabled console.log(arguments); }});

Page 182: jQuery Loves Developers - SWDC2009

$.ajax({ url: 'http://www.twitter.com/statuses/user_timeline/rem.json?callback=?', dataType: 'jsonp', cache: false, success: function(data) { // this == XMLHttpRequest object $('#status').html(data[0].text); }, error: function(xhr, status, e) { // debugging enabled console.log(arguments); }});

Page 183: jQuery Loves Developers - SWDC2009

$.ajax({ url: 'http://www.twitter.com/statuses/user_timeline/rem.json?callback=?', dataType: 'jsonp', cache: false, success: function(data) { // this == XMLHttpRequest object $('#status').html(data[0].text); }, error: function(xhr, status, e) { // debugging enabled console.log(arguments); }});

Page 184: jQuery Loves Developers - SWDC2009

Server Side Tip!

// sent headers include:

X-Requested-With = XMLHttpRequest

Page 185: jQuery Loves Developers - SWDC2009

Utilities

Page 186: jQuery Loves Developers - SWDC2009

Tests, Iterators & Operations

• $.inArray, $.isFunction, $.isArray,

• $.each, $.extend, $.grep, $.map

• $.merge, $.unique, $.makeArray

Page 187: jQuery Loves Developers - SWDC2009

Good Guys Come Last

1. Include other library first (that uses $)

2. Then include jQuery, then:

$.noConflict();

// or

$j = $.noConflict();

Page 188: jQuery Loves Developers - SWDC2009

Sniffing

Page 189: jQuery Loves Developers - SWDC2009

Old Way

• $.browser

• $.browser.version

Page 190: jQuery Loves Developers - SWDC2009

$.support

New in

1.3

Page 191: jQuery Loves Developers - SWDC2009

$.support

New in

1.3

boxModelcssFloathrefNormalizedhtmlSerialize

leadingWhitespacenoCloneEventobjectAll

opacity scriptEvalstyletbody

Page 192: jQuery Loves Developers - SWDC2009

Photos by

charliebrewer, manfrys, magw21, abbydonkrafts, nicora, leecullivan, jaako, thetruthabout, artisandhu, sundazed, otterfreak, frf_kmeron, m a t t l o g e l i n , d a n d i f f e n d a l e , mwagner, stanrandom, anniewong, legin, kerotab

Remy Sharp @[email protected]

http://remysharp.comhttp://jqueryfordesigners.com http://full-frontal.org