<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Блог маленького, но очень отважного программиста &#187; JQuery</title>
	<atom:link href="http://xo66ut.ru/archives/tag/jquery/feed" rel="self" type="application/rss+xml" />
	<link>http://xo66ut.ru</link>
	<description>PHP, MySQL, Javascript, JQuery, ExtJS, UML, и другие интернетости...…</description>
	<lastBuildDate>Tue, 04 Oct 2011 08:40:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Добавление индикатора загрузки в JQuery</title>
		<link>http://xo66ut.ru/archives/580</link>
		<comments>http://xo66ut.ru/archives/580#comments</comments>
		<pubDate>Thu, 05 May 2011 11:49:26 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[$.ajax]]></category>
		<category><![CDATA[$.ajaxSetup]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=580</guid>
		<description><![CDATA[
Любой пользовательский интерфейс, даже самый примитивный, сегодня не обходится без ajax запросов. Хорошо когда запросы проходят практически мгновенно, благодаря большой скорости соединения пользователя или по другим причинам, но что делать когда запрос длится очень долго? Нужно как-то сообщить пользователю, что все хорошо, скрипт не повис, отправка данных идет, &#8220;полет нормальный&#8221;. Для этого обычно отображают индикатор [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><img class="aligncenter size-full wp-image-491" style="border: 0pt none;background-color:#39414A;padding:20px;" title="JQuery" src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" alt="jquery" width="215" height="53" /></div>
<p>Любой пользовательский интерфейс, даже самый примитивный, сегодня не обходится без ajax запросов. Хорошо когда запросы проходят практически мгновенно, благодаря большой скорости соединения пользователя или по другим причинам, но что делать когда запрос длится очень долго? Нужно как-то сообщить пользователю, что все хорошо, скрипт не повис, отправка данных идет, &#8220;полет нормальный&#8221;. Для этого обычно отображают индикатор загрузки.</p>
<p>Используя JQuery.ajax очень легко отобразить и убрать индикатор загрузки когда это необходимо. Для этого существуют 2 события <em>beforeSend </em>и <em>complete</em>, на которые легко повесить соответствующее отображение индикатора.  Ниже я создаю div по событию<em> beforeSend</em> (запрос начался) и уничтожаю его по событию <em>complete </em>(запрос завершен).</p>
<pre class="brush: css;">
div.ds-loading {
 background-image: url(&quot;/images/admin/loader.gif&quot;);
 background-repeat: no-repeat;
 position: fixed;
 width: 126px;
 height: 22px;
 z-index: 11111;
}
</pre>
<pre class="brush: jscript;">
$.ajax({
  url: '/admin/photos/delete',
  data: &quot;photo_id=&quot; + photo_id,
  success: function(){
  },
  beforeSend: function(){
    //создаем div
    var loading = $(&quot;&lt;div&gt;&quot;, {
      &quot;class&quot; : &quot;ds-loading&quot;
    });
    //выравним div по центру страницы
    $(loading).css(&quot;top&quot;, ($(window).height()/2)-($(loading).height()/2)).css(&quot;left&quot;, ($(document).width()/2)-($(loading).width()/2));
    //добавляем созданный div в конец документа
    $(&quot;body&quot;).append(loading);
  },
  complete: function() {
    //уничтожаем div
    $(&quot;.ds-loading&quot;).detach();
  }
});
</pre>
<p>Но что делать, если таких запросов очень много? Вешать на каждый ajax запрос обработчики событий? Благодаря тому, что в JQuery 1.5 добавили дополнительные методы для работы с ajax, стало возможным, легко и непринужденно отобразить индикатор для всех JQuery ajax запросов выполняющийся на сайте, с помощью метода <strong>$.ajaxSetup</strong>. Просто добавляем следующий код перед началом первого ajax-запроса.</p>
<pre class="brush: jscript;">
$.ajaxSetup({
  beforeSend: function(){
    //создаем div
    var loading = $(&quot;&lt;div&gt;&quot;, {
      &quot;class&quot; : &quot;ds-loading&quot;
    });
    //выравним div по центру страницы
    $(loading).css(&quot;top&quot;, ($(window).height()/2)-($(loading).height()/2)).css(&quot;left&quot;, ($(document).width()/2)-($(loading).width()/2));
    //добавляем созданный div в конец документа
    $(&quot;body&quot;).append(loading);
  },
  complete: function() {
    //уничтожаем div
    $(&quot;.ds-loading&quot;).detach();
  }
});
</pre>
<p>Теперь нам не нужно вешать обработчики событий на каждый вызов JQuery.ajax, этот функционал теперь &#8220;преднастроен&#8221; в каждом вызове.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=580&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/580/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Запоминаем положение интерфейса средствами JavaScript</title>
		<link>http://xo66ut.ru/archives/526</link>
		<comments>http://xo66ut.ru/archives/526#comments</comments>
		<pubDate>Wed, 13 Oct 2010 06:46:03 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[userfriendly]]></category>
		<category><![CDATA[userinterface]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=526</guid>
		<description><![CDATA[
Очень важным моментом в интерфейсе сайта является сохранение его текущего положения, для того, чтобы после перезагрузки страницы, пользователю не пришлось заново повторять свои действия с настройкой интерфейса сайта под себя. Идеальным средством для хранения состояния пользовательского интерфейса является cookies. Всем известно как работать с куки с помощью серверных (backend) языков,  но зачастую проще это делать [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://xo66ut.ru/wp-content/uploads/2010/10/uisave.jpg"><img class="aligncenter size-full wp-image-530" style="border: 0pt none;" title="uisave" src="http://xo66ut.ru/wp-content/uploads/2010/10/uisave.jpg" alt="" width="496" height="146" /></a></p>
<p>Очень важным моментом в интерфейсе сайта является сохранение его текущего положения, для того, чтобы после перезагрузки страницы, пользователю не пришлось заново повторять свои действия с настройкой интерфейса сайта под себя. Идеальным средством для хранения состояния пользовательского интерфейса является cookies. Всем известно как работать с куки с помощью серверных (backend) языков,  но зачастую проще это делать напрямую из JavaScript. Конечно можно передавать данные интерфейса серверной части, а там уже сохранять их хоть в БД. Но как правило, если вы не разрабатывайте новый интерфейс для gmail, нет необходимости делать это для 5-6 параметров.</p>
<h2>JavaScript и Cookies.</h2>
<p>В JavaScript есть стандартные методы для работы с document.cookie, именно так происходит обращение к куки в JavaScript. Например функция для установки куки будет выглядеть следующим образом</p>
<pre class="brush: jscript;">
function setCookie(c_name,value,expiredays)
 {
        var exdate=new Date();
        exdate.setDate(exdate.getDate()+expiredays);
        document.cookie=c_name+ &quot;=&quot; +escape(value)+
        ((expiredays==null) ? &quot;&quot; : &quot;;expires=&quot;+exdate.toUTCString());
 }
</pre>
<p>Как вы видите не очень удобно, поэтому я и предпочитаю пользоваться JQuery плагинами, если конечно фреймворк в проекте уже присутствует, если нет, то подключать JQuery, только из-за работы с куки не рационально.  В принципе взяв <a href="http://www.w3schools.com/js/js_cookies.asp" target="_blank">готовые функции</a> для document.cookie или написав их самостоятельно, можно свести неудобства и количество кода к минимуму.</p>
<h2>Плагины cookies для JQuery.</h2>
<p>Если в вашем сайте уже используется JQuery, то наиболее простой способ наладить работу с cookies, это использовать плагин. Плагинов довольно много я обычно использую <a href="http://code.google.com/p/ezcookie/">ezCookie</a>. В плагине содержатся стандартные методы для работы с cookies &#8211; установка, чтение, удаление. На странице проекта есть детальное описание всех методов. Плагин ezCookie отличается от многих подобных автоматическим распознаванием значения установленной cookie, и, если это JSON данные, то функция автоматически возвращает JSON объект. Такой режим работы позволяет устанавливать subcookie, то есть множества пар имя:значение для одного cookie (для одной cookie переменной).</p>
<h2>Сохранение положения интерфейса.</h2>
<p>Давайте напишем небольшой пример, который позволит понять схему сохранения простых позиций интерфейса. Пусть у нас будет 5 разноцветных квадратов, которые по клику на кнопку &#8220;закрыть&#8221; закрываются, и текст на кнопке меняется на &#8220;открыть&#8221;. И при нажатии на кнопку &#8220;открыть&#8221; соответственно квадрат снова становится видимым.</p>
<p>Для этого воспользуемся стандартной JQuery функцией toggle (переключатель), которая в качестве аргументов принимает 2 функции, одна из которых срабатывает на четном щелчке мыши, другая на нечетном. Чтобы сохранить положение квадратов, мы в первой toggle функции будем устанавливать значение cookie в 0, а на второй функции в 1, ноль означает, что квадрат скрыт, а единица соответственно, что квадрат виден.</p>
<p>Здесь я использую функцию ezCookie <strong>$.setSubCookie</strong>, чтобы не увеличивать количество записей cookie. Так как структурно записи для каждого квадрата у нас равны, то все проще хранить в одной cookie с именем &#8220;ui_save&#8221;. В качестве дополнительных параметров метод <strong>$.setSubCookie</strong> позволяет установить время жизни cookies, но в данном случае используется время жизни по умолчанию.</p>
<p>Итак позицию интерфейса в зависимости от действий пользователя мы записали, теперь нам необходимо сделать так, чтобы после загрузки страницы интерфейс возвращался в записанное состояние. Для этого мы сначала считаем нашу куку функцией <strong>$.cookie(&#8220;ui_save&#8221;)</strong>, эта функция автоматически определяет какое значение установлено в куке и если это JSON, то она возвращает JSON объект, что в нашем случае и происходит. Далее для каждого квадрата мы проверяем значение и если оно равно нулю то вызываем событие click, которое установит нужное положение квадрата.</p>
<pre class="brush: jscript;">
	$(document).ready(function(){
		$(&quot;.close&quot;).toggle(
			function(){
				$(this).prev().slideUp(); //скрываем квадрат
				$(this).html(&quot;Открыть&quot;);
				var class_name = $(this).prev().attr(&quot;class&quot;);
//устанавливаем значение куки для конкретного квадрата в положение закрыть
				$.setSubCookie(&quot;ui_save&quot;, class_name, 0);
			},
			function(){
				$(this).prev().slideDown(); //разворачиваем квадрат
				$(this).html(&quot;Закрыть&quot;);
				var class_name = $(this).prev().attr(&quot;class&quot;);
//устанавливаем значение куки для конкретного квадрата в положение открыт
				$.setSubCookie(&quot;ui_save&quot;, class_name, 1);
			}
		);

		//Устанавливаем необходимую позицию интерфейса
		var ck = $.cookie(&quot;ui_save&quot;);
		for(key in ck){
			if(ck[key] == 0){
//вызываем событие &quot;закрыть&quot;
				$(&quot;.&quot; + key).next().trigger('click');
			}
		}

	});
</pre>
<p>То что получилось можно посмотреть <a href="http://xo66ut.ru/examples/uisave/ui_example.html">здесь</a>, после обновления страницы позиция интерфейса (закрытые, открытые квадраты) сохраняется.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=526&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/526/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>ExtJS теперь Sencha</title>
		<link>http://xo66ut.ru/archives/432</link>
		<comments>http://xo66ut.ru/archives/432#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:35:46 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=432</guid>
		<description><![CDATA[Ext JS + jQTouch + Raphaël = Sencha

&#8220;Интересные вещи происходят! сегодня мы объединяем силы с проектами jQTouch и Raphaël, а также меняем имя домена проекта с extjs.com на sencha.com. Эти проекты лидируют в своих областях и мы рады видеть в своих рядах их создателей Девида Канеду и Дмитрия Барановского. Мы считаем, что это сотрудничество приведет [...]]]></description>
			<content:encoded><![CDATA[<h2>Ext JS + jQTouch + Raphaël = Sencha</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-433" title="ext_js-sencha" src="http://xo66ut.ru/wp-content/uploads/2010/06/ext_js-sencha.jpg" style="border: 0" alt="" width="383" height="265" /></p>
<p>&#8220;<em>Интересные вещи происходят! сегодня мы объединяем силы с проектами jQTouch и Raphaël, а также меняем имя домена проекта с extjs.com на sencha.com. Эти проекты лидируют в своих областях и мы рады видеть в своих рядах их создателей Девида Канеду и Дмитрия Барановского. Мы считаем, что это сотрудничество приведет к впечатляющим результатам. &#8230; Sencha эт0 новое название нашей компании, а также разновидность япоского зеленого чая (</em>Так вот он какой стратегический напиток ExtJS разработчика ?!<em>). </em></p>
<p><em>Развитие Ext JS, Ext GWT, Designer, Direct и остального будет продолжаться, думаем только над переименованием Ext JS Designer на Sencha Designer. Одним из преимуществ переименования для нас является то, что мы разделяем названия компании и продукта. </em></p>
<p><em>Проекты jQTouch и Raphaël так и останутся под лицензией MIT. Мы создаем Sencha Labs подразделение, которое будет заниматься торговыми марками и авторскими правами всех некоммерческих проектов связанных с Sencha. Мы также рады сообщить, что Джонатан Старк известный разработчик мобильных приложений и автор двух книг под редакцией O’Reilly станет руководителем jQTouch (Добро пожаловать на борт Джонатан)</em>&#8221; &#8211; вот такое сообщение получили зарегистрированные на форуме Ext JS, позже оно было опубликовано и на сайте.</p>
<p>Что можно ожидать от объединения ? Я думаю только хороших новых результатов. jQTouch это jQuery плагин для разработки под мобильные девайсы типа iPhone, iPad и прочие «forward-thinking» девайсы. Как поможет эта библиотека в развитии Ext JS пока соевершенно не ясно. А Raphaël это крутая штука для разработки векторной графики под веб. Подключение этого проекта позволит модифицировать компоненты для построение графиков и диаграмм Ext JS, которые сейчас работают с помощью Flash.</p>
<p>Есть также мнение, что переименование связано с тем, что из компании ушел ее основатель Джек Слокум, или вся команда разработчиков ушла от него в новую компанию Sencha. Вот что пишут про это на сайте: &#8220;<em>После интенсивной работы над развитием ExtJS, за последние 18 месяцев  Джек стремительно прекратил свое участие. Хоть он и может вернуться на  некоторых условиях, мы желаем ему всего наилучшего.</em>&#8221;</p>
<p>В любом случае, что же действительно будет дальше покажет время.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=432&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/432/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Динамическая загрузка файлов &#8211; AJAX Upload</title>
		<link>http://xo66ut.ru/archives/368</link>
		<comments>http://xo66ut.ru/archives/368#comments</comments>
		<pubDate>Fri, 30 Apr 2010 11:40:39 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[userfriendly]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=368</guid>
		<description><![CDATA[
В размышлениях об интерактивности задавался мыслью как сделать удобный с точки зрения usability загрузчик файлов.  Плюс подогревал интерес к механизму работы ajax загрузчика в ExtJS. Делая однажды чат и разобравшись в ограничениях браузеров, узнал, что нет возможности отправлять файл по средством объекта xmlhttprequest. Поэтому было непонятно, как ExtJS uploader отправляет файлы, как будто делает это [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://xo66ut.ru/wp-content/uploads/2010/04/ajax_upload-e1272627550877.jpg"><img class="aligncenter size-full wp-image-376" title="ajax_upload" src="http://xo66ut.ru/wp-content/uploads/2010/04/ajax_upload-e1272627550877.jpg" alt="AJAX-Upload" width="543" height="282" /></a></p>
<p><a href="http://xo66ut.ru/wp-content/uploads/2010/04/ajax_upload-e1272627550877.jpg"></a>В размышлениях об интерактивности задавался мыслью как сделать удобный с точки зрения usability загрузчик файлов.  Плюс подогревал интерес к механизму работы <strong>ajax </strong>загрузчика в <strong>ExtJS</strong>. Делая однажды чат и разобравшись в ограничениях браузеров, узнал, что нет возможности отправлять файл по средством объекта <strong>xmlhttprequest</strong>. Поэтому было непонятно, как <strong>ExtJS </strong>uploader отправляет файлы, как будто делает это через <strong>ajax</strong>. Работая над созданием чата, я также ознакомиться с другими ограничениями браузеров, например на количество одновременных запросов к одному домену (ограничены двумя запросами), а также со всевозможными способами обхода этого ограничения. Там же для удобства применялся <strong>iframe </strong>транспорт, который позволяет отправлять обычные <strong>POST </strong>запросы через невидимый (0 px на 0 px) <strong>iframe</strong>. После этого мне сразу стал понятен механизм работы загрузчика файлов в <strong>ExtJS</strong>.<span id="more-368"></span></p>
<p>Решил добавить юзабильности в один из проектов и использовать этот способ для загрузки файлов, благо есть готовый плагин, называющийся <strong><a href="http://valums.com/ajax-upload/" target="_blank">AJAX Upload</a></strong>, хотя как я уже писал <strong>ajax </strong>тут не причем, все реализовано следующим образом:</p>
<ul>
<li> Плагин создает невидимый <strong>input </strong>над элементом, к которому вы привязываете нагрузку. То есть когда вы нажимаете на кнопку, появляется окно со стандартным выбором файла.</li>
<li>Затем когда вы выбираете файл плагин отправляет форму содержащую <strong>input </strong>с файлом через <strong>iframe</strong>.</li>
</ul>
<p><em>&#8220;Обычно для закачки файлов мы используем file input (&lt;input type=”file” /&gt;), его проблематично стилизовать. В современных веб приложениях этот input выглядит устаревшим. Можно конечно использовать для загрузки <strong>Flash</strong>, но <strong>Javascript </strong>прекрасно решает эту задачу. Плагин <strong>AJAX-Upload </strong>позволяет легко загружать несколько файлов без перезагрузки страницы. Он работает во всех браузерах и не требует никаких дополнительных библиотек для работы. К тому же он не затрагивает глобальных <strong>namespace</strong>&#8216;ов и прекрасно работает вместе с <strong>jQuery </strong>и <strong>Prototype</strong>.&#8221;</em></p>
<p>Работать с плагином довольно легко. Достаточно создать любой <strong>DOM </strong>элемент и привязать к нему плагин. Плагин отправляет файлы в виде обычного <strong>POST </strong>запроса. Поэтому можно обрабатывать их загрузку на любом серверном языке. На сайте плагина много работающий примеров. В плагине даже реализовано ограничение на расширения загружаемых файлов.</p>
<p>Распространяется плагин свободно под лицензией <strong>MIT</strong>.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=368&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/368/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Проблема с анимацией в JQuery</title>
		<link>http://xo66ut.ru/archives/358</link>
		<comments>http://xo66ut.ru/archives/358#comments</comments>
		<pubDate>Wed, 28 Apr 2010 12:21:35 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery animate]]></category>
		<category><![CDATA[userfriendly]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=358</guid>
		<description><![CDATA[Одной из главных особенностей JQuery является то, что эта библиотека позволяется вам легко подчеркнуть ваш дизайн, анимировав некоторые элементы. Речь идет об отображении элементов, их движении и изменении цветов. Первое часто используется для скрытия информации, такой например, как заголовки картинок, то есть по умолчанию они скрыты, а при наведении курсора они проявляются. Часто также этот [...]]]></description>
			<content:encoded><![CDATA[<p>Одной из главных особенностей JQuery является то, что эта библиотека позволяется вам легко подчеркнуть ваш дизайн, анимировав некоторые элементы. Речь идет об отображении элементов, их движении и изменении цветов. Первое часто используется для скрытия информации, такой например, как заголовки картинок, то есть по умолчанию они скрыты, а при наведении курсора они проявляются. Часто также этот эффект применяются для того чтобы показать информацию и рейтинг скриншота при наведении на него.<span id="more-358"></span></p>
<p>Есть частая проблема, точнее особенность JQuery, о которой часто забывают дизайнеры и разработчики, она заключается в том, что вся анимация на странице при вызове попадает в &#8220;стек&#8221;. Если у вас на странице есть множество элементов с анимацией, например фотографии в фотогаллерее, то когда пользователь быстро проведет по нескольким фотографиям и перестанет двигать мышью, он будет наблюдать как анимация появляется постепенно на каждом элементе. Наглядно эту проблему можно посмотреть на сайте <a href="http://druckbar.info/" target="_blank">druckbar</a>, если вы быстро проведете мышкой по четырем панелькам, то будете долго ждать пока в шапке появится соответствующие картинки.</p>
<p><a href="http://xo66ut.ru/wp-content/uploads/2010/04/jq_animate_stop.jpg"><img class="aligncenter size-full wp-image-364" title="jq_animate_stop" src="http://xo66ut.ru/wp-content/uploads/2010/04/jq_animate_stop.jpg" alt="Using JQuery animate stop" width="419" height="542" /></a></p>
<p>Вы можете решить эту проблему одним из следующих способ:</p>
<p>Использовать метод <strong>.stop(). </strong>Когда этот метод используется на элементе, он немедленно прекращает его анимацию, если конечно она есть. <strong> </strong></p>
<pre class="brush: jscript;">
$(&quot;ol#gallery li&quot;).hover(function () {
  $(&quot;.thumb-meta&quot;, this).stop().animate({ bottom: '0px' }, 400);
},
function () {
  $(&quot;.thumb-meta&quot;, this).stop().animate({ bottom: '-22px' }, 400);
});
</pre>
<p>Другой способ решить проблему со &#8220;стеком&#8221; анимации, это использовать плагины, например <a href="http://plugins.jquery.com/project/hoverIntent" target="_blank">hoverIntent</a>. Этот плагин делает анимацию доступной только, если пользователь двигает мышью достаточно медленно.</p>
<h2>Старайтесь не злоупотреблять с анимацией контента.</h2>
<p>Поскольку Javascript функции очень легко реализовать с помощью JQuery, многие увлекаются анимацией  и доставляют этим пользователю немало неудобств. Допустим, удобно использовать JQuery для подгрузки изображений по мере прокрутки текста, это позволяет быстро прогрузить страницу с множество картинок. Но зачем показывать эти изображения при помощи анимации ?! В этом нет никакаго смысла.</p>
<p>Поэтому, прежде чем анимировать, подумайте, не помещает ли анимация концентрации  пользователя на основном контенте. Анимация должна помогать пользователю, делать сайт более интерактивным, а не мешать ему работать с сайтом.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=358&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery animate, привлекаем внимание пользователя</title>
		<link>http://xo66ut.ru/archives/104</link>
		<comments>http://xo66ut.ru/archives/104#comments</comments>
		<pubDate>Fri, 03 Jul 2009 10:29:45 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JQuery animate]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=104</guid>
		<description><![CDATA[Столкнулся с тем, что необходимо было привлечь внимание пользователя к последней новости на сайте. Решил реализовать это на jQuery. Почитав официальную документацию, остановился на функции  animate. И написал простенькую функцию для манипулирования со свойствами div.
Итак&#8230;
html код банально:

&#60;div class=&#34;news_date&#34;&#62;2009-07-3&#60;/div&#62;

Свойство стилю:
.news_date { color:#0000FF; font-weight:bold;font-size:20px;}

Javascript код

&#60;script&#62;
//Запускаем после загрузки документа
$(document).ready(function(){
//Создаем функцию, которую потом будем запускать &#34;в цикле&#34;
function runIt() [...]]]></description>
			<content:encoded><![CDATA[<p>Столкнулся с тем, что необходимо было привлечь внимание пользователя к последней новости на сайте. Решил реализовать это на jQuery. Почитав официальную документацию, остановился на функции  animate. И написал простенькую функцию для манипулирования со свойствами div.<span id="more-104"></span></p>
<p>Итак&#8230;</p>
<p>html код банально:</p>
<pre class="brush: xml;">
&lt;div class=&quot;news_date&quot;&gt;2009-07-3&lt;/div&gt;

Свойство стилю:
.news_date { color:#0000FF; font-weight:bold;font-size:20px;}
</pre>
<p>Javascript код</p>
<pre class="brush: jscript;">
&lt;script&gt;
//Запускаем после загрузки документа
$(document).ready(function(){
//Создаем функцию, которую потом будем запускать &quot;в цикле&quot;
function runIt() {

var x=0;//навсякий случай вводим переменную - показатель, какой именно этап сейчас запущен, хотя вообще-то jQuery ставит всю анимацию &quot;в очередь&quot;.
$(&quot;.news_date&quot;).animate({
opacity: .1
}, 2000, &quot;linear&quot;, function(){x=1;} );

if (x=1) {
$(&quot;.news_date&quot;).animate({
opacity: .9
}, 2000, &quot;linear&quot;, function(){x=0;runIt();} );//callback функция, после завершения  анимациии, запустит нашу анимацию еще раз, бесконечный цикл.
}

}

runIt();//запускаем нашу фукцию сразу по загрузке документа

});
&lt;/script&gt;
</pre>
<p>Что мы делаем в функции: animate({opacity: .1}, 2000, &#8220;linear&#8221;, function(){x=1;} ); Изменяем параметры у класса .news_date, а имено параметр прозрачности, и делаем это в течении 2000 мс (милисекунд).<br />
Вторая функция полностью обратный процесс.</p>
<p>Пример можно посмотреть <a href="http://xo66ut.ru/examples/animate/index.html" target="_self">здесь</a>.<br />
P.S. При желании можно поэкспериментировать еще с такими параметрами:<br />
width:<br />
marginLeft:<br />
fontSize:<br />
borderWidth:</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=104&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/104/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Создание вкладок с помощью JQuery</title>
		<link>http://xo66ut.ru/archives/39</link>
		<comments>http://xo66ut.ru/archives/39#comments</comments>
		<pubDate>Wed, 20 May 2009 11:26:02 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[jquery tabs]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=39</guid>
		<description><![CDATA[Понадобилось мне сегодня создать простые вкладочки для одного из проектов, с  javascript я  дружу не очень сильно, поэтому путем не долгих поисков нашел готовое решение на английском языке. Система работы довольно простая, скрыть\показать слой (div), единственное что на JQuery все выглядит намного красивее, проще и удобнее. При клике на ссылку отображает соответствующее содержимое под ней.
 [...]]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне сегодня создать простые вкладочки для одного из проектов, с  javascript я  дружу не очень сильно, поэтому путем не долгих поисков нашел <a href="http://apricotstudios.wordpress.com/2008/08/29/jquery-tabs-tutorial/" target="_blank">готовое решение</a> на английском языке. Система работы довольно простая, скрыть\показать слой (div), единственное что на JQuery все выглядит намного красивее, проще и удобнее. При клике на ссылку отображает соответствующее содержимое под ней.<br />
<span id="more-39"></span> Собственно сам код для jQuery</p>
<pre class="brush: jscript;">
$(document).ready(function(){
$('#tabs div').hide(); // Скрываем все элементы div
$('#tabs div:first').show(); // Показываем только первый элемент div
$('#tabs ul li:first').addClass('active'); // Устанавливаем стиль для первого div в положении активный
$('#tabs ul li a').click(function(){ //Выполняем, если пользователь кликнул на ссылку
$('#tabs ul li').removeClass('active'); // Удаляем активный стиль со всех ссылок
$(this).parent().addClass('active'); //Устанавливаем активный стиль для нажатой ссылки
var currentTab = $(this).attr('href'); // Устанавливаем значение текущей вкладки в соответствии со значением нажатой ссылки
$('#tabs div').hide(); // Скрываем все элементы div
$(currentTab).show(); // Показываем div с id равынм значению текущего tab(вкладки)
return false;
});
});
</pre>
<p>HTML струтура для вкладок, используется не сортированный список для ссылок навигации и контейнер div для каждой секции. Каждая ссылка связанна по id с конкретным контейнером div.<br />
Собственно сам код HTML.</p>
<pre class="brush: xml;">
&lt;div id=&quot;tabs&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#tab-1&quot;&gt;Tab One&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tab-2&quot;&gt;Tab Two&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tab-3&quot;&gt;Tab Three&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tab-4&quot;&gt;Tab Four&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;tab-1&quot;&gt;
&lt;h3&gt;Tab 1&lt;/h3&gt;
&lt;p&gt;Some content&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;tab-2&quot;&gt;
&lt;h3&gt;Tab 2&lt;/h3&gt;
&lt;p&gt;Some content&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;tab-3&quot;&gt;
&lt;h3&gt;Tab 3&lt;/h3&gt;
&lt;p&gt;Some content&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;tab-4&quot;&gt;
&lt;h3&gt;Tab 4&lt;/h3&gt;
&lt;p&gt;Some content&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Ну и css стили для вкладок</p>
<pre class="brush: css;">
#tabs {
font-size: 90%;
margin: 20px 0;
}
#tabs ul {
float: right;
background: #E3FEFA;
width: 600px;
padding-top: 4px;
}
#tabs li {
margin-left: 8px;
list-style: none;
}
* html #tabs li {
display: inline; /* ie6 double float margin bug */
}
#tabs li,
#tabs li a {
float: left;
}
#tabs ul li a {
text-decoration: none;
padding: 8px;
color: #0073BF;
font-weight: bold;
}
#tabs ul li.active {
background: #CEE1EF url(img/nav-right.gif) no-repeat right top;
}
#tabs ul li.active a {
background: url(img/nav-left.gif) no-repeat left top;
color: #333333;
}
#tabs div {
background: #CEE1EF;
clear: both;
padding: 20px;
min-height: 200px;
}
#tabs div h3 {
text-transform: uppercase;
margin-bottom: 10px;
letter-spacing: 1px;

#tabs div p {
line-height: 150%;
}
</pre>
<p>Пример можно посмотреть <a href="http://xo66ut.ru/examples/tabs/tabs-jq.html" target="_self">здесь</a>.<br />
Либо скачать целиком <a href="http://xo66ut.ru/examples/tabs.rar">тут</a>.<br />
Оказывается есть доки по созданию вкладок на сайте <a href="http://docs.jquery.com/UI/Tabs">JQuery</a>. Надо будет посмотреть.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=39&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/39/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

