<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nettuts+</title>
	
	<link>http://net.tutsplus.com</link>
	<description>Web Development &amp; Design Tutorials</description>
	<lastBuildDate>Sun, 14 Mar 2010 16:50:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/nettuts" /><feedburner:info uri="nettuts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://nettuts.com</link><url>http://envato.s3.amazonaws.com/rss_images/nettuts.jpg</url><title>NETTUTS</title></image><feedburner:emailServiceId>nettuts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>How to Build a Lava-Lamp Style Navigation Menu</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/D6XYq_6zWvM/</link>
		<comments>http://net.tutsplus.com/tutorials/html-css-techniques/how-to-build-a-lava-lamp-style-navigation-menu/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 20:17:50 +0000</pubDate>
		<dc:creator>Jeffrey Way</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[JavaScript & AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[navigation menu]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=10015</guid>
		<description><![CDATA[
A couple weeks ago, I created a screencast that demonstrated how to build a three-level navigation menu. In a response email, one of our readers requested a tutorial on how to build a lava-lamp style menu. Luckily, it&#8217;s quite a simple task, especially when using a JavaScript library. We&#8217;ll build one from scratch today.



  [...]]]></description>
			<content:encoded><![CDATA[<p>
A <a href="http://net.tutsplus.com/tutorials/design-tutorials/how-to-build-and-enhance-a-3-level-navigation-menu/">couple weeks ago</a>, I created a screencast that demonstrated how to build a three-level navigation menu. In a response email, one of our readers requested a tutorial on how to build a lava-lamp style menu. Luckily, it&#8217;s quite a simple task, especially when using a JavaScript library. We&#8217;ll build one from scratch today.
</p>
<p><span id="more-10015"></span></p>
<div class="tutorial_image">
   <img src="http://nettuts.s3.cdn.plus.org/600_spasticNav/screenshot.jpg" alt="Screenshot" />
</div>
<h2>Prefer a Screencast? </h2>
<div class="tutorial_image">
<embed src="http://blip.tv/play/gcMVgc2HOgA%2Em4v" type="application/x-shockwave-flash" width="600" height="390" allowscriptaccess="always" allowfullscreen="true"></embed>
</div>
<h2><span>Step 1</span> Create the Mark-up</h2>
<p>
Before we can create this neat functionality, we need a base from which to work from. In your favorite code editor, create an unordered list for your navigation, and import both jQuery and jQuery UI, via Google.
</p>
<pre name="code" class="html">
&lt;!DOCTYPE html>

&lt;html lang="en">
&lt;head>
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	&lt;title>SpasticNav  Plugin&lt;/title>
	&lt;link rel="stylesheet" href="css/style.css" type="text/css" media="screen" />
&lt;/head>
&lt;body>

&lt;div id="container">

	&lt;ul id="nav">
		&lt;li id="selected">&lt;a href="#">Home&lt;/a>&lt;/li>
		&lt;li>&lt;a href="#">About&lt;/a>&lt;/li>
		&lt;li>&lt;a href="#">Blog&lt;/a>&lt;/li>
		&lt;li>&lt;a href="#">More About My Portfolio&lt;/a>&lt;/li>
		&lt;li>&lt;a href="#">Contact&lt;/a>&lt;/li>
	&lt;/ul>

&lt;/div>

&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript">&lt;/script>	

&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js">&lt;/script>

&lt;/body>
&lt;/html>
</pre>
<p>Note how we gave an id of &#8220;selected&#8221; to the home page. This is fairly standard in most websites; it allows use to target the current page, and style that particular list item accordingly. </p>
<p>Next, we must decide how to best implement the lava-lamp functionality. To allow for reusability, we&#8217;ll package this little script into a plugin, and call it like: </p>
<pre name="code" class="js">
$('#nav').spasticNav();
</pre>
<p>
Since we&#8217;ve decided to build a plugin, let&#8217;s go ahead and create a new file for that script, and reference it in our mark-up. We&#8217;ll call it jquery.spasticNav.js.
</p>
<pre name="code" class="html">
&lt;script type="text/javascript" src="js/jquery.spasticNav.js">&lt;/script>	

&lt;script type="text/javascript">
$('#nav').spasticNav();
&lt;/script>
&lt;/body>
</pre>
<h2><span>Step 2</span> Beginning the Plugin</h2>
<p>
To reduce the number of global variables that we must create, as well as remove any possibilities of the $ symbol clashing with other JavaScript libraries, let&#8217;s wrap our plugin in a self-executing anonymous function.
</p>
<pre name="code" class="js">
(function($) {

})(jQuery);
</pre>
<p>Now, jQuery will be passed into our plugin, and will be represented via the $ symbol. </p>
<p>Next, it&#8217;s generally a best practice to give the users of the plugin as much flexibility as possible. As such, we&#8217;ll give them the option of passing in an object-literal when they call the plugin to override a handful of settings. As I see it, they should be able to: </p>
<ul>
<li>Set the amount of overlap for our little blob. This refers to how much the blob will exceed the height of the navigation menu. </li>
<li>Set the speed </li>
<li>Set a reset, which causes the blob to move back to the current page item (assuming that the user never clicks on a link) </li>
<li>Set the color of the blob. This can be accomplished with CSS, but it&#8217;s a nice convenience, nonetheless. </li>
<li>Set the easing option. </li>
</ul>
<p>Now, we&#8217;ll name our plugin, and make it equal to a function. $.fn is simply an alias for jquery.prototype. </p>
<pre name="code" class="js">
$.fn.spasticNav = function(options) {

};
</pre>
<p>Knowing that we&#8217;ll be allowing these overrides, we must make sure that we accept an &#8220;options&#8221; parameter. </p>
<h2><span>Step 3</span> Configuration Options </h2>
<p>Now that we&#8217;ve named our plugin, the next step is to create the configuration options. </p>
<pre name="code" class="js">
options = $.extend({
	overlap : 20,
	speed : 500,
	reset : 1500,
	color : '#0b2b61',
	easing : 'easeOutExpo'
}, options);
</pre>
<p>Above, we&#8217;re taking the options variable, setting some default properties and values, and then extending it with whatever (if anything) the user passes in when they call the plugin. That way, the options they pass will override our default settings. For example, if, when I call this plugin, I pass: </p>
<pre name="code" class="js">
$('#nav').spasticNav({
   speed : 2000,
   easing : 'easeOutElastic'
});
</pre>
<p>
Those two properties will override the default settings, while the remainder of the options will remain the same.
</p>
<h2><span>Step 4</span> Implementing the Functionality </h2>
<p>
Now, we&#8217;re ready to cycle through each element that was passed to this plugin, and implement the lava-lamp functionality. Remember, we can&#8217;t assume that the user is going to pass a single element to this plugin. They could, if they wanted, reference a class, which refers to multiple items that should receive this functionality. As such, we&#8217;ll call this.each to iterate over each item in the wrapped set.
</p>
<pre name="code" class="js">
return this.each(function() {

});
</pre>
<p>Within this function, we&#8217;ll create some variables. Not all of them will immediately have values, but since the JavaScript engine will hoist all variable names to the top of the function anyways (behind the scenes), it&#8217;s generally a best practice to declare them at the top, and then initialize them later. </p>
<pre name="code" class="js">
var nav = $(this),
	currentPageItem = $('#selected', nav),
	blob,
	reset;
</pre>
<ul>
<li><strong>nav : </strong> &#8220;Caches&#8221; <em>this</em>, wrapped in the jQuery object. </li>
<li><strong>currentPageItem : </strong> Contains the list item with an id of selected. We pass a second parameter to set the context to search from. That way, we don&#8217;t have to traverse the entire dom to find this element.  </li>
<li><strong>blob : </strong> For lack of a better word, this variable will reference the highlighter, that will follow our mouse when we hover over the menu. </li>
<li><strong>reset : </strong> This will store a reference to the setTimeout function that will create later. It&#8217;s needed in order to call clearTimeout. More on this soon&#8230; </li>
</ul>
<p>Now that we&#8217;ve declared/initialized our variables, let&#8217;s create the actual blob, so to speak. </p>
<pre name="code" class="js">
$('&lt;li id="blob">&lt;/li>').css({
	width : currentPageItem.outerWidth(),
	height : currentPageItem.outerHeight() + options.overlap,
	left : currentPageItem.position().left,
	top : currentPageItem.position().top - options.overlap / 2,
	backgroundColor : options.color
}).appendTo(this);
</pre>
<p>
The reason why we&#8217;re calling the CSS method, rather than simply adding a class, is because these values will vary depending on the current page&#8217;s list item. As such, we must use JavaScript to retrieve they values.
</p>
<ul>
<li><strong>width: </strong> Get the width of currentPageItem, including any borders and padding. </li>
<li><strong>height: </strong> Get the height of currentPageItem, including any borders and padding. Also, add the amount of overlap, to make the blob extend outside of the menu. </li>
<li><strong>left: </strong> Sets the left property of the blob equal to the left position of the currentPageItem. (We must set a positioning context in our CSS for this value to take effect.)</li>
<li><strong>top: </strong> Sets the top value as well, and vertically centers the blob. </li>
<li><strong>backgroundColor: </strong> Sets the background color. </li>
</ul>
<p>Finally, we append this new list item to <em>this</em>, or #nav. </p>
<p>Next, we need to store a reference to #blob. That way, we don&#8217;t have to search the DOM everytime we wish to access it. We declared the <em>blob</em> variable at the top of the function. Now, let&#8217;s initialize it. </p>
<pre name="code" class="js">
blob = $('#blob', nav);
</pre>
<h2><span>Step 5</span> The Hover Event </h2>
<p>
We must now &#8220;listen&#8221; for when the user hovers over one of the list items (excluding the blob of course) in our navigation menu. When they do, we&#8217;ll set the width and left properties of the blob equal to that of the currently hovered list item.
</p>
<pre name="code" class="js">
$('li:not(#blob)', nav).hover(function() {
	// mouse over
	clearTimeout(reset);
	blob.animate(
		{
			left : $(this).position().left,
			width : $(this).width()
		},
		{
			duration : options.speed,
			easing : options.easing,
			queue : false
		}
	);
}, function() {
	// mouse out
	reset = setTimeout(function() {
		blob.animate({
			width : currentPageItem.outerWidth(),
			left : currentPageItem.position().left
		}, options.speed)
	}, options.reset);

});
</pre>
<p>To summarize the script above&#8230; </p>
<ul>
<li>Get all list items &#8211; not the #blob &#8211; within the navigation menu, and when they&#8217;re hovered over, run a function. </li>
<li>Animate the blob, and set its left and width values equal to that of the hovered list item. </li>
<li>Pass an object literal as the second parameter of animate, and set the duration and easing equal to what we set in our configuration options. Set queue to false to prevent animation build-up. </li>
<li>When they mouse out, call setTimeOut, which will push the blob back to the current page item. If we didn&#8217;t do this, and the user didn&#8217;t click on a navigation link, the menu would show that they were on<br />
a different page entirely. This will, after a second or so, animate the blob back to currentPageItem. </li>
</ul>
<p>And that&#8217;s all there is to it! This is a super simple plugin. The next step is to style our navigation menu. </p>
<h2><span>Step 6</span> Styling the Menu </h2>
<p>Without any styling, our menu should look similar to this: </p>
<div class="tutorial_image">
   <img src="http://nettuts.s3.cdn.plus.org/600_spasticNav/unstyled.png" alt="Unstyled mark-up" />
</div>
<p>Let&#8217;s first style the &#8220;nav&#8221; ul. Open your style.css file, and add: </p>
<pre name="code" class="css">
#nav {
	position: relative;
	background: #292929;
	float: left;
}
</pre>
<div class="tutorial_image">
   <img src="http://nettuts.s3.cdn.plus.org/600_spasticNav/two-nav.png" alt="Styling the navigation menu" />
</div>
<p>
Next, we&#8217;ll style each list item.
</p>
<pre name="code" class="css">
#nav li {
	float: left;
	list-style: none;
	border-right: 1px solid #4a4a4a;
	border-left: 1px solid black;
}
</pre>
<p>This simply floats each list item to the left, and adds a border to each side. </p>
<div class="tutorial_image">
   <img src="http://nettuts.s3.cdn.plus.org/600_spasticNav/three-navli.png" alt="Styling the list items" />
</div>
<p>Moving along, we next must style the anchor tags within our navigation menu. </p>
<pre name="code" class="css">
#nav li a {
	color: #e3e3e3;
	position: relative;
	z-index: 2;
	float: left;
	font-size: 30px;
	font-family: helvetica, arial, sans-serif;
	text-decoration: none;
	padding: 30px 45px;
}
</pre>
<p>We&#8217;re setting a color, floating them to the left, setting some font values, and a healthy amount of padding. Take note of the z-index property. This is a necessity, and will be explained shortly. However, remember that, in order to adjust the z-index, we must set a positioning context, which we&#8217;ve done. </p>
<div class="tutorial_image">
   <img src="http://nettuts.s3.cdn.plus.org/600_spasticNav/four-nava.png" alt="Styling the anchor tags" />
</div>
<p>Because we&#8217;re not implementing a full reset stylesheet, let&#8217;s ensure that we zero out any default margins and padding on our ul and li, just to save any potential headaches. </p>
<pre name="code" class="css">
ul, li {
	margin: 0; padding: 0;
}
</pre>
<p>The last step is to style the blob itself! </p>
<pre name="code" class="css">
#blob {
	border-right: 1px solid #0059ec;
	border-left: 1px solid #0059ec;
	position: absolute;
	top: 0;
	z-index : 1;
	background: #0b2b61;
	background: -moz-linear-gradient(top, #0b2b61, #1153c0);
	background: -webkit-gradient(linear, left top, left bottom, from(#0b2b61), to(#1153c0));
	-moz-border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-box-shadow: 2px 3px 10px #011331;
	-webkit-box-shadow: 2px 3px 10px #011331;
}
</pre>
<p>Once again, we set some pretty colors for our borders, and add some background colors (including CSS3 gradients/borders/shadows for Firefox and Safari/Chrome). Once again, we see that z-index property. Without this, the blob will display above all of the text in the navigation menu. To counter this, we must be sure that its z-index property is LOWER than the list item&#8217;s! We also must set the position to absolute in order to adjust its top and left values with our plugin. </p>
<div class="tutorial_image">
   <img src="http://nettuts.s3.cdn.plus.org/600_spasticNav/screenshot.jpg" alt="Screenshot" />
</div>
<h2>Conclusion</h2>
<p>That&#8217;s all there is to it! With minimal effort, we&#8217;ve created a really neat looking navigation menu from scratch. Let me know if you have any questions! Thanks for reading and watching. </p>

<p><a href="http://feedads.g.doubleclick.net/~a/zz6Sof1P3eoUnVEXnR8OWsz2UZw/0/da"><img src="http://feedads.g.doubleclick.net/~a/zz6Sof1P3eoUnVEXnR8OWsz2UZw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zz6Sof1P3eoUnVEXnR8OWsz2UZw/1/da"><img src="http://feedads.g.doubleclick.net/~a/zz6Sof1P3eoUnVEXnR8OWsz2UZw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=D6XYq_6zWvM:q0e-MSVLTQI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=D6XYq_6zWvM:q0e-MSVLTQI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=D6XYq_6zWvM:q0e-MSVLTQI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=D6XYq_6zWvM:q0e-MSVLTQI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=D6XYq_6zWvM:q0e-MSVLTQI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=D6XYq_6zWvM:q0e-MSVLTQI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=D6XYq_6zWvM:q0e-MSVLTQI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=D6XYq_6zWvM:q0e-MSVLTQI:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/D6XYq_6zWvM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/html-css-techniques/how-to-build-a-lava-lamp-style-navigation-menu/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/html-css-techniques/how-to-build-a-lava-lamp-style-navigation-menu/</feedburner:origLink></item>
		<item>
		<title>Quick Tip: HTML5 Video with a Fallback to Flash</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/YtSdhZaIP0s/</link>
		<comments>http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-html-5-video-with-a-fallback-to-flash/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 18:52:27 +0000</pubDate>
		<dc:creator>Jeffrey Way</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9982</guid>
		<description><![CDATA[
In this video quick tip, we&#8217;ll review how to work with HTML 5 video in your own projects. Because older browsers and Internet Explorer do not understand the &#60;video> element, we must also find a way to serve a Flash file to viewers who are utilizing those browsers.





Viewing Options

Screenr (Mp4)

Unfortunately, much like HTML 5 audio, [...]]]></description>
			<content:encoded><![CDATA[<p>
In this video quick tip, we&#8217;ll review how to work with HTML 5 video in your own projects. Because older browsers and Internet Explorer do not understand the &lt;video> element, we must also find a way to serve a Flash file to viewers who are utilizing those browsers.
</p>
<p><span id="more-9982"></span></p>
<div class="tutorial_image">
<object width="600" height="450"><param name="movie" value="http://www.youtube.com/v/cO6wSBhPtOY&#038;hl=en_US&#038;fs=1&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/cO6wSBhPtOY&#038;hl=en_US&#038;fs=1&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="450"></embed></object>
</div>
<h3>Viewing Options</h3>
<ul>
<li><a href="http://screenr.com/Msg">Screenr (Mp4)</a></li>
</ul>
<p>Unfortunately, <a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-the-html-5-audio-element/">much like HTML 5 audio</a>, Firefox and Safari/Chrome don&#8217;t quite agree when it comes to the file format for videos. As such, if you wish to take advantage of HTML 5 video at this time, you&#8217;ll need to create three versions of your video. </p>
<ul>
<li><strong>.OGG</strong>: This will make Firefox happy. You can use <a href="http://www.videolan.org/vlc/">VLC</a> (File -> Streaming/Export Wizard) to convert your video to this format easily. </li>
<li><strong>.MP4</strong>: Many screencasting tools automatically export to Mp4; so you can use that file for Safari and Chrome. </li>
<li><strong>.FLV/.SWF</strong>: Not all browsers support HTML 5 video, of course. To compensate, make sure that you add a fallback Flash version as well.
</ul>
<pre name="code" class="html">
&lt;!DOCTYPE html>

&lt;html lang="en">
&lt;head>
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	&lt;title>untitled&lt;/title>
&lt;/head>
&lt;body>
&lt;video controls width="500">
	&lt;!-- if Firefox -->
	&lt;source src="video.ogg" type="video/ogg" />
	&lt;!-- if Safari/Chrome-->
	&lt;source src="video.mp4" type="video/mp4" />
	&lt;!-- If the browser doesn't understand the &lt;video> element, then reference a Flash file. You could also write something like "Use a Better Browser!" if you're feeling nasty. (Better to use a Flash file though.) -->
	&lt;embed src="http://blip.tv/play/gcMVgcmBAgA%2Em4v" type="application/x-shockwave-flash" width="1024" height="798" allowscriptaccess="always" allowfullscreen="true">&lt;/embed>
&lt;/video>
&lt;/body>
&lt;/html>
</pre>
<p>There are a handful of attributes available to the &lt;video> element. </p>
<ul>
<li><strong>Controls: </strong> Display the play/stop buttons?
<li><strong>Poster: </strong> The value can be a path to an image, that will serve as the display of the video before it is played. </li>
<li><strong>AutoPlay: </strong> Immediately play the video when the page is loaded? </li>
<li><strong>Width: </strong> The desired width of the video. By default, the browser will automatically detect the dimensions of the supplied video. </li>
<li><strong>Height: </strong> The desired height of the video. </li>
<li><strong>Src: </strong> The path to the video file. It&#8217;s better to use the &lt;source> child element instead for this task. </li>
</ul>
<h3>Dos and Don&#8217;ts of HTML 5 Video</h3>
<ol>
<li><strong>DO </strong> create three version of your video to make Firefox, Safari/Chrome, and IE happy. (.ogg, .mp4, .flv/.swf) </li>
<li><strong>DO NOT </strong> omit one of these formats. Unfortunately, you can&#8217;t easily choose to serve HTML 5 video to Firefox, and the Flash fallback to Safari. Safari understands the &lt;video> element, and will expect to find a suitable video format to load. If one is not found, it will display an empty player. </li>
<li><strong>DO </strong> keep in mind that full-screen support will not work in Safari and Chrome. However, with the release of Firefox 3.6, you can right-click, and view in full screen. </li>
<li><strong>DO</strong> remember that the reason why IE loads the Flash file instead is because it does not understand what the &lt;video> element is. However, if a browser DOES understand that element, it will expect to find a suitable file to load. </li>
</ol>
<p><em>Please note that, if I can find a suitable work-around for the full-screen problem, we&#8217;ll be using this method on Nettuts+ in the near future! </em></p>

<p><a href="http://feedads.g.doubleclick.net/~a/cAErp3RQoBpRnK-XcXMLB5Y4lrQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/cAErp3RQoBpRnK-XcXMLB5Y4lrQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cAErp3RQoBpRnK-XcXMLB5Y4lrQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/cAErp3RQoBpRnK-XcXMLB5Y4lrQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=YtSdhZaIP0s:XtwtXFfXmgo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YtSdhZaIP0s:XtwtXFfXmgo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=YtSdhZaIP0s:XtwtXFfXmgo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YtSdhZaIP0s:XtwtXFfXmgo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=YtSdhZaIP0s:XtwtXFfXmgo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YtSdhZaIP0s:XtwtXFfXmgo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=YtSdhZaIP0s:XtwtXFfXmgo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YtSdhZaIP0s:XtwtXFfXmgo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/YtSdhZaIP0s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-html-5-video-with-a-fallback-to-flash/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-html-5-video-with-a-fallback-to-flash/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter from Scratch: File Operations</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/9ZFzOtJPBSE/</link>
		<comments>http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-file-operations/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 22:47:52 +0000</pubDate>
		<dc:creator>Burak Guzel</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[code igniter]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[php framework]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9924</guid>
		<description><![CDATA[In today&#8217;s episode, we are going to be working with several helper functions, related to files, directories, and downloads. We are going to learn how to read, write, download files, and retrieve information about both files and directories. Also at the end we will build a small file browser that utilizes jQuery as well.

Catch Up

Day [...]]]></description>
			<content:encoded><![CDATA[<p>In today&#8217;s episode, we are going to be working with several helper functions, related to files, directories, and downloads. We are going to learn how to read, write, download files, and retrieve information about both files and directories. Also at the end we will build a small file browser that utilizes jQuery as well.</p>
<p><span id="more-9924"></span></p>
<h2>Catch Up</h2>
<ul>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-1/">Day 1: Getting Started With the Framework</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-2/">Day 2: Database Selecting Methods</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-3/">Day 3: Sending Emails</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-4-newsletter-signup/">Day 4: Newsletter Signup</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-5-crud/">Day 5: CRUD</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-6-login/">Day 6: Login</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-7-pagination/">Day 7: Pagination</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-8-ajax/">Day 8: AJAX</a></li>
<li><a href="http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-file-uploading-and-image-manipulation/">Day 9: File Uploading and Image Manipulation</a></li>
<li><a href="http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-the-calendar-library/">Day 10: The Calendar Library</a></li>
<li><a href="http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-file-operations/">Day 11: File and Directory Operations</a></li>
</ul>
<h2>Day 11: File Operations</h2>
<div class="tutorial_image">


<div class="tutorial_image">
		<div id="player10"><a href="http://get.adobe.com/flashplayer/">Get the Flash Player</a> to see this player.</div>
		<script type="text/javascript">
		var so = new SWFObject('http://net.tutsplus.com/wp-content/plugins/flash-player/player.swf','player10','600','450','9');
		so.addParam('allowscriptaccess','always');
		so.addParam('allowfullscreen','true');
		so.addParam('flashvars','&file=http://nettuts.s3.amazonaws.com/598_ci11/ci_from_scratch_day11_files_directories_downloads.mp4&bufferlength=1&skin=http://net.tutsplus.com/wp-content/plugins/flash-player/silver.swf&fullscreen=true');
		so.write('player10');
		</script>
		</div>


</div>
<div class="tutorial_image">
   <img src="http://nettuts.s3.amazonaws.com/598_ci11/ss.png" alt="Final Example" />
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/6DWCgkF49_GC7StPFv1uZAjma4Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/6DWCgkF49_GC7StPFv1uZAjma4Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6DWCgkF49_GC7StPFv1uZAjma4Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/6DWCgkF49_GC7StPFv1uZAjma4Q/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=9ZFzOtJPBSE:s9dEubNtVAQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=9ZFzOtJPBSE:s9dEubNtVAQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=9ZFzOtJPBSE:s9dEubNtVAQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=9ZFzOtJPBSE:s9dEubNtVAQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=9ZFzOtJPBSE:s9dEubNtVAQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=9ZFzOtJPBSE:s9dEubNtVAQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=9ZFzOtJPBSE:s9dEubNtVAQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=9ZFzOtJPBSE:s9dEubNtVAQ:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/9ZFzOtJPBSE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-file-operations/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
<enclosure url="http://nettuts.s3.amazonaws.com/598_ci11/ci_from_scratch_day11_files_directories_downloads.mp4" length="37759654" type="video/mp4" />
<enclosure url="http://nettuts.s3.amazonaws.com/598_ci11/ci11.ogg" length="155254795" type="audio/ogg" />
<enclosure url="http://blip.tv/file/get/NETTUTS-CodeIgniterFromScratchDay10155.mp4" length="64980621" type="video/mp4" />
<enclosure url="http://nettuts.s3.cdn.plus.org/598_ci11/ci11.ogg" length="155254795" type="audio/ogg" />
		<feedburner:origLink>http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-file-operations/</feedburner:origLink></item>
		<item>
		<title>New Premium Series: Tumblr Theme Design – Start to Finish</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/tXnOj20DHB0/</link>
		<comments>http://net.tutsplus.com/tutorials/html-css-techniques/new-plus-tutorial-tumblr-theme-design-start-to-finish/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:39:13 +0000</pubDate>
		<dc:creator>Jeffrey Way</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Premium]]></category>
		<category><![CDATA[theme design]]></category>
		<category><![CDATA[tumblr]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9863</guid>
		<description><![CDATA[
Tumblr&#8217;s popularity over the last year has increased exponentially. The reason why is quite simple: Tumblr is flexible, powerful, and, most importantly, a pleasure to work with. Unfortunately, there aren&#8217;t many  training resources available for the platform yet. In this video series, we&#8217;ll go through the process of taking a Tumblr theme, designed in [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.tumblr.com">Tumblr&#8217;s</a> popularity over the last year has increased exponentially. The reason why is quite simple: Tumblr is flexible, powerful, and, most importantly, a pleasure to work with. Unfortunately, there aren&#8217;t many  training resources available for the platform yet. In this <strong>video series</strong>, we&#8217;ll go through the process of taking a Tumblr theme, designed in Photoshop, and converting it into a <a href="http://nettutstutorial.tumblr.com">fully working theme</a> &#8211; in just a few hours.
</p>
<p>To take advantage of this mammoth video series, <a href="http://net.tutsplus.com/about/join-plus/">become a Premium member!</a> </p>
<p><span id="more-9863"></span></p>
<h2>Watch the Intro </h2>
<p>

<div class="tutorial_image">
		<div id="player10"><a href="http://get.adobe.com/flashplayer/">Get the Flash Player</a> to see this player.</div>
		<script type="text/javascript">
		var so = new SWFObject('http://net.tutsplus.com/wp-content/plugins/flash-player/player.swf','player10','600','450','9');
		so.addParam('allowscriptaccess','always');
		so.addParam('allowfullscreen','true');
		so.addParam('flashvars','&file=http://nettutsplus.s3.amazonaws.com/60_tumblr/Chapter 1 - Intro.mp4&bufferlength=1&skin=http://net.tutsplus.com/wp-content/plugins/flash-player/silver.swf&fullscreen=true');
		so.write('player10');
		</script>
		</div>

</p>
<h2>The Full Series </h2>
<ul>
<li><strong>Chapter 1: </strong> Intro </li>
<li><strong>Chapter 2: </strong> Slicing the Design </li>
<li><strong>Chapter 3: </strong> Creating the Markup and Adding the Tumblr Template Tags </li>
<li><strong>Chapter 4: </strong> Adding the CSS </li>
<li><strong>Chapter 5: </strong> Configuration Options </li>
<li><strong>Chapter 6: </strong> @Font-Face and Custom Fonts </li>
<li><strong>Chapter 7: </strong> Slide-out Panel &#8211; HTML and CSS </li>
<li><strong>Chapter 8: </strong> Slide-out Panel &#8211; jQuery  </li>
</ul>
<h3>Final Design </h3>
<div class="tutorial_image">
<a href="http://nettutstutorial.tumblr.com/"><br />
   <img src="http://nettutsplus.s3.amazonaws.com/60_tumblr/finalDesign.jpg" alt="Final Design" /><br />
</a></p>
<div><a href="http://nettutstutorial.tumblr.com/">View the live demo. </a></div>
</div>
<p><em>Thanks to <a href="http://www.katepayton.com">Kate Payton</a> for submitting the design for this tutorial. </em></p>
<h3>Join Net Premium</h3>
<div class="tutorial_image"><img src="http://miscfiles.s3.amazonaws.com/banners/nettuts_468x60.jpg" border=0 alt="NETTUTS+ Screencasts and Bonus Tutorials" width=468 height=60></div>
<p>
For those unfamiliar, the family of TUTS sites runs a premium membership service. For $9 per month, you gain access to exclusive premium tutorials, screencasts, and freebies from <a href="http://net.tutsplus.com">Nettuts+</a>, <a href="psd.tutsplus.com">Psdtuts+</a>, <a href="ae.tutsplus.com">Aetuts+</a>, <a href="audio.tutsplus.com">Audiotuts+</a>, and <a href="vector.tutsplus.com">Vectortuts+!</a> For the price of a pizza, you&#8217;ll learn from some of the best minds in the business. If you&#8217;re curious about the other Premium tutorials that we have available, <a href="http://net.tutsplus.com/tag/premium/">check here</a>.  <a href="http://net.tutsplus.com/about/join-plus/">Join today!</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/H4SJpH6ZgFRp_Ub8Hzl6zhSIGYw/0/da"><img src="http://feedads.g.doubleclick.net/~a/H4SJpH6ZgFRp_Ub8Hzl6zhSIGYw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/H4SJpH6ZgFRp_Ub8Hzl6zhSIGYw/1/da"><img src="http://feedads.g.doubleclick.net/~a/H4SJpH6ZgFRp_Ub8Hzl6zhSIGYw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=tXnOj20DHB0:HE_meGu9Efo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=tXnOj20DHB0:HE_meGu9Efo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=tXnOj20DHB0:HE_meGu9Efo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=tXnOj20DHB0:HE_meGu9Efo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=tXnOj20DHB0:HE_meGu9Efo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=tXnOj20DHB0:HE_meGu9Efo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=tXnOj20DHB0:HE_meGu9Efo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=tXnOj20DHB0:HE_meGu9Efo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/tXnOj20DHB0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/html-css-techniques/new-plus-tutorial-tumblr-theme-design-start-to-finish/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/html-css-techniques/new-plus-tutorial-tumblr-theme-design-start-to-finish/</feedburner:origLink></item>
		<item>
		<title>Inspiration: Awesome Book-Related Website Designs</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/ZeZY2PMJxy0/</link>
		<comments>http://net.tutsplus.com/articles/web-roundups/inspiration-awesome-book-related-website-designs/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 05:20:43 +0000</pubDate>
		<dc:creator>Cameron Chapman</dc:creator>
				<category><![CDATA[Web Roundups]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9884</guid>
		<description><![CDATA[If you&#8217;re a book lover, you may have noticed that the vast majority of book-related websites out there leave a bit to be desired when it comes to design and information architecture. In fact, some author and publisher websites make me feel like my eyes might bleed!
But there are some gems out there, and we&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re a book lover, you may have noticed that the vast majority of book-related websites out there leave a bit to be desired when it comes to design and information architecture. In fact, some author and publisher websites make me feel like my eyes might bleed!</p>
<p>But there are some gems out there, and we&#8217;ve collected some of the best. If you know of any other fantastic book-related websites, whether they&#8217;re for authors, individual books, publishing companies, or blogs, let us know in the comments.</p>
<p><span id="more-9884"></span></p>
<h2>Authors &#038; Individual Book Sites</h2>
<p>Author websites are some of the more challenging sites to design. If an author has a large backlist, it can be difficult to figure out how to showcase all of their work effectively. And if the author has only published one or two books, it can be hard to have an effective site that doesn&#8217;t feel <em>empty</em>.</p>
<p>And in reality, there are a lot of things an author&#8217;s site needs to accomplish. It needs to provide readers and potential readers with information about the books and why they might be interested in reading them. It needs to give booksellers information about the books, and why they should stock them. And it needs to act as a constant promotional tool that will help the author sell more books and gain more fans.</p>
<p>Dear Author has a great post on what many <a href="http://dearauthor.com/wordpress/2007/05/11/top-10-peeves-from-booksellers-and-readers-about-author-websites/">author websites are lacking</a>. The list includes things like a printable book list, a link on the home page to contact the author, and a highly visible &#8220;coming soon&#8221; section. Check out the full list for more points to keep in mind if you&#8217;re designing an author&#8217;s website.</p>
<p>Here are a few great author and book websites you should be sure to check out for inspiration and ideas.</p>
<h3>No One Belongs Here More Than You</h3>
<div class="tutorial_image"><a href="http://www.noonebelongsheremorethanyou.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/noonebelongshere.jpg" border="0" /></a></div>
<p>This is one of the most creative books websites I&#8217;ve ever seen. While it&#8217;s not the most user-friendly of sites, it suits its purpose and does well to hold reader interest.</p>
<h3>Justine Larbalestier</h3>
<div class="tutorial_image"><a href="http://justinelarbalestier.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/justinelarbalestier.jpg" border="0" /></a></div>
<p>An excellent, clean-looking design that still has plenty of character. Her books are prominently displayed on the home page, along with links to her blog, about information, and other important parts. She also includes information about events, interviews, and specific book info on the home page, a big plus for readers and book sellers.</p>
<h3>Stephen King</h3>
<div class="tutorial_image"><a href="http://www.stephenking.com/index.html"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/stephenking.jpg" border="0" /></a></div>
<p>Stephen King&#8217;s presents its own challenges to a designer, mainly the sheer volume of information it needs to contain. King has written well over sixty books, has had a number of his books adapted for the screen, and has written numerous short stories. But his site manages to include all the pertinent information a visitor might be looking for while also showcasing his best and most recent works, all while maintaining a very streamlined and professional  design.</p>
<h3>Cherry Adair</h3>
<div class="tutorial_image"><a href="http://www.tflac.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/cherryadair.jpg" border="0" /></a></div>
<p>Cherry Adair&#8217;s website fits well with the types of books she writes. The only downside to the site is that it&#8217;s entirely Flash-based, though the interface itself is slick and very responsive. She includes all of the information one would expect on an author site, including a printable, PDF booklist.</p>
<h3>Jim Collins</h3>
<div class="tutorial_image"><a href="http://www.jimcollins.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/jimcollins.jpg" border="0" /></a></div>
<p>Jim Collins&#8217; site takes a much more minimalist design approach than many of the others on this list. The color scheme is limited and sophisticated, there&#8217;s plenty of white space, and only necessary content is included.</p>
<h3>Jean Chatzky</h3>
<div class="tutorial_image"><a href="http://www.jeanchatzky.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/jeanchatzky.jpg" border="0" /></a></div>
<p>Jean Chatzky&#8217;s website is well-suited to the types of books she writes and the brand she&#8217;s built for herself (you may recognize her from her regular appearances on the Today Show). It&#8217;s professional but unintimidating and has a friendly feel to it. It also provides all the necessary information you&#8217;d expect and is easy to navigate.</p>
<h3>Hank Phillippi Ryan</h3>
<div class="tutorial_image"><a href="http://www.hankphillippiryan.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/hankphillippiryan.jpg" border="0" /></a></div>
<p>Hank Phillippi Ryan&#8217;s website is bright and colorful, which matches the covers and style of her books. The layout is reminiscent of a grid layout and makes good use of negative space.</p>
<h3>Caroline Tiger</h3>
<div class="tutorial_image"><a href="http://www.carolinetigerbooks.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/carolinetiger.jpg" border="0" /></a></div>
<p>Caroline Tiger&#8217;s site has some of the best use of color of any author site I&#8217;ve seen. Navigation is simple and straightforward, the emphasis is placed squarely on her books, and the overall impression is professional but relaxed.</p>
<h3>Nicholas Sparks</h3>
<div class="tutorial_image"><a href="http://www.nicholassparks.com/index.asp"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/nicholassparks.jpg" border="0" /></a></div>
<p>Nicholas Sparks&#8217; website makes great use of large background images and transparency. It&#8217;s easy to find the information you might be looking for, with prominent links to his books and movies, as well as appearances and biography information.</p>
<h2>Publishers</h2>
<p>Publisher websites have to be many things to many people; not always an easy task to do well. They have to showcase their books to potential readers. They have to appeal to booksellers and convince them to stock more of their books. They have to give information to prospective authors, either in the form of submission guidelines or guidelines that tell them they don&#8217;t accept unagented submissions. They have to provide information to the media and book reviewers. And sometimes, in the case of the larger publishing conglomerates, they also have to present a united front across multipe imprints.</p>
<p>The best publisher sites showcase recent books as well as best sellers. They make it easy for readers and booksellers to make decisions regarding book purchases. And they provide all the necessary information about the company, the books, and the authors for anyone looking.</p>
<p>Here are some of the best book publisher websites out there. They run the gamut from small publishers with only a handful of books to large publishing houses that publish hundreds of titles each year. What they all have in common is good information architecture, a clean style, and excellent user experience.</p>
<h3>Dragon International Independent Arts</h3>
<div class="tutorial_image"><a href="http://www.diiarts.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/diiarts.jpg" border="0" /></a></div>
<p>The DIIArts site packs a lot of information into a small space while maintaining an uncluttered and clean-looking layout. Their main nav includes nine tabs while still leaving some breathing room. The use of icons throughout the site helps to unify everything, as does the light color scheme.</p>
<h3>Arcadia Publishing</h3>
<div class="tutorial_image"><a href="http://www.arcadiapublishing.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/arcadiapublishing.jpg" border="0" /></a></div>
<p>Arcadia Publishing&#8217;s site fits its business perfectly. It has a vintage feel to it, which fits them since they&#8217;re publishers of historical nonfiction. The site is easy to navigate and effectively showcases important information (like the fact that they offer free shipping).</p>
<h3>Melville House Publishing</h3>
<div class="tutorial_image"><a href="http://www.mhpbooks.com/index.php"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/melvillehouse.jpg" border="0" /></a></div>
<p>The Melville House Publishing website has a simple blue and white theme throughout. It has a minimalist, grid-based layout nad a lot of white space. Information is easy to find and their books are displayed prominently.</p>
<h3>Princeton Architectural Press</h3>
<div class="tutorial_image"><a href="http://www.papress.com/html/our.home.page.tpl"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/papress.jpg" border="0" /></a></div>
<p>Princeton Architectural Press&#8217;s website is great because it&#8217;s design is a bit unexpected. The bright yellow background and grid-based layout are visually striking, which is entirely appropriate for a publishign company that focuses so heavily on design, but also a bit unexpected for a site in such a conservative industry.</p>
<h3>Penguin Group USA</h3>
<div class="tutorial_image"><a href="http://us.penguingroup.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/penguingroup.jpg" border="0" /></a></div>
<p>Among all of the big-name publishers out there, Penguin has one of the most attractive websites. Their layout is well-ordered, the color palette is refined, and they place emphasis where appropriate. There&#8217;s a ton of information on the site, and yet it feels uncluttered.</p>
<h3>Timber Press</h3>
<div class="tutorial_image"><a href="http://www.timberpress.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/timberpress.jpg" border="0" /></a></div>
<p>The Timber Press website makes great use of color and has a fantastic layout. The design is eye-catching and easy to navigate, with a well-implemented slideshow showcasing some of their books on the home page.</p>
<h3>Llewellyn</h3>
<div class="tutorial_image"><a href="http://www.llewellyn.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/llewellyn.jpg" border="0" /></a></div>
<p>Llewellyn&#8217;s website uses a muted color palette and three column layout that creates a sophisticated and professional feel to their site. They make it easy to browse their books, as well as to find other information about the company and their authors.</p>
<h3>Storey Publishing</h3>
<div class="tutorial_image"><a href="http://www.storey.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/storeypublishing.jpg" border="0" /></a></div>
<p>Storey Publishing is another company that opted for a muted color palette and simple layout. The green accents on the site fit well with the country-living and outdoor-themed books they publish, as do the graphics throughout the site.</p>
<h3>Gibbs Smith</h3>
<div class="tutorial_image"><a href="http://www.gibbs-smith.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/gibbssmith.jpg" border="0" /></a></div>
<p>Gibbs Smith makes great use of Flash to showcase books on their home page, but otherwise keeps their layout fairly simple. They emphasize their best-sellers but make it easy to browse their entire catalog or find information about their authors. The red, burgundy and gray color scheme is sophisticated and feels very neutral.</p>
<h2>Other Sites</h2>
<p>Publisher and author websites aren&#8217;t the only sites out there that target book lovers. There are communities for readers (and writers), blogs and book review sites, and service sites for readers and writers alike.</p>
<p>The sites below target many different demographics, but each focuses on great user experience and simple architecture. Each has its own distinct style that adds to the user&#8217;s overall impression of the site and the company or people behind it. And each one has a clear purpose and mission that they accomplish well.</p>
<h3>IndieBound</h3>
<div class="tutorial_image"><a href="http://www.indiebound.org/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/indiebound.jpg" border="0" /></a></div>
<p>IndieBound is a community for independent bookstores and their customers. Their site is well-laid-out, has a great color scheme, and a unique design. They have a lot of information on the site, but it remains easy to navigate and find the information you need. They even manage to make the wide variety of graphics used on the site appear cohesive.</p>
<h3>The Fiction Project</h3>
<div class="tutorial_image"><a href="http://www.arthousecoop.com/projects/fictionproject"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/fictionproject.jpg" border="0" /></a></div>
<p>The Fiction Project at Art House Co-Op has a really awesome site design. The overall look represents the artistic sensibility of the project, but all information about the project is easily found and legible.</p>
<h3>Lulu</h3>
<div class="tutorial_image"><a href="http://www.lulu.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/lulu.jpg" border="0" /></a></div>
<p>Self-publishing company Lulu has a well-designed website that focuses on user experience. They keep graphics simple and use them specifically to highlight their services. The color scheme is consistent (white, blue and orange), and there&#8217;s plenty of negative space in the design. What sets Lulu&#8217;s site apart from many other self-publishing sites is that they&#8217;ve made it just as easy for book buyers to use the site as they have for authors.</p>
<h3>Readerville</h3>
<div class="tutorial_image"><a href="http://www.readerville.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/readerville.jpg" border="0" /></a></div>
<p>Readerville uses a simple two-column design with brownish-orange, burgundy, and muted blue accent colors. Readability is given the utmost importance in this design, with usability a very close second. While the site is no longer updated, it is still a great example of a book-related site design.</p>
<h3>DailyLit</h3>
<div class="tutorial_image"><a href="http://dailylit.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/dailylit.jpg" border="0" /></a></div>
<p>DailyLit, a service that delivers daily reading to your email inbox, has a fantastic website that uses a muted, cool color palette and grid-based layout. The site is easily navigated and showcases their services and the books available.</p>
<h3>Blurb</h3>
<div class="tutorial_image"><a href="http://www.blurb.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/blurb.jpg" border="0" /></a></div>
<p>Blurb is another self-publishing service that puts more emphasis on style than many other self-publishing sites. They offer good user experience for both authors and book buyers, and showcase &#8220;staff picks&#8221; on the home page (something many self-publishing companies don&#8217;t bother with).</p>
<h3>The Millions</h3>
<div class="tutorial_image"><a href="http://www.themillions.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/themillions.jpg" border="0" /></a></div>
<p>The Millions is a book review and culture site that uses a grid layout and mostly-black and white color scheme with bright orange accents. The layout of the site is fantastic, and the entire thing feels very modern and refreshing.</p>
<h3>Guys Read</h3>
<div class="tutorial_image"><a href="http://www.guysread.com/"><img src="http://nettuts.s3.cdn.plus.org/596_bookSites/guysread.jpg" border="0" /></a></div>
<p>Guys Read is a literacy site for boys that places a heavy emphasis on typography. The site uses a red-white-and-blue color scheme and plenty of white space. It uses a mostly two-column layout and has a very masculine feel to it without feeling stuffy or staid.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/o1kcyxZuP3aNstDCWo7V23c2XRE/0/da"><img src="http://feedads.g.doubleclick.net/~a/o1kcyxZuP3aNstDCWo7V23c2XRE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/o1kcyxZuP3aNstDCWo7V23c2XRE/1/da"><img src="http://feedads.g.doubleclick.net/~a/o1kcyxZuP3aNstDCWo7V23c2XRE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=ZeZY2PMJxy0:vUHboDY3Pc4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=ZeZY2PMJxy0:vUHboDY3Pc4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=ZeZY2PMJxy0:vUHboDY3Pc4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=ZeZY2PMJxy0:vUHboDY3Pc4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=ZeZY2PMJxy0:vUHboDY3Pc4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=ZeZY2PMJxy0:vUHboDY3Pc4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=ZeZY2PMJxy0:vUHboDY3Pc4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=ZeZY2PMJxy0:vUHboDY3Pc4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/ZeZY2PMJxy0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/articles/web-roundups/inspiration-awesome-book-related-website-designs/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/articles/web-roundups/inspiration-awesome-book-related-website-designs/</feedburner:origLink></item>
		<item>
		<title>Quick Tip: The Difference Between Live() and Delegate()</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/bGycK9Esuq4/</link>
		<comments>http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-the-difference-between-live-and-delegate/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 18:03:18 +0000</pubDate>
		<dc:creator>Jeffrey Way</dc:creator>
				<category><![CDATA[JavaScript & AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9841</guid>
		<description><![CDATA[
In jQuery 1.3, the team introduced the live() method, which allows us to bind event handlers to elements on the page, as well as any that might be created in the future dynamically. Though not perfect, it definitely proved to be helpful. Most notably, live() bubbles all the way up, and attaches the handler to [...]]]></description>
			<content:encoded><![CDATA[<p>
In jQuery 1.3, the team introduced the <a href="http://api.jquery.com/live/">live()</a> method, which allows us to bind event handlers to elements on the page, as well as any that might be created in the future dynamically. Though not perfect, it definitely proved to be helpful. Most notably, live() bubbles all the way up, and attaches the handler to the document. It also ceases to work well when chaining method calls, unfortunately. <a href="http://api.jquery.com/delegate/">Delegate()</a> was introduced in version 1.4, which almost does the same thing, but more efficiently.
</p>
<p>We&#8217;ll examine the specific differences between the two methods in today&#8217;s video quick tip. Thanks to the <a href="http://firequery.binaryage.com/">FireQuery Firebug</a> extension, we&#8217;ll have the tools to more easily understand how each method functions. </p>
<p><span id="more-9841"></span></p>
<div class="tutorial_image">
<object width="600" height="450"><param name="movie" value="http://www.youtube.com/v/23Q4S9hmHQY&#038;hl=en_US&#038;fs=1&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/23Q4S9hmHQY&#038;hl=en_US&#038;fs=1&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="450"></embed></object>
</div>
<h3>Alternate Viewing Options</h3>
<ul>
<li><a href="http://screenr.com/Iah">Screenr (MP4) </a></li>
</ul>
<pre name="code" class="html">
&lt;ul id="items">
	&lt;li> Click Me &lt;/li>
&lt;/ul>
</pre>
<pre name="code" class="js">
// Bind attaches an event handler only to the elements
// that match a particular selector. This, expectedly,
// excludes any dynamically generated elements.
$("#items li").click(function() {
	$(this).parent().append("&lt;li>New Element&lt;/li>");
});

// Live(), introduced in 1.3, allows for the binding
// of event handlers to all elements that match a
// selector, including those created in the future.
// It does this by attaching the handler to the document.
// Unfortunately, it does not work well with chaining.
// Don't expect to chain live() after calls like
// children().next()...etc.
$("li").live("click", function() {
	$(this).parent().append("&lt;li>New Element&lt;/li>");
});	

// Delegate, new to version 1.4, perhaps should have been a complete
// replacement for Live(). However, that obviously
// would have broken a lot of code! Nonetheless,
// delegate remedies many of the short-comings
// found in live(). It attaches the event handler
// directly to the context, rather than the document.
// It also doesn't suffer from the chaining issues
// that live does. There are many performance benefits
// to using this method over live().
$('#items').delegate('li', 'click', function() {
	$(this).parent().append('&lt;li>New Element&lt;/li>');
});	

// By passing a DOM element as the context of our selector, we can make
// Live() behave (almost) the same way that delegate()
// does. It attaches the handler to the context, not
// the document - which is the default context.
// The code below is equivalent to the delegate() version
// shown above.
$("li", $("#items")[0]).live("click", function() {
	$(this).parent().append("&lt;li>New Element&lt;/li>");
});
</pre>
<h2>Conclusion</h2>
<p>This can definitely be a confusing topic. Please feel free to ask questions, or discuss within the comments. Thanks so much to <a href="http://twitter.com/elijahmanor">Elijah Manor</a> for clarifying a few things for me on this topic! </p>

<p><a href="http://feedads.g.doubleclick.net/~a/wgncz9nV5Ud7QkViKRkIa_m-Ctc/0/da"><img src="http://feedads.g.doubleclick.net/~a/wgncz9nV5Ud7QkViKRkIa_m-Ctc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wgncz9nV5Ud7QkViKRkIa_m-Ctc/1/da"><img src="http://feedads.g.doubleclick.net/~a/wgncz9nV5Ud7QkViKRkIa_m-Ctc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=bGycK9Esuq4:E0VKNKf5Noo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=bGycK9Esuq4:E0VKNKf5Noo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=bGycK9Esuq4:E0VKNKf5Noo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=bGycK9Esuq4:E0VKNKf5Noo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=bGycK9Esuq4:E0VKNKf5Noo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=bGycK9Esuq4:E0VKNKf5Noo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=bGycK9Esuq4:E0VKNKf5Noo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=bGycK9Esuq4:E0VKNKf5Noo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/bGycK9Esuq4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-the-difference-between-live-and-delegate/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-the-difference-between-live-and-delegate/</feedburner:origLink></item>
		<item>
		<title>Save Time and Money by Systematizing your Photoshop Workflow</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/jmAR4vAZwDo/</link>
		<comments>http://net.tutsplus.com/tutorials/design-tutorials/save-time-and-money-by-systematizing-your-photoshop-workflow/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 15:29:35 +0000</pubDate>
		<dc:creator>Ben Gribbin</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[efficiency]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[photoshop workflow]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9807</guid>
		<description><![CDATA[Repetitive tasks can quickly become tedious. As a designer, you probably often find yourself designing the same elements over and over from scratch. STOP!
Wasting time is so old-fashioned. It also means you&#8217;re wasting money! So, let&#8217;s review some ways that you can automate and systematize your Photoshop workflow. And be sure to download the project [...]]]></description>
			<content:encoded><![CDATA[<p>Repetitive tasks can quickly become tedious. As a designer, you probably often find yourself designing the same elements over and over from scratch. <em>STOP!</em></p>
<p>Wasting time is so old-fashioned. It also means you&#8217;re wasting money! So, let&#8217;s review some ways that you can automate and systematize your Photoshop workflow. <strong>And be sure to download the project base for all of your new designs! </strong> </p>
<p><span id="more-9807"></span></p>
<h2>File Tree &amp; Re-usable Project Base</h2>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/1.jpg" width="600" /></div>
<p>The first step in systematizing your workflow is to organize your files. Identify all common elements you use within your designs. </p>
<p>You may come to a list such as the following:</p>
<ul>
<li>Home Page template</li>
<li> About Page
  </li>
<li> Contact Page
  </li>
<li> Services Page
  </li>
<li>Fonts
    </li>
<li> Assets</li>
</ul>
<h2>The Project Base</h2>
<p>Consider how your final deliverables are used. If they are shipped to a coding business, be as organized and thorough as possible, including notes and fonts where applicable.</p>
<p>You can ensure that you have perfectly organized themes by creating a package that allows you to &#8220;fill in the blanks&#8221;, so to speak. Simply copy this folder, assign it to the project by renaming it to the project and get working. This is a very simple and efficient way to work, and means that websites you built four years ago can easily be edited, because everything is packed into its very own place.</p>
<p><strong><a href="http://nettuts.s3.amazonaws.com/594_timeSavingTips/project_base.zip">Download the Project Base </a></strong></p>
<p>In the zip file, you&#8217;ll find a simple re-useable template starting point. This file contains elements such as dividers, buttons and a pre-gridded template to speed up your design workflow.
</p>
<p>See how simple starting a new project is now? It may take a couple of minutes to set-up, but the time saved later is more time for you to be doing what you love best &#8211; designing!</p>
<p>Now that we have a solid base to build upon, we can starting filling out our &#8216;boiler-plater&#8217; with specific files and concepts.</p>
<h2>Web Template</h2>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/2.jpg" width="600" /></p>
<p><em>The sample template will allow you to create a page of your most used elements, ready for quick inclusion in your latest project.</em></p>
</div>
<p>If you&#8217;re a web designer in particular, you&#8217;ll find that a lot of your projects, even those different in every possible way &#8211; use and re-use common elements.</p>
<p>Begin by building a few re-usable templates. Don&#8217;t worry about which elements you wish to include just yet, because you can always go back and look at your previous projects and analyze more popular features &#8211; then re-create them here.</p>
<p>Personally, I use just one template. I have a home page (this contains elements such as news bulletins, blog post stylings, menus, logos and call to actions). I can modify this template to suit blog pages, buy it now forms and more. </p>
<p>The page also has a 960.gs pre-applied. This has been included for download at the end of the article, in the template boilerplate.</p>
<p>Once you&#8217;re set-up with this concept, you can build designs very quickly. However, you should definitely consider developing your own, and tailor it to your clients and team. You could go further by adding icons, search elements and online store related items &#8211; anything to suit your client base.</p>
<h2>Grouping &amp; Organizing</h2>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/3.jpg" width="600" /></p>
<p><em>The above image demonstrates the tangible difference between an organized layer palette, and a messy one!</em></p>
</div>
<p>When you&#8217;re in a real creative flow, it can be difficult to stop and start naming and grouping layers. Photoshop doesn&#8217;t really help in this area by default either! </p>
<p>So, take the time as you go to name and group layers. This will help you later when coding the design, or if you ship if off for coding elsewhere. </p>
<p>Name each layer, and try to use a descriptive and short word &#8211; such as &#8216;menu&#8217; for the navigation. Group specific areas, such as the header or a contact form.</p>
<p><strong>This has a two-fold benefit. </strong></p>
<ol>
<li>You can toggle whole areas (or the whole design) on or off in order to work on the background or other elements. </li>
<li>You can move sections of a design without the need for moving each element. This can save hours per project!</li>
</ol>
<p>So, take the time to stop every five minutes or so, and name and group each element. You&#8217;ll be glad you did!</p>
<p>Make good use of the select tool! You can toggle the select mode between layers and groups. This facilitates mass updating and re-aligning designs, so don&#8217;t forget it!</p>
<h2>Actions</h2>
<div class="tutorial_image"><a href="http://graphicriver.net"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/4.jpg" width="600" /></a></div>
<p>If you don&#8217;t use actions in your work-flow, then you should begin using them immediately.</p>
<p>Photoshop actions are entirely configurable lists of actions Photoshop should carry out automatically. You can create your own, or choose from the bounty available online. If you work on Photographs for example, and have 400 pictures to edit and resize, this would take a long time. Instead, you can create an action that adjusts the contrast, alters the size and then saves the file in .jpg format, blasting through 400 files in seconds! You must use actions!</p>
<p>If you do not have the knowledge, or experience to create your own actions, <strong><a href="http://graphicriver.net">GraphicRiver</a> has a large selection of actions available for purchase from $1!</strong></p>
<p style="clear: both;"> The actions on sale range from simple photo effects to this <a href="http://graphicriver.net/item/phoipsum-adobe-photoshop-greek-text-script/77673">action </a>which can add various pre-formatted text sections such as contact details or blog posts in seconds. </p>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/5.jpg" width="600" /></div>
<p>Start using Actions and you will notice a significant increase in your productivity and reduce the amount of times you need to repeat monotonous tasks over and over. </p>
<h3>Creating and Using an Action</h3>
<p>Making your own action is easy. As an example, we&#8217;ll create a simple action to re-size several images at once, then save them. </p>
<p>First off, you need to hit the new action button, on the actions palette.</p>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/7a.jpg" width="600" /></div>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/7b.jpg" width="600" /></div>
<p>You shouldn&#8217;t need to change any settings as standard, bar changing the name for better organization. Photoshop is now recording your actions. So, all you need to do is re-size the image. Go to image size, and alter the dimensions. The action will change any image to these dimensions. Then hit save.</p>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/7c.jpg" width="600" /></div>
<p>Finally, press stop on the action palette.</p>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/7d.jpg" width="600" /></div>
<p>Now, when you press play on the action you&#8217;ve created, Photoshop will follow the list of defined actions on your image. Although very simple, an action such as this one could save you hours of monotonous resizing photos and images. This is only a very simple look at actions. They can do so much more, so take your time to get to know them and really use them. The beauty of them is in how you can record basically any action in Photoshop &#8211; selecting, changing styles, transforming, re-sizing and saving. </p>
<h2>iPhone &amp; UI Design</h2>
<p>Do you work with user interfaces? If so, you really need to download a GUI element pack for Photoshop.</p>
<p>There are many available for most popular operating systems and mobile platforms. </p>
<p>For example, if you work with the iPhone, you can download the iPhone GUI pack that contains all elements available in the iPhone interface library, and then simply start designing your app. Simple, quick and much easier than attempting to create these from scratch.</p>
<h3>Android GUI Kit</h3>
<div class="tutorial_image"><a href="http://www.smashingmagazine.com/2009/08/18/android-gui-psd-vector-kit/"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/9.jpg" width="600" /></a></div>
<p><a href="http://www.smashingmagazine.com/2009/08/18/android-gui-psd-vector-kit/">http://www.smashingmagazine.com/2009/08/18/android-gui-psd-vector-kit/</a></p>
<p><strong>Teehan Lax Kits</strong></p>
<p>The agency, Teehan Lax have several high quality, life-like UI kits. These are great for building an iphone app sales site, or designing the actual UI of an app. Kits are available for the iPhone, Palm Pre and Browsers.</p>
<h3>Palm Pre</h3>
<div class="tutorial_image"><a href="http://www.teehanlax.com/blog/2009/07/08/palm-pre-gui-psd/"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/7.jpg" width="600" /></a></div>
<p><a href="http://www.teehanlax.com/blog/2009/07/08/palm-pre-gui-psd/">http://www.teehanlax.com/blog/2009/07/08/palm-pre-gui-psd/</a></p>
<h3>iPhone</h3>
<div class="tutorial_image"><a href="http://www.teehanlax.com/blog/2008/11/06/iphone-gui-psd-update-13/"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/6.jpg" width="600" /></a></div>
<p><a href="http://www.teehanlax.com/blog/2008/11/06/iphone-gui-psd-update-13/">http://www.teehanlax.com/blog/2008/11/06/iphone-gui-psd-update-13/</a></p>
<h3>Browser Elements</h3>
<div class="tutorial_image"><a href="http://www.teehanlax.com/blog/2008/12/16/browser-form-elements-psd/"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/8.jpg" width="600" /></a></div>
<p><a href="http://www.teehanlax.com/blog/2008/12/16/browser-form-elements-psd/">http://www.teehanlax.com/blog/2008/12/16/browser-form-elements-psd/</a></p>
<h2>Conclusion</h2>
<p>I hope we&#8217;ve given you some tips that you can use to improve your productivity and efficiency. Photoshop is a wonderful tool, but, if we&#8217;re not careful, we can find ourselves repeating the sames tasks over and over. So be sure to implement the above tips and start saving time, money and your sanity!</p>
<h3><a href="http://nettuts.s3.amazonaws.com/594_timeSavingTips/project_base.zip">Download the Project Base</a></h3>
<div class="tutorial_image"><a href="http://nettuts.s3.amazonaws.com/594_timeSavingTips/project_base.zip"><img src="http://nettuts.s3.cdn.plus.org/594_timeSavingTips/img/10.jpg" width="600" /></a></div>
<p>Do you have any Photoshop time-saving tips? Have any ideas on other tasks that could be automated to save time and repetition? Feel free to share them with the community via the comments.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/vFQ5FqoMrQYkjIKcZNQc1LSTuqs/0/da"><img src="http://feedads.g.doubleclick.net/~a/vFQ5FqoMrQYkjIKcZNQc1LSTuqs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vFQ5FqoMrQYkjIKcZNQc1LSTuqs/1/da"><img src="http://feedads.g.doubleclick.net/~a/vFQ5FqoMrQYkjIKcZNQc1LSTuqs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=jmAR4vAZwDo:PGT7bhVkiLk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=jmAR4vAZwDo:PGT7bhVkiLk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=jmAR4vAZwDo:PGT7bhVkiLk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=jmAR4vAZwDo:PGT7bhVkiLk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=jmAR4vAZwDo:PGT7bhVkiLk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=jmAR4vAZwDo:PGT7bhVkiLk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=jmAR4vAZwDo:PGT7bhVkiLk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=jmAR4vAZwDo:PGT7bhVkiLk:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/jmAR4vAZwDo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/design-tutorials/save-time-and-money-by-systematizing-your-photoshop-workflow/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/design-tutorials/save-time-and-money-by-systematizing-your-photoshop-workflow/</feedburner:origLink></item>
		<item>
		<title>Quick Tip: My Favorite New IDE: WebStorm</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/SA6W9kpTIQ4/</link>
		<comments>http://net.tutsplus.com/tutorials/tools-and-tips/quick-tip-my-favorite-new-ide-web-storm/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 17:28:05 +0000</pubDate>
		<dc:creator>Jeffrey Way</dc:creator>
				<category><![CDATA[Tools & Tips]]></category>
		<category><![CDATA[code editors]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9781</guid>
		<description><![CDATA[
Over the weekend, Elijah Manor tweeted about a new IDE, called WebStorm, that is currently being offered as a public preview, from JetBrains. After spending a few hours with it, I&#8217;m extremely impressed! In this video quick tip, I thought I&#8217;d show you some of my favorite features that you, frankly, just don&#8217;t see much [...]]]></description>
			<content:encoded><![CDATA[<p>
Over the weekend, <a href="http://twitter.com/elijahmanor">Elijah Manor</a> tweeted about a new IDE, called <a href="http://www.jetbrains.com/webide/">WebStorm</a>, that is currently being offered as a public preview, from <a href="http://www.jetbrains.com/webide/">JetBrains</a>. After spending a few hours with it, I&#8217;m extremely impressed! In this video quick tip, I thought I&#8217;d show you some of my favorite features that you, frankly, just don&#8217;t see much in other code editors.
</p>
<p><span id="more-9781"></span></p>
<div class="tutorial_image">
<object width="600" height="450"><param name="movie" value="http://www.youtube.com/v/NIx4tScmBos&#038;hl=en_US&#038;fs=1&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/NIx4tScmBos&#038;hl=en_US&#038;fs=1&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="450"></embed></object>
</div>
<h3>Alternative Viewing Options</h3>
<ul>
<li><a href="http://screenr.com/Kfh">Screenr (MP4)</a></li>
</ul>
<h2>Notable Features</h2>
<ul>
<li>Not as bloated as other IDEs, like Aptana</li>
<li>Git integration </li>
<li>Fast intellisense </li>
<li>Vertical Selecting (Option + select)</li>
<li>CSS lookup on markup (Shift + Command + I) </li>
<li>Definition lookup (Control J) </li>
<li>Immediately finds formatting errors in your code </li>
<li>Advanced debugging </li>
<li>Plenty of <a href="http://www.jetbrains.net/devnet/docs/DOC-1154">skins</a> </li>
<li><a href="http://net.tutsplus.com/tutorials/tools-and-tips/learn-how-to-write-lightning-fast-code-in-4-minutes-screencast/">Zen coding</a> implementation! (Such as, ul#nav>li*4>a)</li>
<li>Quickly and easily export inline CSS and JS to external files. </li>
</ul>
<h2>What Do You Think?</h2>
<p>So, if you&#8217;re curious, take some time to <a href="http://www.jetbrains.com/webide/">look over WebStorm</a> and let me know what you think! I&#8217;m still learning it too, so let me know if you found any cool features that I didn&#8217;t mention. </p>

<p><a href="http://feedads.g.doubleclick.net/~a/8crYH0Y6ePf1tJMbTe_O4oDqiYU/0/da"><img src="http://feedads.g.doubleclick.net/~a/8crYH0Y6ePf1tJMbTe_O4oDqiYU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8crYH0Y6ePf1tJMbTe_O4oDqiYU/1/da"><img src="http://feedads.g.doubleclick.net/~a/8crYH0Y6ePf1tJMbTe_O4oDqiYU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=SA6W9kpTIQ4:Yrl7g_FtZ_g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=SA6W9kpTIQ4:Yrl7g_FtZ_g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=SA6W9kpTIQ4:Yrl7g_FtZ_g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=SA6W9kpTIQ4:Yrl7g_FtZ_g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=SA6W9kpTIQ4:Yrl7g_FtZ_g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=SA6W9kpTIQ4:Yrl7g_FtZ_g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=SA6W9kpTIQ4:Yrl7g_FtZ_g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=SA6W9kpTIQ4:Yrl7g_FtZ_g:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/SA6W9kpTIQ4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/tools-and-tips/quick-tip-my-favorite-new-ide-web-storm/feed/</wfw:commentRss>
		<slash:comments>118</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/tools-and-tips/quick-tip-my-favorite-new-ide-web-storm/</feedburner:origLink></item>
		<item>
		<title>Uncovering jQuery’s Hidden Features</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/sNBgElc3bIw/</link>
		<comments>http://net.tutsplus.com/tutorials/javascript-ajax/uncovering-jquerys-hidden-features/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 16:15:53 +0000</pubDate>
		<dc:creator>James Padolsey</dc:creator>
				<category><![CDATA[JavaScript & AJAX]]></category>
		<category><![CDATA[javascript library features]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery gems]]></category>
		<category><![CDATA[jquery hidden features]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9472</guid>
		<description><![CDATA[jQuery is not always as it appears. There&#39;s a lot of cool stuff going on under the surface, and there are many methods just waiting to be discovered, and many potential usages of jQuery&#39;s API that you may not have considered before. In this article I&#39;ll be taking you through a few of the not-so-obvious [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery is not always as it appears. There&#39;s a lot of cool stuff going on under the surface, and there are many methods just waiting to be discovered, and many potential usages of jQuery&#39;s API that you may not have considered before. In this article I&#39;ll be taking you through a few of the not-so-obvious things I&#39;ve discovered about jQuery.</p>
<p><span id="more-9472"></span></p>
<h2><span>1. </span>Understand jQuery!</h2>
<p>When you call <em>&#39;jQuery&#39;</em> what happens?</p>
<p>The jQuery function itself is very simple:</p>
<pre name="code" class="js">
jQuery = function (selector, context) {
    // The jQuery object is actually just the init constructor &#39;enhanced&#39;
    return new jQuery.fn.init(selector, context);
};
</pre>
<p>Under its skin, the jQuery function (commonly referred to as the &quot;wrapper&quot; function) simply returns an instantiated jQuery object &#8212; i.e. an instance of the <em>&#39;jQuery.fn.init&#39;</em> constructor.</p>
<p>This is useful to know; with this information we know that each time we call <em>&#39;jQuery&#39;</em> we&#39;re actually creating a totally unique object with a set of properties. jQuery is clever in that it gives you an object that can be treated as an array. Each of your elements (all together, commonly known as the &quot;collection&quot;) is referenced within the object under a numerical index, just like within an array. And jQuery also gives this object a <em>&#39;length&#39;</em> property, just as you would expect from an array. This opens up a world of possibilities. For one, it means that we can borrow some functionality from <em>&#39;Array.prototype&#39;</em>. jQuery&#39;s <em>&#39;slice&#39;</em> method is a good example of this &#8212; modified from the source:</p>
<pre name="code" class="js">
/* ... jQuery.fn.extend({ ... */
slice: function() {
    return this.pushStack(
        Array.prototype.slice.apply( this, arguments ),
        &quot;slice&quot;,
        Array.prototype.slice.call(<WBR>arguments).join(&quot;,&quot;)
    );
},
/* ... */
</pre>
<p>The native <em>&#39;slice&#39;</em> method doesn&#39;t care that <em>&#39;this&#39;</em> is not a real array&#8211; it&#39;ll be fine with anything that&#39;s got a <em>&#39;length&#39;</em> property and <em>[0]</em>, <em>[1]</em>, <em>[2]</em> etc.</p>
<p>There are some other interesting properties within this jQuery object &#8212; <em>&#39;.selector&#39;</em> and <em>&#39;.context&#39;</em> will, most of the time, reflect the arguments that you pass into <em>&#39;jQuery(&#8230;)&#39;</em>. </p>
<pre name="code" class="js">
var jqObject = jQuery(&#39;a&#39;);
jqObject.selector; // =&gt; &quot;a&quot;</pre>
<p>One thing that&#39;s important to note is that jQuery will sometimes give you new jQuery objects to work with. If you run a method that changes the collection in some way, such as <em>&#39;.parents()&#39;</em>, then jQuery won&#39;t modify the current object; it&#39;ll simply pass you a brand new one:</p>
<pre name="code" class="js">
var originalObject = jQuery(&#39;a&#39;);
var anotherObject = originalObject.parents();

originalObject === anotherObject; // =&gt; false
</pre>
<p>All methods that appear to mutate the collection in some way return a brand new jQuery object &#8212; you can still access the old object though, via <em>&#39;.end()&#39;</em>, or more verbosely, via <em>&#39;.prevObject&#39;</em>.</p>
<h2><span>2. </span>Bread-and-butter Element Creation</h2>
<p>Central to jQuery&#39;s DOM capabilities, is its element creation syntax. 1.4 brought with it an entirely new way to create your elements quickly and succinctly. E.g.</p>
<pre name="code" class="js">
var myDiv = jQuery(&#39;&lt;div/&gt;&#39;, {
    id: &#39;my-new-element&#39;,
    class: &#39;foo&#39;,
    css: {
        color: &#39;red&#39;,
        backgrondColor: &#39;#FFF&#39;,
        border: &#39;1px solid #CCC&#39;
    },
    click: function() {
        alert(&#39;Clicked!&#39;);
    },
    html: jQuery(&#39;&lt;a/&gt;&#39;, {
        href: &#39;#&#39;,
        click: function() {
            // do something
            return false;
        }
    })
});
</pre>
<p>As of 1.4 you can pass a second argument to the jQuery function when you&#39;re creating an element &#8212; the object you pass will, for the most part, act as if you were passing it to <em>&#39;.attr(&#8230;)&#39;</em>. However, jQuery will map some of the properties to its own methods, for example, the <em>&#39;click&#39;</em> property maps to jQuery&#39;s <em>&#39;click&#39;</em> method (which binds an event handler for the <em>&#39;click&#39;</em> event) and <em>&#39;css&#39;</em> maps to jQuery&#39;s <em>&#39;css&#39;</em> method etc.</p>
<p>To check out what properties map to jQuery&#39;s methods, open your console and type <em>&#39;jQuery.attrFn&#39;</em>.</p>
<h2><span>3. </span>Serialize your Inputs</h2>
<p>jQuery provides a method that you can use to serialize all of the inputs within one or more forms. This is useful when submitting data via XHR (&quot;Ajax&quot;). It&#39;s been in jQuery for a long time but it&#39;s not often talked about and so many developers don&#39;t realise it&#39;s there. Submitting an entire form via Ajax, using jQuery, couldn&#39;t be simpler:</p>
<pre name="code" class="js">
var myForm = $(&#39;#my-form&#39;);
jQuery.post(&#39;submit.php&#39;, myForm.serialize(), function(){
    alert(&#39;Data has been sent!&#39;);
});
</pre>
<p>jQuery also provides the <em>&#39;serializeArray&#39;</em> method, which is designed to be used with multiple forms, and the <em>&#39;param&#39;</em> helper function (under the jQuery namespace) which takes a regular  object and returns a query string, e.g.</p>
<pre name="code" class="js">
var data = {
    name: &#39;Joe&#39;,
    age: 44,
    profession: &#39;Web Developer&#39;
};

jQuery.param(data); // =&gt; &quot;name=Joe&amp;age=44&amp;profession=<WBR>Web+Developer&quot;
</pre>
<h2><span>4. </span>Animate Anything</h2>
<p>jQuery&#39;s <em>&#39;animate&#39;</em> method is probably the most flexible of jQuery&#39;s methods. It can be used to animate pretty much anything, not just CSS properties, and not just DOM elements. This is how you would normally use <em>&#39;animate&#39;</em>:</p>
<pre name="code" class="js">
jQuery(&#39;#box&#39;).animate({
    left: 300,
    top: 300
});
</pre>
<p>When you specify a property to animate (e.g. <em>&#39;top&#39;</em>) jQuery checks to see if you&#39;re animating something with a style property (<em>&#39;element.style&#39;</em>), and it checks if the specified property (<em>&#39;top&#39;</em>) is defined under <em>&#39;style&#39;</em> &#8212; if it&#39;s not then jQuery simply updates <em>&#39;top&#39;</em> on the element itself. Here&#39;s an example:</p>
<pre name="code" class="js">
jQuery(&#39;#box&#39;).animate({
    top: 123,
    foo: 456
});
</pre>
<p><em>&#39;top&#39;</em> is a valid CSS property, so jQuery will update <em>&#39;element.style.top&#39;</em>, but <em>&#39;foo&#39;</em> is <strong>not</strong> a valid CSS property, so jQuery will simply update <em>&#39;element.foo&#39;</em>.</p>
<p>We can use this to our advantage. Let&#39;s say, for example, that you want to animate a square on a canvas. First let&#39;s define a simple constructor and a <em>&#39;draw&#39;</em> method that&#39;ll be called on every step of the animation:</p>
<pre name="code" class="js">
function Square(cnvs, width, height, color) {

    this.x = 0;
    this.y = 0;
    this.width = width;
    this.height = height;
    this.color = color;

    this.cHeight = cnvs.height;
    this.cWidth = cnvs.width;
    this.cntxt = cnvs.getContext(&#39;2d&#39;);

}

Square.prototype.draw = function() {

    this.cntxt.clearRect(0, 0, this.cWidth, this.cHeight);
    this.cntxt.fillStyle = this.color;
    this.cntxt.fillRect(this.x, this.y, this.width, this.height);

};
</pre>
<p>We&#39;ve created our &#39;Square&#39; constructor, and one of its methods. Creating a canvas and then animating it couldn&#39;t be simpler:</p>
<pre name="code" class="js">
// Create a &lt;canvas/&gt; element
var canvas = $(&#39;&lt;canvas/&gt;&#39;).appendTo(&#39;body&#39;<WBR>)[0];
canvas.height = 400;
canvas.width = 600;

// Instantiate Square
var square = new Square(canvas, 70, 70, &#39;rgb(255,0,0)&#39;);

jQuery(square).animate({
    x: 300,
    y: 200
}, {
    // &#39;draw&#39; should be called on every step
    // of the animation:
    step: jQuery.proxy(square, &#39;draw&#39;),
    duration: 1000
});
</pre>
<p>This is a very simple effect, but it does clearly demonstrate the possibilities. You can see it in action here: <a href="http://jsbin.com/ocida" target="_blank">http://jsbin.com/ocida</a> (this will only work in browsers that support the HTML5 canvas)</p>
<h2><span>5. </span>jQuery.ajax Returns the XHR Object</h2>
<p>jQuery&#39;s Ajax utility functions (<em>&#39;jQuery.ajax&#39;</em>, <em>&#39;jQuery.get&#39;</em>, <em>&#39;jQuery.post&#39;</em>) all return an <em>&#39;XMLHttpRequest&#39;</em> object which you can use to perform subsequent operations on any request. For example:</p>
<pre name="code" class="js">
var curRequest;

jQuery(&#39;button.makeRequest&#39;).<WBR>click(function(){
    curRequest = jQuery.get(&#39;foo.php&#39;, function(response){
        alert(&#39;Data: &#39; + response.responseText);
    });
});

jQuery(&#39;button.cancelRequest&#39;)<WBR>.click(function(){
    if (curRequest) {
        curRequest.abort(); // abort() is a method of XMLHttpRequest
    }
});
</pre>
<p>Here we&#39;re making a request whenever the <em>&#39;makeRequest&#39;</em> button is clicked &#8212; and we&#39;re cancelling the active request if the user clicks the <em>&#39;cancelRequest&#39;</em> button. </p>
<p>Another potential usage is for synchronous requests:</p>
<pre name="code" class="js">
var myRequest = jQuery.ajax({
    url: &#39;foo.txt&#39;,
    async: false
});

console.log(myRequest.<WBR>responseText);
</pre>
<p>Read more about the <em><a href="https://developer.mozilla.org/en/XMLHttpRequest" target="_blank">&#39;XMLHttpRequest&#39;</a></em> object and also be sure to check out <a href="http://api.jquery.com/category/ajax/" target="_blank">jQuery&#39;s Ajax utilities</a>. </p>
<h2><span>6. </span>Custom Queues</h2>
<p>jQuery has a built-in queuing mechanism that&#39;s used by all of its animation methods (all of which use <em>&#39;animate()&#39;</em> really). This queuing can be illustrated easily with a simple animation:</p>
<pre name="code" class="js">
jQuery(&#39;a&#39;).hover(function(){
    jQuery(this).animate({<WBR>paddingLeft:&#39;+=15px&#39;});
}, function(){
    jQuery(this).animate({<WBR>paddingLeft:&#39;-=15px&#39;});
});
</pre>
<p>Quickly hovering over a bunch of anchors and then hovering over them again will cause the animations to queue up and occur one at a time &#8212; I&#39;m sure many of you have witnessed this queuing effect before. If not, check it out here: <a href="http://jsbin.com/aqaku" target="_blank"><strong>http://jsbin.com/aqaku</strong></a></p>
<p>The <em>&#39;queue&#39;</em> method is similar to the well-known <em>&#39;each&#39;</em> method in how it&#39;s called. You pass a function, which will eventually be called for each of the elements in the collection:</p>
<pre name="code" class="js">
jQuery(&#39;a&#39;).queue(function(){
    jQuery(this).addClass(&#39;all-<WBR>done&#39;).dequeue();
});
</pre>
<p>Passing just a function to <em>&#39;queue&#39;</em> will cause that function to be added to the default <em>&#39;fx&#39;</em> queue, i.e. the queue used by all animations done by jQuery. Therefore, this function will not be called until all current animations occurring on  each element in the collection (in this case, all anchors) have completed.</p>
<p>Notice that we&#39;re adding a class of <em>&#39;all-done&#39;</em> in the function above. As outlined, this class will only be added when all current animations are complete. We&#39;re also calling the <em>&#39;dequeue&#39;</em> method. <strong>This is very important</strong>, as it will allow jQuery to continue with the queue (i.e. it lets jQuery know that you&#39;re finished with whatever you&#39;re doing). jQuery 1.4 provides another way of continuing the queue; instead of calling <em>&#39;dequeue&#39;</em>, simply call the first argument passed to your function:</p>
<pre name="code" class="js">
jQuery(&#39;a&#39;).queue(function(<WBR>nextItemInQueue){
    // Continue queue:
    nextItemInQueue();
});
</pre>
<p>This does exactly the same, although it&#39;s slightly more useful in that it can be called anywhere within your function, even within a mess of closures (that typically destroy the <em>&#39;this&#39;</em> keyword). Of course, pre-jQuery-1.4 you could just save a reference to <em>&#39;this&#39;</em>, but that would get a bit tiresome.</p>
<p>To add a function to a custom queue, simply pass your custom queue&#39;s name as the first argument and the function as the second:</p>
<pre name="code" class="js">
jQuery(&#39;a&#39;).queue(&#39;<WBR>customQueueName&#39;, function(){
    // Do stuff
    jQuery(this).dequeue(&#39;<WBR>customQueueName&#39;);
});
</pre>
<p>Notice that, since we&#39;re not using the default <em>&#39;fx&#39;</em> queue, we also have to pass our queue&#39;s name to the <em>&#39;dequeue&#39;</em> method, in order to allow jQuery to continue with our custom queue.</p>
<p>Read more about  <a href="http://api.jquery.com/queue" target="_blank"><em>&#39;queue&#39;</em></a>, <a href="http://api.jquery.com/dequeue/" target="_blank"><em>&#39;dequeue&#39;</em></a> and <a href="http://api.jquery.com/jQuery.queue/" target="_blank"><em>&#39;jQuery.queue&#39;</em></a>.</p>
<h2><span>7. </span>Event Namespacing</h2>
<p>jQuery provides a way for you to namespace events, which can be very useful when authoring plugins and third-party components. If needed, the user of your plugin can effectively disable your plugin by unbinding all event handlers that it&#39;s registered.</p>
<p>To add a namespace when registering an event handler, simply suffix the event name with a period and then your unique namespace (e.g. <em>&#39;<span>.fooPlugin</span>&#39;</em>):</p>
<pre name="code" class="js">
jQuery.fn.foo = function() {

    this.bind(&#39;click.fooPlugin&#39;, function() {
        // do stuff
    });

    this.bind(&#39;mouseover.<WBR>fooPlugin&#39;, function() {
        // do stuff
    });

    return this;
};

// Use the plugin:
jQuery(&#39;a&#39;).foo();

// Destroy its event handlers:
jQuery(&#39;a&#39;).unbind(&#39;.<WBR>fooPlugin&#39;);
</pre>
<p>Passing just the namespace to <em>&#39;unbind&#39;</em> will unbind all event handlers with that namespace.</p>
<h2>Conclusion</h2>
<p>So which ones did I miss? Any helpful features that you feel jQuery doesn&#8217;t document well enough? Let&#8217;s discuss in the comments!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/WA01DphnOQdl0SzTX7fYcInH-q8/0/da"><img src="http://feedads.g.doubleclick.net/~a/WA01DphnOQdl0SzTX7fYcInH-q8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/WA01DphnOQdl0SzTX7fYcInH-q8/1/da"><img src="http://feedads.g.doubleclick.net/~a/WA01DphnOQdl0SzTX7fYcInH-q8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=sNBgElc3bIw:PpZLTeBKIec:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=sNBgElc3bIw:PpZLTeBKIec:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=sNBgElc3bIw:PpZLTeBKIec:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=sNBgElc3bIw:PpZLTeBKIec:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=sNBgElc3bIw:PpZLTeBKIec:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=sNBgElc3bIw:PpZLTeBKIec:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=sNBgElc3bIw:PpZLTeBKIec:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=sNBgElc3bIw:PpZLTeBKIec:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/sNBgElc3bIw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/javascript-ajax/uncovering-jquerys-hidden-features/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/javascript-ajax/uncovering-jquerys-hidden-features/</feedburner:origLink></item>
		<item>
		<title>How to Create a Simple iTunes-like Slider</title>
		<link>http://feedproxy.google.com/~r/nettuts/~3/YF12A0umgaE/</link>
		<comments>http://net.tutsplus.com/tutorials/html-css-techniques/how-to-create-a-simple-itunes-like-slider/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:40:37 +0000</pubDate>
		<dc:creator>Siddharth</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[JavaScript & AJAX]]></category>
		<category><![CDATA[itunes slider]]></category>
		<category><![CDATA[slider]]></category>

		<guid isPermaLink="false">http://net.tutsplus.com/?p=9563</guid>
		<description><![CDATA[When space is at a premium, making use of sliders is the optimal way to present information. Today, we&#8217;ll take a look at how to create a slider similar to the one used in the iTunes store.


   

Developers often seek the functionality provided by sliders in order to fit lots of information in [...]]]></description>
			<content:encoded><![CDATA[<p>When space is at a premium, making use of sliders is the optimal way to present information. Today, we&#8217;ll take a look at how to create a slider similar to the one used in the iTunes store.</p>
<p><span id="more-9563"></span></p>
<div class="tutorial_image">
   <img src="http://nettuts.s3.amazonaws.com/585_slider/itunesVersion.jpg" alt="iTunes Version" />
</div>
<p>Developers often seek the functionality provided by sliders in order to fit lots of information in the space provided. But creating such a slider is not as difficult as you might think. With a little planning and some experimenting, you can create one rather quickly.</p>
<p> I believe a demo is worth a thousand words. <a href="http://nettuts.s3.cdn.plus.org/585_slider/demo/code.html">Hit the demo</a> and try it out yourselves. </p>
<div class="tutorial_image">
<a href="http://nettuts.s3.cdn.plus.org/585_slider/demo/code.html"><br />
<img src="http://nettuts.s3.cdn.plus.org/585_slider/images/1.jpg" alt="Tutorial Image" border="0" /><br />
</a>
</div>
<p>Interested? Let&#8217;s get started right away!</p>
<h2>Design Goals</h2>
<p>Before we start coding, here are a few goals for this widget. </p>
<ul>
<li>Minimize the space taken up by images by making the slideshow&#8217;s dimensions the same size of a single image and then fading between them.</li>
<li>Provide a vertical carousel of images on the side showing upcoming images.</li>
<li>Provide a method to manually move the carousel and the slideshow forward. In this instance, we make use of a simple anchor element.</li>
<li>On the carousel, the top most image is the next in line and will be displayed when the <em>next</em> button is clicked.</li>
<li>Minimize DOM manipulation as much as possible. That&#8217;s not to say we aren&#8217;t going to touch the DOM, it&#8217;s just that we aren&#8217;t going to meddle with the DOM too much.</li>
</ul>
<h2>Plan of Action</h2>
<p>There are actually a handful of techniques to make a widget like this. For our purposes today, I&#8217;m going to stick with a technique which adheres to a saying:</p>
<blockquote><p>When in doubt, use brute force.</p></blockquote>
<p><strong>Step 1:</strong> Setup the CSS for the gallery container so that all the main images collapse into taking the space of a single image. I&#8217;ll explain this point later below.</p>
<p><strong>Step 2:</strong> Setup the CSS for the thumbnail container so that only three images are visible at once.</p>
<p><strong>Step 3:</strong> Cycle through the images and assign a class to each thumbnail and image with a numeric index to identify each independently. For example, each image gets a class of <em>thumb-xx</em> where <em>xx</em> is a number.</p>
<p><strong>Step 4:</strong> When the <em>next</em> button is clicked, move the carousel one thumbnail up and then display the thumbnail&#8217;s corresponding image.</p>
<p>These are the basic steps involved in creating such an effect. I&#8217;ll explain each step in detail as we go along. </p>
<h2><span>Step 1:</span> Core Markup</h2>
<p>The HTML markup for the demo page looks like so:</p>
<pre name="code" class="html">
&lt;!DOCTYPE html&gt;
&lt;html lang="en-GB"&gt;
	&lt;head&gt;
		&lt;title&gt;iTunes slider&lt;/title&gt;
		&lt;link rel="stylesheet" href="style.css" type="text/css" /&gt;
	&lt;/head&gt;

	&lt;body&gt;
    	&lt;div id="container"&gt;
        	&lt;h1&gt;Create a simple iTunes-esque slider with jQuery&lt;/h1&gt;
		&lt;div&gt;by Siddharth for the lovely folks at Net Tuts&lt;/div&gt;
		&lt;p&gt;A simple slider/slideshow which mostly emulates the one on iTunes barring a few changes. Click the down button to cycle the images.&lt;/p&gt; 

		&lt;div id="gallery"&gt;
    		   &lt;img src="img/1.jpg" /&gt;
    		   &lt;img src="img/2.jpg" /&gt;
    		   &lt;img src="img/3.jpg" /&gt;
    		   &lt;img src="img/4.jpg" /&gt;
            	   &lt;img src="img/5.jpg" /&gt;
            	   &lt;img src="img/6.jpg" /&gt;
	        &lt;/div&gt;

                &lt;div id="thumbs"&gt;
    	   	   &lt;img src="img/11.jpg" /&gt;
    		   &lt;img src="img/22.jpg" /&gt;
    		   &lt;img src="img/33.jpg" /&gt;
    		   &lt;img src="img/44.jpg" /&gt;
            	   &lt;img src="img/55.jpg" /&gt;
            	   &lt;img src="img/66.jpg" /&gt;
	        &lt;/div&gt;

        	&lt;a href="#" id="next"&gt;&lt;/a&gt;
        &lt;/div&gt;

	&lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript" src="js/mocha.js"&gt;&lt;/script&gt;

	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Disregarding the boiler plate code, we have two container elements full of images: one for the main gallery images and one for the thumbnails. I&#8217;ve given an ID to both of them so they can be easily accessed from the JavaScript. We also include an anchor element which acts as the next button.</p>
<p>We include the jQuery library and our own script file at the end.</p>
<p>At the end of this stage, our demo page looks like just a list of images.</p>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/585_slider/images/2.jpg" alt="Tutorial Image" border="0" /></div>
<h2><span>Step 2:</span> CSS Styling</h2>
<pre name="code" class="css">
*{
	margin: 0;
	padding: 0;
	border: 0 none;
	outline: 0;
}

body{
	font-family: "Lucida Grande", "Verdana", sans-serif;
	font-size: 12px;
}

p{
	margin: 20px 0 40px 0;
}

h1{
	font-size: 30px;
	font-family: "Myriad Pro", "Lucida Grande", "Verdana", sans-serif;
	padding: 0;
	margin: 0;
}

h2{
	font-size: 20px;
}

#container{
	width: 900px;
	margin-left: auto;
	margin-right: auto;
	padding: 50px 0 0 0;
	position: relative;
}

img{
	display: block;
}

#gallery, #thumbs{
	float: left;
}

#gallery{
	width: 800px;
	height: 300px;
	overflow: hidden;
}

#gallery img{
	position: absolute;
}

#thumbs{
	width: 100px;
	height: 300px;
	overflow: hidden;
}

#next{
	display: block;
	width: 47px;
	height: 43px;
	background: url(img/arrow.png);
	position: relative;
	top: 257px;
	left: 855px;
}

#next:hover{
	background: url(img/arrowmo.png);
}

.clear{
	clear: both;
}
</pre>
<p>The CSS is pretty self explanatory but there are a couple of points I want you to take note of:</p>
<p>First up, notice that I&#8217;ve applied <em>position: absolute</em> to <em>#gallery img</em>. This makes sure that the images are stacked on top of each other instead of one below the other. This way we can later manipulate their opacity to decide which image to show.</p>
<p>Secondly, notice that the <em>thumbs</em> element has its height set to 300px. This is because the thumbnails in the demo are 100px tall each and I want the carousel to show 3 images at once. Essentially, for your own implementation, multiply the height of a thumbnail by the number of thumbnails you want to show at once to find the required height of the element.</p>
<p>Also, take note of the fact that we&#8217;ve set its <em>overflow</em> property to <em>hidden</em> to make sure no more than 3 thumbnails are shown at once.</p>
<p>After we&#8217;ve styled our slider, it looks like the image below. Notice that almost everything is in place. The last image is stacked at the top and is thus visible.</p>
<div class="tutorial_image"><img src="http://nettuts.s3.cdn.plus.org/585_slider/images/3.jpg" alt="Tutorial Image" border="0" /></div>
<h2><span>Step 3:</span> JavaScript Implementation</h2>
<p>Now that we have a solid framework and some basic styling in place, we can begin coding the required functionality. Note that we make extensive use of jQuery. Feel free to link to Google&#8217;s CDN if necessary.</p>
<h3>Procuring the Elements and Prepping them</h3>
<p>We first need to acquire the images and their corresponding thumbnails so that we can process them. </p>
<pre name="code" class="js">
	var images = $("#gallery img");
	var thumbs = $("#thumbs img");
        var index = 0;
</pre>
<p>The above snippet will take care of obtaining the list of images and thumbnails, and storing them for later use. We also create a variable called <em>index</em> to denote which element to start from. For now, I&#8217;m setting it to start from the first element. Note that <em>index</em> is zero based.</p>
<pre name="code" class="js">
	for (i=0; i&lt;thumbs.length; i++)
	{
		$(thumbs[i]).addClass("thumb-"+i);
		$(images[i]).addClass("image-"+i);
	}
</pre>
<p>Next, we just iterate through both the lists and and add a class of <em>thumb-xx</em> or <em>image-xx</em> to each element where xx is a number. This lets us look for each individual thumbnail or image independently. </p>
<h3>Hooking up the Handler</h3>
<p>We now need to create an event handler and attach it to the <em>next</em> button so that we can do something when the button is clicked.</p>
<pre name="code" class="js">
$("#next").click(sift);
</pre>
<p>The one liner above will take care of that. Essentially, we ask it to call the <em>sift</em> function everytime <em>next</em> is clicked.</p>
<pre name="code" class="js">
function sift()
	{
		if (index&lt;(thumbs.length-1)) {index+=1 ; }
		else {index=0}
		show (index);
	}
</pre>
<p>This is a very simple event handler actually. We just check to see what element is currently selected. If it is the last, we reset the index so the carousel goes back to the first element, thus creating a pseudo infinite carousel. Otherwise, we increment <em>index</em> by 1.</p>
<p>Next, we call the function <em>show</em>, passing in the <em>index</em> variable as a parameter. We&#8217;ll create the function in a bit.</p>
<h2><span>Step 4:</span> Implementing the Core Logic</h2>
<pre name="code" class="js">
function show(num)
	{
		images.fadeOut(400);
		$(".image-"+num).stop().fadeIn(400);
		var scrollPos = (num+1)*imgHeight;
		$("#thumbs").stop().animate({scrollTop: scrollPos}, 400);
	}
</pre>
<p>The <em>show</em> function implements the core functionality of this widget. Let me explain each part.</p>
<p>First, we fade out every image the <em>gallery</em> element contains. Next, we fade in just the required image making use of its class. Since each image can be accessed through its class and we have access to the positional index of the image, we just use the following selector: <em>&#8220;.image-&#8221;+num</em></p>
<p>Next, we need to scroll the <em>thumbnail</em> element so that the required image is at the top of the carousel. There are two ways to go on about doing this.</p>
<p>The first method makes use of jQuery&#8217;s <em>position</em> property. This lets us find the element&#8217;s position <em>relative to its parent element.</em> Unfortunately, I&#8217;ve been running into quite a few problems with it and Chrome which means we&#8217;ll have to use our second method.</p>
<p>The next method is actually just as simple. Since we can easily obtain the height of a thumbnail and since each thumbnail is required to be of the same height, we can easily just find the product of the nth element&#8217;s position in the list and the height of a thumbnail to obtain its offset from the top.</p>
<pre name="code" class="js">
var imgHeight = thumbs.attr("height");
</pre>
<p>The above line lets us obtain a thumbnail&#8217;s height. Remember that a collection of elements can be queried just like a normal element.</p>
<pre name="code" class="js">
var scrollPos = (num+1)*imgHeight;
</pre>
<p>We now calculate the offset of the thumbnail we need. Since we need the thumbnail of the next element in the list and not of that image itself, we increment it by 1 before multiplying it by the height.</p>
<p>With all this info, we can now scroll the element to the height we need.</p>
<pre name="code" class="js">
$("#thumbs").stop().animate({scrollTop: scrollPos}, 400);
</pre>
<p>We use jQuery&#8217;s animate property to alter the <em>scrollTop</em> property to the value we calculated above. If you are new to jQuery&#8217;s animation functions, refer to my <a href="http://net.tutsplus.com/tutorials/javascript-ajax/jquery-animations-a-7-step-program/">earlier article</a>. Essentially, we scroll the element x pixels from the top to create a carousel effect. </p>
<h2><span>Step 5:</span> A Few Tweaks</h2>
<h4>Polishing the Pseudo Infinite Effect</h4>
<p>We are essentially done but a few quick bits of code will make it a little bit more polished.</p>
<pre name="code" class="js">
thumbs.slice(0,3).clone().appendTo("#thumbs");
</pre>
<p>This line essentially takes the first three thumbnails, copies them over to the end of the list. The <em>slice</em> method selects the first three elements, the <em>clone</em> methods clones these DOM elements and finally the <em>appendTo</em> methods adds them to the passed element.</p>
<p>We can&#8217;t just use the <em>appendTo</em> method since it plucks the selected elements from their current position before placing it as required. We need the <em>clone</em> method to copy them first.</p>
<p>We do this to make sure when we approach the final few thumbnails, the illusion of an infinite carousel remains. Else, the user just sees empty blocks which isn&#8217;t really what we need.</p>
<h4>Making it Auto Rotate</h4>
<p>Making the widget auto rotate is actually very simple. Since we have a proper event handler in place, we just have to call the handler every n microseconds. The following line will take care of that:</p>
<pre name="code" class="js">
setInterval(sift, 8000);
</pre>
<p>In the above code, I&#8217;ve asked to call the <em>sift</em> function every eight seconds. Remember, the duration is passed in as microseconds so n thousand equals n seconds.</p>
<h4>Initializing the Widget</h4>
<p>Currently, the page loads with the widget uninitialized. We&#8217;ll need to rectify this. All we need to do is to call the <em>show</em> function passing in the starting position as a parameter.</p>
<p>After you&#8217;ve attached the event handler, add this: </p>
<pre name="code" class="js">
show(index);
</pre>
<h2>The Final Code</h2>
<p>And we are done! The final code looks like so:</p>
<pre name="code" class="js">
$(document).ready(function()
{
	var index = 0;
	var images = $("#gallery img");
	var thumbs = $("#thumbs img");
	var imgHeight = thumbs.attr("height");
	thumbs.slice(0,3).clone().appendTo("#thumbs");
	for (i=0; i&lt;thumbs.length; i++)
	{
		$(thumbs[i]).addClass("thumb-"+i);
		$(images[i]).addClass("image-"+i);
	}

	$("#next").click(sift);
	show(index);
	setInterval(sift, 8000);

	function sift()
	{
		if (index&lt;(thumbs.length-1)){index+=1 ; }
		else {index=0}
		show (index);
	}

	function show(num)
	{
		images.fadeOut(400);
		$(".image-"+num).stop().fadeIn(400);
		var scrollPos = (num+1)*imgHeight;
		$("#thumbs").stop().animate({scrollTop: scrollPos}, 400);
	}
});
</pre>
<h2>Conclusion</h2>
<p>And there you have it: we&#8217;ve created a simple but useful slider. Hopefully you&#8217;ve found this tutorial interesting and useful. Feel free to reuse this code elsewhere in your projects, and chime in within the comments if you are running into difficulties.</p>
<p>Questions? Nice things to say? Criticisms? Hit the comments section and leave me a comment. Happy coding!</p>
<ul class="webroundup">
<li>Follow us on <a href="http://www.twitter.com/nettuts">Twitter</a>, or subscribe to the <a href="http://feeds.feedburner.com/nettuts" title="Nettuts+ RSS Feed">Nettuts+ RSS Feed</a> for the best web development tutorials on the web. </li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/g4ywpjemk1zXHgwkxs-Lz_PnZdI/0/da"><img src="http://feedads.g.doubleclick.net/~a/g4ywpjemk1zXHgwkxs-Lz_PnZdI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/g4ywpjemk1zXHgwkxs-Lz_PnZdI/1/da"><img src="http://feedads.g.doubleclick.net/~a/g4ywpjemk1zXHgwkxs-Lz_PnZdI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/nettuts?a=YF12A0umgaE:9N-2LjL_Gy4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YF12A0umgaE:9N-2LjL_Gy4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/nettuts?i=YF12A0umgaE:9N-2LjL_Gy4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YF12A0umgaE:9N-2LjL_Gy4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/nettuts?i=YF12A0umgaE:9N-2LjL_Gy4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YF12A0umgaE:9N-2LjL_Gy4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/nettuts?i=YF12A0umgaE:9N-2LjL_Gy4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/nettuts?a=YF12A0umgaE:9N-2LjL_Gy4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/nettuts/~4/YF12A0umgaE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://net.tutsplus.com/tutorials/html-css-techniques/how-to-create-a-simple-itunes-like-slider/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		<feedburner:origLink>http://net.tutsplus.com/tutorials/html-css-techniques/how-to-create-a-simple-itunes-like-slider/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.650 seconds --><!-- This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Content Delivery Network via net.tutsplus.cdn.plus.org

Served from: exodus @ 2010-03-14 16:50:57 -->
