<?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>Уроки PHP, Mootools, JavaScript, ActionScript, HTML, CSS</title>
	<atom:link href="http://php.infoniac.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://php.infoniac.ru</link>
	<description>Уроки программирования от новичка новичкам</description>
	<lastBuildDate>Fri, 27 Aug 2010 07:31:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ваш опыт нужен тысячам!</title>
		<link>http://php.infoniac.ru/katalog-statei-po-web-programmirovaniju.html</link>
		<comments>http://php.infoniac.ru/katalog-statei-po-web-programmirovaniju.html#comments</comments>
		<pubDate>Fri, 27 Aug 2010 07:13:11 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Поисковые системы]]></category>
		<category><![CDATA[Работа с сайтом]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[акция]]></category>
		<category><![CDATA[веб-программирование]]></category>
		<category><![CDATA[опыт]]></category>
		<category><![CDATA[размещение статей]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=643</guid>
		<description><![CDATA[Объявляется преобразование моего блога в белый каталог статей на тему веб-программирования для новочков! Если вы хотите разметисть у меня на блоге свою статью на тему веб-программирования и что бы в статей было упоминание Вашего сайте, читайте дальше!]]></description>
			<content:encoded><![CDATA[<p>Уважаемые читатели!<br />
Веб-программированию многие, как я, пытаются научиться на дому, т.е. не ходят на курсы, не учатся в ВУЗах или же просто ищут в интернете интересные задачи на тему программирования.</p>
<p>Судя по некоторым отзывам, мои <a href="http://php.infoniac.ru/category/mootools">уроки по Mootools</a> очень помогают другим новичкам в плане Mootools. Но у меня, к сожалению, не так много интересных задач, которые я мог бы выложить в блог для рассмотрения и помощи другим новичкам, таким как я. Потому, хочу объявить о небольшой акции:</p>
<blockquote style="font-weight:bold;"><p>Если Вы также, как и я, учитесь программированию и у вас есть интересные задачи, темы, уроки? которыми вы готовы поделиться, пожалуйста, присылайте Ваши материалы мне на php - собака - инфониак.ru (думаю, разберете, как правильно адрес пишется) или просто через <a href="http://php.infoniac.ru/contact-proglammer.html">мою горячую линию</a>.</p></blockquote>
<p>Понятное дело, никто просто так не будет делиться своим опытом, но и понятное дело, что я не просто так предлагаю размещать Ваш опыт у Себя в блоге. Итак, если соберетесь прислать мне свой материал, пожалуйста, убедитесь в том, что:</p>
<ol>
<li>материал написан на тему веб-программирования, поисковых систем, верстки сайтов, дизайна веб-страниц и вообще интернете. Не допускаются темы заработка в интернете и всего такого. Если я посчитаю, что материал не будет интересен мои читателям, я:</li>
</ol>
<div style="margin-left:25px;">- отредактирую материал, если это поможет ему получить оттенок допустимой тематики;<br />
- отклоню материал с отпиской автору о причине сего.</div>
<ol start="2">
<li>материал уникален;</li>
<li>опрятно написан, без ошибок и опечаток (не так как у меня <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  );</li>
<li>состоит не менее чем из 300 слов, связанных между собой смыслом (см. пункт выше);</li>
<li>он уникален (см. пункт 2), если вы просто хотите перепостить материал уже размещенный на вашем сайте;</li>
<li>что в статье не просто теория, но и практические примеры (но и просто теория - не плохо, присылайте рассмотрим... я бы и сам попробовал придумать и прикрутить примеры);</li>
<li>если еще что-нибудь придумаю, обновлю <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</li>
</ol>
<p>С моей стороны вы получите в этом материале ссылку на Ваш блог и благодарности всех читателей за еще один хороший урок с примером <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/katalog-statei-po-web-programmirovaniju.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Уроки Mootools – Регулярные выражения – Урок 13</title>
		<link>http://php.infoniac.ru/regulyarnye-vyrazheniya-urok-13.html</link>
		<comments>http://php.infoniac.ru/regulyarnye-vyrazheniya-urok-13.html#comments</comments>
		<pubDate>Sun, 11 Jul 2010 05:22:15 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Уроки новичка]]></category>
		<category><![CDATA[contains]]></category>
		<category><![CDATA[escapeRegExp]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[поиск по регулярным выражениям]]></category>
		<category><![CDATA[регулярные выражения]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=596</guid>
		<description><![CDATA[Очень и очень трудно мне далось написание этого урока. Регулярные выражения вообще не самое простое, что есть в программировании, а уж для меня, так тем более. Например, пока я писал его, познакомился с функцией escapeRegExp(), которую хотел применить при доработке под свои нужды класса Mootools для поиска и подсветки текста на странице (аналог обычного поиска [...]]]></description>
			<content:encoded><![CDATA[<p>Очень и очень трудно мне далось написание этого урока. Регулярные выражения вообще не самое простое, что есть в программировании, а уж для меня, так тем более. Например, пока я писал его, познакомился с функцией <strong>escapeRegExp()</strong>, которую хотел применить при доработке под свои нужды <a href="http://davidwalsh.name/mootools-highlighter-search" rel="nofollow">класса Mootools для поиска и подсветки текста на странице</a> (аналог обычного поиска в Firefox и некоторых других браузерах, но не все ж умеют пользоваться встроенным поиском браузера…). Так вот там у меня ничего не получилось. Дебаггер ФФ всё твердил, что «escapeRegExp() is not a function» (не является функцией). Я так и не понял, что я делал не правильно. А здесь все получилось (<a href="#escape">в самом конце урока</a>).</p>
<p><span id="more-596"></span></p>
<h2>Основы</h2>
<h3>test()</h3>
<p>В своем самом простом выражении, регулярное выражение – это простой текст, который нужно найти в документе. Несмотря на то, что JavaScript уже имеет встроенный объект RegExp, который отвечает за формирование регулярных выражений, со своей собственной функцией <strong>test()</strong>, но функция test() в Mootools является более дружелюбной её версией, чем яваскриптовская.</p>
<p>Для начала, посмотрим на самый простой пример использования функции <strong>test()</strong>, в котором будем искать определенный текст, в более объемном тексте.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Текст или строка, в которой будем искать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"Найти что-нибудь здесь"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Регулярное выражение, которое будем использовать для поиска</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regular_expression <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"здесь"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//применяем функцию test(), которая возвращает true или false</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> result <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span>regular_expression<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//переменная result имеет значение true</span></pre>
</div>
</div>
<p>По сути, это такой же результат, если бы использовалась функция <strong>contains()</strong>. Однако, в то время, как <strong>contains()</strong> ищет целые слова, <strong>test()</strong> находит вхождения сочетания символов:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_match <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"слово"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//вернёт false</span>
string_to_match.<span style="color: rgb(102, 0, 102);">contains</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'лов'</span><span style="color: rgb(0, 153, 0);">)</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//вернёт true</span>
string_to_match.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'лов'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>И ещё обращу внимание на то, что регулярное выражение не будет чувствительным к регистру, если этого явно не указать с помощью специального ключа. Потому, поиск по регулярному выражению «слово», в слове «Слово» вернёт false. Пример:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_demo <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем функцию обработки</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_demo_1 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем исходный текст</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> test_string <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_1_value'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'value'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем регулярное выражение</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_value <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_1_match'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'value'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//производим поиск в исходном тексте</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> test_result <span style="color: rgb(51, 153, 51);">=</span> test_string.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span>regex_value<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//сообщаем пользователю о текущем положении дел</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>test_result<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_1_result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'html'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"Есть совпадение!"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_1_result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'html'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"Нет совпадения"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><span style="color: rgb(0, 153, 0);">}</span>
<span style="color: rgb(0, 153, 0);">}</span>
<span style="color: rgb(0, 153, 0);">}</span></pre>
</div>
</div>
<p>Обращаю внимание на то, что есть некоторые символы, использовать которые нужно очень осторожно. Если использовать один из нижеуказанных символов в примере ниже, это может привести к непредвиденной ошибке и потому, нужно будет перезагрузить страницу, чтобы все примеры страницы работали.</p>
<p>-  .  *  +  ?  ^  $  {  }  (  )  |  [  ]  /  \ </p>
<table style="border: 0px none; border-collapse: collapse;" class="demo" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Текст, в котором производим поиск:</td>
<td>
<input id="regex_1_value" size="25" value="Ищем совпадения в этом тексте"/></td>
</tr>
<tr>
<td>Регулярное выражение:</td>
<td>
<input id="regex_1_match" size="25" value="тексте"/></td>
</tr>
<tr>
<td><button id="regex_1_button">Запуск теста</button></td>
<td>
<div id="regex_1_result">&nbsp;</div>
</td>
</tr>
</tbody>
</table>
<h2>Игнорируем регистр</h2>
<p>Существует масса ситуаций, когда нет необходимости, чтобы регулярное выражение было чувствительным к регистру текста. Для того, чтобы это уточнить для функций, работающих с регулярными выражениями, нужно использовать параметр «i», как это указано в следующем примере.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Строка, в которой будем производить поиск</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"ИгнОр РЕгИстрУ"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//вернёт false</span>
string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"игнор"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//вернёт true</span>
string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"игнор"</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"i"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Функции <strong>test()</strong> можно передать несколько параметров, но, так как JavaScript поддерживает только 3 параметра регулярного выражения (2 из которых включены по умолчанию в функции <strong>test()</strong>), параметр «i», вероятно, единственный, который нужно будет передавать. Ниже, в форме, можете протестировать функцию <strong>test()</strong> с параметром игнорирования регистра.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_demo <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Получить строку для тестирования из поля input</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> test_string <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_value'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'value'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Получить регулярное выражение из поля input</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_value <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_match'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'value'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Проверить, требуется ли игнорирование регистра</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_param <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">""</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_param'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">checked</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
		regex_param <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"i"</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Произвести поиск и получить результат</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> test_result <span style="color: rgb(51, 153, 51);">=</span> test_string.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span>regex_value<span style="color: rgb(51, 153, 51);">,</span> regex_param<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Обновить приготовленный контейнер для сообщения результатов поиска</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>test_result<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
       	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'html'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"Есть находка! <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> "</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span>
       	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'html'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"Ничего нет! <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> "</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
<span style="color: rgb(0, 153, 0);">}</span></pre>
</div>
</div>
<table style="border: 0px none; border-collapse: collapse;" class="demo" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Строка, в которой будем искать:</td>
<td>
<input id="regex_2_value" value="ИгнОр РЕгИстрУ" type="text"/></td>
</tr>
<tr>
<td>Определим регулярное выражение:</td>
<td>
<input id="regex_2_match" value="игнор" type="text"/></td>
</tr>
<tr>
<td>Игнор регистру?</td>
<td>
<input id="regex_2_param" type="checkbox"/></td>
</tr>
<tr>
<td><button id="regex_2_button">Запуск теста</button></td>
<td>
<div id="regex_2_result">&nbsp;</div>
</td>
</tr>
</tbody>
</table>
<h2>Интересная часть</h2>
<p>Итак, мы уже просмотрели примеры простого поиска по регулярным выражениям, можно начать смотреть в сторону более сложных выражений. Охватить всю функциональность и возможности регулярных выражений сейчас не получится (да я и не претендую на это), но ознакомиться то «самое, самое», что можно будет использовать в своих простых приложениях, у нас получится. Даже этого должно будет хватить для решения простых задач (меня регуляри не раз спасали – некоторые до сих пор использую в DreamWeaver-е).</p>
<h3>Находим начало строки с помощью оператора «^»</h3>
<p>Оператор «^» при использовании в регулярных выражениях, помогает найти текст в начале строки, вне зависимости от того, существует ли этот текст далее в строке поиска. Установите оператор в начале строки для поиска, вот так:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Строка, в которой будем производить поиск</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"поищем в начале текста"</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//тестирует верхний текст на предмет того, начинается ли он с данной строки</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//возвращает true</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> is_true <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">match</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"^поищем"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Далее, если выражение не находится в начале текста, этот поиск<br />
вернет, соотвественно, false:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Строка, в которой будем производить поиск</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"поищем в начале текста"</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//тестирует верхний текст на предмет того, начинается ли он с данной строки</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//возвращает (удивление) false</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> is_true <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">match</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"^начал"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Эти два примера можно и протестировать здесь:</p>
<table style="border: 0px none; border-collapse: collapse;" class="demo" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Строка, в которой будем искать:</td>
<td>
<input id="regex_3_value" size="30" value="будем проверять только начало" type="text"/></td>
</tr>
<tr>
<td>Регулярное выражение:</td>
<td>
<input id="regex_3_match" value="^будем" type="text"/></td>
</tr>
<tr>
<td>Регистру игнор?</td>
<td>
<input id="regex_3_param" type="checkbox"/></td>
</tr>
<tr>
<td><button id="regex_3_button">Пуск…</button></td>
<td>
<div id="regex_3_result">&nbsp;</div>
</td>
</tr>
</tbody>
</table>
<h3>Поиск по концам с помощью оператора «$»</h3>
<p>Этот оператор работает также, как и предыдущий («^»), только с двумя исключениями:</p>
<ol>
<li>Поиск только по концу строк</li>
<li>Устанавливается в конце регулярного выражения</li>
</ol>
<p>В остальном, регЭкспы с этим оператором работают как и ожидается <img src="13_files/icon_smile.gif" alt=":)" class="wp-smiley"/>   :</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Строка, в которой будем искать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"поиск по концам строк"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//проверяет, заканчивается ли строка на слово "строк"</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и возвращает "true"</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> is_true <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">match</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"строка$"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//проверяет, заканчивается ли строка на слово "металлика"</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и вовращает "false"</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> is_false <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">match</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"металлика$"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Используя оба этих оператора, можно протестировать исходный текст на полное совпадение с регулярным выражением:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Исходная строка</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"проверим на полное совпадение"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Проверяет на полное совпадение со строкой "проверим на полное совпадение"</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//возвращает true</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> is_true <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">match</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"^проверим на полное совпадение$"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Проверяет на полное совпадение со строкой "проверим на полное совпадение"</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//возвращает false</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> is_false <span style="color: rgb(51, 153, 51);">=</span> string_to_test.<span style="color: rgb(102, 0, 102);">match</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"^проверим на совпадение$"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<table style="border: 0px none; border-collapse: collapse;" class="demo" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Исходная строка:</td>
<td>
<input id="regex_4_value" value="проверим на полное соответствие" size="30" type="text"/></td>
</tr>
<tr>
<td>Регулярное выражение:</td>
<td>
<input id="regex_4_match" value="^проверим на полное соответствие$" size="30" type="text"/></td>
</tr>
<tr>
<td>Игнор регистру?</td>
<td>
<input id="regex_4_param" type="checkbox"/></td>
</tr>
<tr>
<td><button id="regex_4_button">Запуск теста…</button></td>
<td>
<div id="regex_4_result">&nbsp;</div>
</td>
</tr>
</tbody>
</table>
<h3>Классы символов</h3>
<p>Классы символов – это ещё один инструмент регулярных выражений (жутко полезный, нужно заметить), позволяющий производить поиск нескольких определенных символов («А» или «Я», «f» или «r») или символов из определенного диапазона (от «A» до «Z» или от «r» до «z»). Если, например, есть необходимость проверить строку на наличие слов «бее» или «мее», мы заключаем две первые буквы этих слов в [квадратные] скобки, таким образом формируя класс символов и использовать следующее регулярное выражение:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//строка, в которой будем искать слово "мее"</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> first_string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"овцы разговаривают словом мее"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//строка, в которой будем искать слово "бее"</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> second_string_to_test <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"козы разговаривают словом бее"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//это выражение найдет совпадение в первой строке, но не во второй</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> returns_true <span style="color: rgb(51, 153, 51);">=</span> first_string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"мее"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> returns_false <span style="color: rgb(51, 153, 51);">=</span> second_string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"мее"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//следующее найдет совпадение во второй строке, но не в первой</span>
returns_false <span style="color: rgb(51, 153, 51);">=</span> first_string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"бее"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
returns_true <span style="color: rgb(51, 153, 51);">=</span> second_string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"бее"</span><span style="color: rgb(0, 153, 0);">)</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//следующее найдет совпадение в обеих строках</span>
returns_true <span style="color: rgb(51, 153, 51);">=</span> first_string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[мб]ее"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
returns_true <span style="color: rgb(51, 153, 51);">=</span> second_string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[мб]ее"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<table style="border: 0px none; border-collapse: collapse;" class="demo" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Первая строка, в которой будем искать:</td>
<td>
<input id="regex_5_value_1" size="30" value="овцы разговаривают словами мее" type="text"/></td>
<td>
<div id="regex_5_result_1">&nbsp;</div>
</td>
</tr>
<tr>
<td>Вторая строка, в которой будем искать:</td>
<td>
<input id="regex_5_value_2" size="30" value="козы разговаривают словами бее" type="text"/></td>
<td>
<div id="regex_5_result_2">&nbsp;</div>
</td>
</tr>
<tr>
<td>РегЭксп:</td>
<td>
<input id="regex_5_match" value="[мб]ее" type="text"/></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Игнор регистру?</td>
<td>
<input id="regex_5_param" type="checkbox"/></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><button id="regex_5_button">Пуск…</button></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>Для того, чтобы использовать диапазон символов для поиска, нужно лишь указать начальную и окончательную точку диапазона, разделив их дефисом («-»). Так можно определять диапазоны как цифр, так и букв, причем необязательно ограничиваться латинскими: кириллические символы также хорошо понимаются движком регулярных выражений, как и латинские. Хотя, стоит оговориться, что букву «ё» движок регулярных выражений не понимает, хотя, возможно я чего-то не знаю (буду благодарен, если кто-нибудь ткнет меня носом в проблему <img src="13_files/icon_smile.gif" alt=":)" class="wp-smiley"/>  ) .</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//строка, в которой будем искать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test  <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">" b, д или 3"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//поиск символов a, b, c, или d. Вернёт true.</span>
string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[a-d]"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//поиск по символам г, д, е, ж или з. Вернёт true.</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//Обратите внимание, "ё" в списке нет. "ё" не находится. Почему, пока не знаю...</span>
string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[г-з]"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//поиск 1, 2, 3, 4 или 5. Вернёт true.</span>
string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[1-5]"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Если необходимо искать несколько классов символов, нужно будет заключить такие классы в свои собственные [квадратные] скобки и разделить их логическим оператором «|» (OR – или). Таким образом, у нас появляется регулярное выражение с использованием вложенных квадратных скобок.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//строка, в которой будем искать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_test  <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"b, д или 3"</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//Вернёт true, так как все три выражения верны.</span>
string_to_test.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[a-d] | [г-з] | [1-5]"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Вот пример, в котором можно немного поиграться с полями: воодите туда любой текст, кликайте по соответствующим кнопка регЭкспа и следите за тем, что возвращает true, а что false. «Да прибудет с тобой сила!» <img src="13_files/icon_smile.gif" alt=":)" class="wp-smiley"/> </p>
<table style="border: 0px none; border-collapse: collapse;" class="demo" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Первая строка, в которой будем искать:</td>
<td>
<input id="regex_6_value_1" size="30" value="b" type="text"/></td>
<td>
<div id="regex_6_result_1">&nbsp;</div>
</td>
</tr>
<tr>
<td>Вторая строка, в которой будем искать:</td>
<td>
<input id="regex_6_value_2" size="30" value="3" type="text"/></td>
<td>
<div id="regex_6_result_2">&nbsp;</div>
</td>
</tr>
<tr>
<td>Третья строка, в которой будем искать:</td>
<td>
<input id="regex_6_value_3" size="30" value="д" type="text"/></td>
<td>
<div id="regex_6_result_3">&nbsp;</div>
</td>
</tr>
<tr>
<td>РегЭксп:</td>
<td>
<input id="regex_6_match" value="[a-d]" type="text"/></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Игнор регистру?</td>
<td>
<input id="regex_6_param" type="checkbox"/></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><button id="regex_6_button">Поехали…</button></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="3">
<form id="searchWhat_6" action="">
<input value="[a-d]" name="regexp_demo_6" id="eng" type="radio"/><label for="eng">[a-d]</label>&nbsp;</p>
<input value="[г-з]" name="regexp_demo_6" id="rus" type="radio"/><label for="rus">[г-з]</label>&nbsp;</p>
<input value="[1-5]" name="regexp_demo_6" id="num" type="radio"/><label for="num">[1-5]</label>&nbsp;</p>
<input value="[a-d]|[г-з]|[1-5]" name="regexp_demo_6"  id="searchAll" type="radio"/><label for="searchAll">[a-d]|[г-з]|[1-5]</label><br />
      </form>
</td>
</tr>
</tbody>
</table>
<h3><a name="escape"></a> escapeRegExp()</h3>
<p>Если ты, о читатель моего поста про регулярные выражения, дочитал до сего момента, и о тебе можно сказать, что ты человек с логическим типом мышления, то ты наверняка заметил, использование многочиленных специальных символов в определении регулярного выражения, например классов символов или его логики (ИЛИ – «<strong>|</strong>«, в начале строки – «<strong>^</strong>«, в конце строки – «<strong>$</strong>» и т.д.). Ты ведь наверняка уже понял, что все эти символы сильно затрудняют поиск самих специальных символов в определенной строке… На первый взгляд. А на второй взгляд, все что нужно сделать, это экранировать специальные символы другим специальным символом – обратный слэш «<strong>\</strong>«, а если нужно искать сам обратный слэш, то используются два обратных слэша «<strong>\\</strong>«. Логика проста, если не думатьо ней <img src="13_files/icon_smile.gif" alt=":)" class="wp-smiley"/> !</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Строка для поиска. Обратите внимание на специальные символы [ ] - и $</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string_to_match <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"[всякий-разный-текст] или $300"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Было бы неправильно составить такое регулярное выражение</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//потому что движок будет их воспринимать, как специальные символы</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//а нам этого не нужно</span>
string_to_match.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"[всякий-разный-текст]"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
string_to_match.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"$300"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Правильно было бы так:</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//обратите внимание на обратный слэш \ перед символами [ ] - и $</span>
string_to_match.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"<span style="color: rgb(0, 0, 153); font-weight: bold;">\[</span>stuff<span style="color: rgb(0, 0, 153); font-weight: bold;">\-</span>in<span style="color: rgb(0, 0, 153); font-weight: bold;">\-</span>here<span style="color: rgb(0, 0, 153); font-weight: bold;">\]</span>"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
string_to_match.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">"<span style="color: rgb(0, 0, 153); font-weight: bold;">\$</span>300"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>Когда регулярное выражение не большое, не составит особого труда экранировать каждый спец. символ. Но с другой стороны никто не отменял банальной человеческой невнимательности (которая у меня, например, хроническая), и такой специальный символ можно просто упустить из виду, или же, на стадиях своего обучения, можно и не подозревать, что ты пропустил специальный символ, не экранировал его и регЭксп не дает нужного результата. На всякий случай, если запомните сразу, вот специальные, рабочие символы регулярных выражений, которые <strong>НУЖНО</strong> экранировать:</p>
<p style="text-align: center;">- . * + ? ^ $ { } ( ) | [ ] / \</p>
<p>К счастью, Mootools – это не та библиотека, которая позволит своему пользователю бездарно убивать время на экранирование каждого рабочего символа, когда есть такая функция, как <strong>escapeRegExp()</strong>, чья работа – это избавить тебя, о начинающий программист, от экранирования специальных символов в регулярном выражении. Эта функция работает с любой строкой, потому ее можно использовать всегда, когда нужно произвести поиск какого-либо текста.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Нужно экранировать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> unescaped_regex_string <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"[текст-регулярного-выражения]"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Экранируем строку</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> escaped_regex_string <span style="color: rgb(51, 153, 51);">=</span> unescaped_regex_string.<span style="color: rgb(102, 0, 102);">escapeRegExp</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//escaped_regex_string стала такой: "\[текст\-регулярного\-выражения\]"</span></pre>
</div>
</div>
<p>Обратите внимание, что это значит, что любой специальный символ, который нужно использовать в регулярном выражении, нужно добавить к регулярному выражению после использования функции <strong>escapeRegExp()</strong>:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//Строка, которую нужно экранировать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> unescaped_regex_string <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"[текст-регулярного-выражения]"</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//Экранировать строку, для поиска по началу строки</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> escaped_regex_string <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"^"</span> <span style="color: rgb(51, 153, 51);">+</span> unescaped_regex_string.<span style="color: rgb(102, 0, 102);">escapeRegExp</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//переменная escaped_regex_string стала такой:  "^\[текст\-регулярного\-выражения\]"</span></pre>
</div>
</div>
<p>Ниже представлен пример, в котором видна разница между использованием и неиспользованием функции escapeRegExp():</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_demo <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Получаем строку для проверки</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> test_string <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_7_value'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'value'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Получаем регулярное выражение</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_value <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_7_match'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'value'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Проверяем, нужно ли экранировать текст</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_7_escape'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">checked</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">//Если да, применяем соотв. функцию</span>
		regex_value <span style="color: rgb(51, 153, 51);">=</span> regex_value.<span style="color: rgb(102, 0, 102);">escapeRegExp</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Определяем параметры регулярного выражения</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> regex_param <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">""</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Проверяет, нужно ли игнорировать регистр</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_7_param'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">checked</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
		regex_param <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">"i"</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//Запуск теста</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> test_result <span style="color: rgb(51, 153, 51);">=</span> test_string_1.<span style="color: rgb(102, 0, 102);">test</span><span style="color: rgb(0, 153, 0);">(</span>regex_value<span style="color: rgb(51, 153, 51);">,</span> regex_param<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span>      <span style="color: rgb(0, 153, 0);">(</span>test_result<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_7_result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'html'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"Есть совпадения"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span>$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'regex_7_result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'html'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">"Нет совпадений!"</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><span style="color: rgb(0, 153, 0);">}</span>
<span style="color: rgb(0, 153, 0);">}</span></pre>
</div>
</div>
<table>
<tbody>
<tr>
<td>Строка, в которой будем производить поиск:</td>
<td>
<input id="regex_7_value" value="[слово] или $400" type="text"/></td>
</tr>
<tr>
<td>Регялурное выражение: </td>
<td>
<input id="regex_7_match" value="$400" type="text"/></td>
</tr>
<tr>
<td>использовать escapeRegExp():</td>
<td>
<input id="regex_7_escape" type="checkbox"/></td>
</tr>
<tr>
<td>Игнор регистру:</td>
<td>
<input id="regex_7_param" type="checkbox"/></td>
</tr>
<tr>
<td><button id="regex_7_button">Запуск теста…</button></td>
<td>
<div id="regex_7_result">&nbsp;</div>
</td>
</tr>
</tbody>
</table>
<p>Помните, что все примеры можно «сломать», если использовать неэкранированные специальные символы. Потому, если вдруг случается, что что-то перестало работать, после того, как только что это работало – не удивляйтесь, а просто перезагрузите страницу <img src="13_files/icon_wink.gif" alt=";)" class="wp-smiley"/> .</p>
<p>Если все пойдет по плану, то у меня на готовке еще несколь интересных материалов и уроков, потому не забудьте <a href="http://feeds.feedburner.com/Beginners-Programming-Training">подписаться на мою RSS ленту</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/regulyarnye-vyrazheniya-urok-13.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps послал американку под колёса</title>
		<link>http://php.infoniac.ru/google-poslal-amerikanku-pod-kolesa.html</link>
		<comments>http://php.infoniac.ru/google-poslal-amerikanku-pod-kolesa.html#comments</comments>
		<pubDate>Tue, 01 Jun 2010 06:14:44 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[googe]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[карты googe]]></category>
		<category><![CDATA[курьёзы]]></category>
		<category><![CDATA[суд]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=631</guid>
		<description><![CDATA[Прочитал интересную новость о том, как Google Maps послал пешехода под колеса. Вкратце: жительница США воспользовалась подсказками сервиса Google Maps, который проложил ее маршрут для пешехода через совсем не пешую часть скоростного шоссе. Ну и конечно же, как и полагается в Соединенных Штатах, подала в суд на Google. Мои мысли по этому поводу таковы: «ТЫ [...]]]></description>
			<content:encoded><![CDATA[<p>Прочитал интересную новость о том, как <a href="http://blog.bloggers.su/news/google-maps-poslal/">Google Maps  послал пешехода под колеса</a>. Вкратце: жительница США воспользовалась  подсказками сервиса Google Maps, который проложил ее маршрут для  пешехода через совсем не пешую часть скоростного шоссе. Ну и конечно же,  как и полагается в Соединенных Штатах, подала в суд на Google.</p>
<p><span id="more-631"></span>Мои мысли по этому поводу таковы: «ТЫ ЧТО ДУРА!!!!!?????» как же так  можно, а? нужно ж иметь хоть немного здравого смысла, чтоб полезть на  скоростное шоссе… интересно, если у нас, Google Maps.RU вдруг проложит  маршрут по МКАДу, неужели кто-то попрет туда пешком? ДА НИКОГДА! С таким  же успехом можно подавать в суда на прохожего, который тебя не туда  послал… «Господин судья, господа присяжные, я – истец, обвиняю ответчика  в том, что, когда я спешил на собеседование на должность ген. директора  ЛУКОЙЛ, не зная, где вход, попросил у ответчика подсказать где этот  самый вход находится и он направил меня в другом направлении. В  результате я опоздал на собеседование и не получил должность,  соответственно, потерял недвижимость по всему миру, целый автопарк  коллекционного авто, дети мои не пошли учиться в кембридж…. Прошу  передать жизнь ответчика в мое личное пользование…»<br />
Ситуация моя, конечно, из воздуха, но и гражданка США тоже удивила своей  глупостью… В принципе, там многие такие, к сожалению… Смотрела бы на  знаки, сэкономила бы себе кучу времени…<br />
Люди, используйте карты гугл не забывайте использовать также и свои  глаза, уши… Не пренебрегайте сигналами, которые они посылают в мозг,  анализируйте их и выстраивайте собственные маршруты, если того требует  ситуёвина… Удачи!</p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/google-poslal-amerikanku-pod-kolesa.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Самовыполняющиеся функции JavaScript</title>
		<link>http://php.infoniac.ru/auto-executable-functions-javascript.html</link>
		<comments>http://php.infoniac.ru/auto-executable-functions-javascript.html#comments</comments>
		<pubDate>Thu, 08 Apr 2010 08:19:51 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[функции]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=621</guid>
		<description><![CDATA[Недавно меня сильно пробило на чтение всяческих обучающих материалов, просмотр видео роликов на тему программирования и сайтостроение. Оказывается, в Интернете столько всего, что всё знать вряд ли получится. А жаль:( Очень много информации, как полезной, так и не очень. Уже не помню, на каком именно сайте наткнулся на краткую информацию о самовыполняющихся функциях. Должен сказать, [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно меня сильно пробило на чтение всяческих обучающих материалов, просмотр видео роликов на тему программирования и сайтостроение. Оказывается, в Интернете столько всего, что всё знать вряд ли получится. А жаль:( Очень много информации, как полезной, так и не очень. Уже не помню, на каком именно сайте наткнулся на краткую информацию о самовыполняющихся функциях. Должен сказать, что я не обратил бы на этот термин практически никакого внимания, кроме как просто запомнил бы и, может быть, когда-нибудь, пришлось бы такие функции исползовать, если бы не недавний мой пост про <a href="http://php.infoniac.ru/javascript-zakladki.html">создание интерактивных закладок</a> в браузерах.</p>
<p><span id="more-621"></span>
<p>В чем суть самовыполняющихся функций? Для этого нужно разобраться в том, как создаются и выполняются обычные функции в JavaScript. Обычно функцию вначале нужно определить, и <a href="http://php.infoniac.ru/mootools-tutorial-day-4-functions.html">это можно сделать разными способами</a> и только после этого ее нужно вызвать. Например:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">// определяем функцию</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> execute <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
  $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'text'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'функция execute выполнена'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем условия ее выполнения</span>
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
    $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'exec'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> execute<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p>
<span id="result"></span><br />
<button id="exec">Выполнить execute</button>
</p>
<p>В общем, мне кажется я много пишу, т.к. само название самовыполняющейся функции говорит само за себя: вызывать ее выполнение не требуется, т.к. она выполняется сразу после определения и всё, что нужно, это заключить определение функции в скобки и поставить после этой конструкции еще пару скобок, вот так:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">// определяем действия в функции</span>
&nbsp;
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//скобки говорят обработчику, что нужно сразу выполнить фунцию,</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//определённую немного ранее</span></pre>
</div>
</div>
<p>Почему я вспомнил, про интерактивные закладки? Потому что они построенны на базе таких функций и когда я пытался понять их структуру и логику, я задавал себе вопрос «зачем там скобки и что они делают?». Вот оно, как просо оказалось.</p>
<p>Пока мне в голову пришел только один пример работы самовыполняющейся функции: добавим еще несколько строчек JavaScript к нашему предыдущему примеру с функцией <strong>execute</strong>  и, через <strong>setTimeout()</strong> добавим самовыполняющуюся функцию, которая изменит результат выполнения предыдущей функции <strong>execute</strong> через 2 секунды, потому обратите внимание на текст сообщения над кнопкой вызова. А вот, собственно, и сам код:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> execute <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
  $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'result'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'text'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'функция execute выполнена'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> unexecute <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
  $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'result2'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'text'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'функция execute выполнена'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
  setTimeout<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
    $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'result2'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'text'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'и через 2 секунды определяется и самовыполняется функция unexecute'</span><span style="color: rgb(0, 153, 0);">)</span>
  <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(204, 0, 0);">2000</span><span style="color: rgb(0, 153, 0);">)</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
		$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'exec'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> execute<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
		$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'unexec'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> unexecute<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</div>
</div>
<p><span id="result2"></span><br />
<button id="unexec">Выполнить unexecute</button></p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/auto-executable-functions-javascript.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Поиск RegExp в документе, с последующей отправкой данных на сервер</title>
		<link>http://php.infoniac.ru/kak-ya-iskal-regexp-v-dokumente.html</link>
		<comments>http://php.infoniac.ru/kak-ya-iskal-regexp-v-dokumente.html#comments</comments>
		<pubDate>Tue, 23 Mar 2010 09:37:30 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[практические задачи]]></category>
		<category><![CDATA[регулярные выражения]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=639</guid>
		<description><![CDATA[Недавно мой очень хороший знакомый попросил меня написать небольшой скрипт, который бы мог находить на загружаемой странице сайта определенное регулярное выражение и записывать вхождение в базу данных на сервере. Как только я услышал задачу, понял, что без AJAX тут никак. Пока с AJAXом у меня очень посредственные отношения: я написал только один полускрипт, который состоял [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно мой очень хороший знакомый попросил меня написать небольшой скрипт, который бы мог находить на загружаемой странице сайта определенное регулярное выражение и записывать вхождение в базу данных на сервере. Как только я услышал задачу, понял, что без AJAX тут никак. <span id="more-639"></span>Пока с AJAXом у меня очень посредственные отношения: я написал только один полускрипт, который состоял в том, что при выборе категории товара на сайте подгружались подкатегории и товары этой супер категории, а при выборе подкатегории, выбирались товары только этой одной подкатегории и все это было выполнено в виде выпадающих списков &lt;input type=&raquo;option&raquo;&gt;&#8230; Итак, тот первый полускрипт я написал на чистом JavaScript с помощью XMLHttpRequest (XHR) и, конечно же, не без помощи w3school.org.</p>
<p>В этой задаче мне пришлось также столкнуться с объектом RegExp JavaScript. Я немного потренировался в его использовании, что, несомненно пошло мне на пользу. Например, я узнал, что для того, чтобы использовать РегЭксп-ы, не обязательно объявлять переменную, новый экземпляр объекта RegExp, а можно просто записать регулярное выражение в виде текcтовой строки, т.е. вместо</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> r <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Regexp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.*'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>можно просто написать вот так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> r <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/.*/g'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Но, обратите внимание, что при использовании конструкции new RegExp использовать обратные слэши не нужно, т.к. при работе с регулярным выражением, объявленным таким образом, обработчик сам добавит недостающие символы. Также, в этом примере видно, что ключи к РегЭксп-у идут отдельным параметром к объекту, тогда как при составлении выражения в текстовой строке, ключ просто добавляется в конце регулярного выражения. В общем, если регулярное выражение просо записывается в строку, то и составляется оно по всем правилам составления регулярных выражений.</p>
<p>Ключ &#8216;g&#8217; говорит обработчику, что не нужно останавливаться после первого вхождения регулярного выражения, а нужно искать по всему тексту, но простого указания этого ключа, как оказалось, совсем не достаточно.</p>
<p>В отличие от РНР, где функция preg_match_all записывает все вхождения в массив самостоятельно, для того, чтобы проделать тоже самое в JavaScript мне пришлось ускорить седение волос на голове:) Оказалось, что для поиска всех вхождений в документе с помощью JavaScript, нужно написать код такого плана:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">r <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.*text-([0-9]+).*'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
res <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>res <span style="color: #339933;">=</span> r.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> r.<span style="color: #660066;">lastIndex</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">// сюда вставляем код, который должен выполняться при нахождении регулярного выражения</span>
	<span style="color: #006600; font-style: italic;">// это может быть запить найденного в переменную или ещё что-нибудь</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>где <em>res</em> – массив в который записываются результаты поиска, где, в свою очередь, <em>res[<span style="color:red;">0</span>]</em> будет содержать вхождение всего регулярного выражения, <em>res[<span style="color:red;">1</span>]</em> будет содержать вхождение в первой группе скобок, <em>res[<span style="color:red;">2</span>]</em> – во второй и т.д.<br />
<em>r</em> – экземпляр регулярного выражения;<br />
<em>exec()</em> – метод объекта RegExp, который находит вхождения, соответствующие регулярному выражению и записывает их в массив. <em>exec()</em> отличается от <em>test()</em> тем, что записывает данные в массив, тогда как <em>test()</em> просто возвращает true если находит вхождение или false если не находит. Если же предпочитаете работать не с объектом, а с текстовой строкой, которая содержит РегЭксп, то используйте обычные методы match() – аналог exec(), или search() – почти аналог test(), с тем отличием, что возвращает позицию начала вхождения.</p>
<p>Тут потребуется небольшая оговорка по поводу использования search(): так как он возвращает число, а не булев тип (true/false), при отсутствии вхождения этот метод возвращает -1.</p>
<p>Кстати, при использовании просто текстовой строки для хранения РегЭксп-а, можно также использовать метод replace(), который находит вхождение регулярного выражения, или обычного текста, и заменяет на указанный в параметре текст.</p>
<p>Идем далее: <em>s</em> – источник поиска, т.е. где будем искать.<br />
<em>.lastIndex</em> – параметр, отвечающий за позицию, где было найдено последнее вхождение. Если этот параметр не указать, обработчик JavaScript найдет только первое вхождение, даже при указании ключа &#8216;g&#8217;.</p>
<p>Далее, часть Ajax. На сайте этого моего товарища уже были подключены Prototype и jQuery, потому, я решил не подключать еще и Mootools к этому салату (вначале думал подключить, так как только с ним и знаком). Решил просто посмотреть документацию по этим библиотекам, чтобы понять, какой из них лучше воспользоваться для составления пакета и отправки на скрипт сервера. Оказалось, что проще, чем это предлагает сделать jQuery, не получится!</p>

<div class="wp_syntax"><div class="code"><pre class="jquery" style="font-family:monospace;">$.post(ServerSideScriptUrl, {var1:value1, val2:val2 ...})</pre></div></div>

<p>Как видно из этого, вообще ничего проще нет. Спасибо jQuery!! Знакомый до боли селектор из Mootools $, потом указываем метод отправки – get/post, и несколько параметров. Конечно, в моем скрипте, требовалось лишь отправить данные, без их последующего приема, потому мне именно вариант jQuery показался самым простым. К сожалению, массивы с данными через XHR отправить не получится, но форма передачи данных на сервер, указанная выше, вполне справится с задачей передачи вполне большого объема данных.</p>
<p>Думаю, на этом и хватит описывать мой героический скрипт <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  РНР скрипт на стороне сервера даже описывать не буду, т.к. это скрипт на уровне первого класса (выполнен, тоже на уровне первого класса): получил данные, подключился к БД, записал в таблицу. Всё!</p>
<p>Конечно, это не большое достижение, но, все-таки – достижение. А тот факт, что я это все описал в этом посте, еще больше закрепит эти знания в моем прогламмерском мозгу.</p>
<p>Кстати, на фоне моего поста, посвященного первой решенной практической задачке, объявляю акцию:</p>
<blockquote style="color:red; font-size:14px; font-weight:bold;"><p>Если вы учитесь программированию и решаете какие-либо задачи, присылайте их мне, буду их с удовольствием публиковать на рассмотрение всех посетителей блога. Думаю, они будут интересны не только мне!</p></blockquote>
<p>Удачи!</p>
<p style="font-style:italic">P.S. Ух! Сколько ж раз я повторяю это слово в своих постах&#8230; со счета сбился&#8230; Но, КСТАТИ! Мой следующий урок Mootools посвещается именно работе с регулярными выражениями, так что НЕ пропустите!</p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/kak-ya-iskal-regexp-v-dokumente.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перемещение/Передвижение с помощью класса Drag.Move – Урок 12</title>
		<link>http://php.infoniac.ru/mootools-drag-move-objects-tut12.html</link>
		<comments>http://php.infoniac.ru/mootools-drag-move-objects-tut12.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 19:59:17 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Уроки новичка]]></category>
		<category><![CDATA[drag]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[интерактив]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=592</guid>
		<description><![CDATA[По моему мнению, верх интерактивности, это когда пользователь сайта может не просто ввести текст в определенную форму, а когда он сам может изменять дизайн, например, сам определять те или иные параметры внешнего вида сайта или использовать перетаскивание для заполнения своей покупательской корзины, например. Перетаскивание - один из самых мощных инструментов JavaScript и библиотек на его основе. Поклонники "высшего пилотажа", те кто стремится сделать свои скрипты супер быстрыми и оптимизированными, скажут, что нужно всегда использовать Javascript для создания кода, но библиотеки сделаны не просто для развлечения. Да, написав код на JavaScript, вы сделаете свой скрипт самым быстрым насколько это возможно (конечно, в зависимости от уместности использования тех или иных функций/методов), но такие библиотеки, как Mootools, jQuery, Prototype и др. призваны облегчить жизнь веб-программиста: они сделали создание специальных эффектов и интерактивности на сайте довольно простым, что и должен будет доказать этот урок. Итак, учимся создавать перетаскиваемые объекты с помощью классов Drag и Drag.Move.]]></description>
			<content:encoded><![CDATA[<h2>Drag.Move – Перемещение с помощью Mootools 1.2</h2>
<p>С 10-го урока я начал публиковать уроки, посвященные спец. эффектам, которые можно создавать с помощью библиотеки Mootools. Если Вы еще не взглянули в эти уроки, очень рекомендую <a href="http://php.infoniac.ru/fx-morph-fx-options-fx-events-day11.html">посмотреть</a>.</p>
<p>В сегодняшнем уроке мы поставим под прицел класс Drag.Move – очень сильный инструмент, который позволяет добавить возможность перемещения/перетаскивания элементов на странице. Вообще, эта возможность – это одна из моих самых любимых функций JavaScript и всех библиотек на его основе.</p>
<p>Используется этот класс также, как и все остальные плагины библиотеки: создается новый (<em>«new»</em>) объект Drag.Move и назначается переменной. Далее назначаются параметры и события объекта. В принципе, это и есть вся основа. Кстати, объекты Drag и Drag.Move не определены в основной библиотеке, потом нужно будет создавать свою собственную сборку Mootools с помощью <a title="Mootools More Builder" href="http://mootools.net/more" target="_blank">онлайн инструмента</a> на сайте разработчиков.</p>
<h2>Основы</h2>
<h3>Drag.Move</h3>
<p>Установка перетаскиваемого элемента довольно проста. Давайте рассмотрим пример ниже. Обратите внимание, как отделяются параметры и события класса <em>Drag.Move</em> от событий и параметров класса <em>Drag</em>. Drag.Move расширяет и дополняет класс Drag, потому он будет принимать не только свои параметры и события, но и те, что относятся к классу Drag. Сегодня мы не будем углубляться в работу Drag, но мы взглянем на несколько его интересных параметров и событий.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// параметры класса Drag.Move</span>
		droppables<span style="color: rgb(51, 153, 51);">:</span> dropElement<span style="color: rgb(51, 153, 51);">,</span>
		container<span style="color: rgb(51, 153, 51);">:</span> dragContainer<span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// параметры класса Drag</span>
		handle<span style="color: rgb(51, 153, 51);">:</span> dragHandle<span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// событие класса Drag.Move</span>
		onDrop<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
                        <span style="color: rgb(0, 102, 0); font-style: italic;">// вызовет предупреждение с атрибутом id сброшенного элемента</span>
                        <span style="color: rgb(0, 102, 0); font-style: italic;">// в элемент, принимающий сброшенные элементы</span>
                        <span style="color: rgb(0, 102, 0); font-style: italic;">// (это может показаться запутанным, на первый взглад, но, надеюсь,</span>
                        <span style="color: rgb(0, 102, 0); font-style: italic;">// далее все проясниться</span>
                        <span style="color: rgb(0, 0, 102);">alert</span><span style="color: rgb(0, 153, 0);">(</span>dr.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'id'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">// События Drag</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">// передаются перетаскиваемому элементу</span>
                onComplete<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			<span style="color: rgb(0, 0, 102);">alert</span><span style="color: rgb(0, 153, 0);">(</span>el.<span style="color: rgb(102, 0, 102);">get</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'id'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
		<span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Разберем всё это по полочкам…</p>
<h3>Параметры Drag.Move</h3>
<p>Параметры Drag.Move позволяют назначить два основных типа элементов:</p>
<ul>
<li><strong>droppables</strong> – опеределяет элементы, которые будут способны «принять» сброшенный элемент</li>
<li><strong>container</strong> – установить контейнер перетаскиваемого элемента (будет удерживать элемент внутри этого элемента-контейнера)</li>
</ul>
<p>Установка параметров доволно проста:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//определяем один элемент по id, который можно будет перетаскивать</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragElement <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_element'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем массив элементов по их классу, которые смогут принят сброшенный элемент</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dropElements <span style="color: rgb(51, 153, 51);">=</span> $$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'.drag_element'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем контейнер</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragContainer <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_container'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//определяем объект Drag.Move</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag.Move</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">// назначаем элементу droppables массив элементов, определённых немного выше</span>
		droppables<span style="color: rgb(51, 153, 51);">:</span> dropElements <span style="color: rgb(51, 153, 51);">,</span>
               <span style="color: rgb(0, 102, 0); font-style: italic;">// назначаем элементу container элемент, определенный немного выше</span>
		container<span style="color: rgb(51, 153, 51);">:</span> dragContainer
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Теперь наш перетаскиваемый элемент имеет свой контейнер, а также у нас имеется класс элементов, который будет принимать сбросы других элементов. Тут можно провести аналогию с современными аэропортами: не все аэропорты предназначены для принятия и обслуживания определенных типов самолётов. Так и в нашем случае: необходимо определить, какой класс сможет принимать «на посадку» перетаскиваемые элементы.</p>
<h3>События объекта Drag.Move</h3>
<p>События этого объекта дают возможность запускать определенные заранее функции в определенные этапы существования объекта, как например в тот момент, когда пользователь «совершил захват» передвигаемого элемента, когда он начинает его передвигать или когда он его сбрасывает. События объекта Drag.Move передаются каждому перетаскиваемому и сбрасывамому элементу в качестве параметров.</p>
<ul>
<li><strong>onDrop</strong> – запускается при сбросе элемента в соответствующий принимающий элемент;</li>
<li><strong>onLeave</strong> – запускается когда перетаскиваемый элемент покидает границы элемента, способного принимать перетаскиваемые элементы;</li>
<li><strong>onEnter</strong> – запускается при входе перетаскиваемого элемента в зону принимающего элемента.</li>
</ul>
<p>Как и <a href="http://php.infoniac.ru/mootools-tutorial-day-5-events.html">любые другие события</a>, которые мы до этого обсуждали, события объекта Drag.Move вызывают функцию, которая выполняется когда событие исполняется.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragContainer <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_container'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag.Move</span>
	droppables<span style="color: rgb(51, 153, 51);">:</span> dropElements <span style="color: rgb(51, 153, 51);">,</span>
	container<span style="color: rgb(51, 153, 51);">:</span> dragContainer <span style="color: rgb(51, 153, 51);">,</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">// События Drag.Move</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">// функции Drag.Move передадут перетаскиваемый элемент (в данном случае 'el')</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">// принимающему элементу, с которым перетаскиваемый взаимодействует (у нас 'dr')</span>
	onDrop<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// на русском: "если элемента, на который происходит сброс НЕ ЯВЛЯЕТСЯ принимающий"</span>
		<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 153, 51);">!</span>dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			<span style="color: rgb(0, 102, 0); font-style: italic;">//ничего не делать</span>
		<span style="color: rgb(0, 153, 0);">}</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// в противном случае, т.е. элемент принимающий</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// делать то-то, то-то</span>
		<span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span>
			<span style="color: rgb(0, 102, 0); font-style: italic;">// действия, который произойдут,</span>
			<span style="color: rgb(0, 102, 0); font-style: italic;">// когда элемента будет сброшен на принимающий элемент</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
	onLeave<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// эта функция будет запущена, когда перетаскиваемый элемент</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// покинет границы принимающего элемента</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
	onEnter<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// эта функция будет запущена, когда перетаскиваемый элемент</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// входит в границы принимающего элемента</span>
	<span style="color: rgb(0, 153, 0);">}</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>Несколько событий объекта Drag</h3>
<p>У объекта Drag есть совсем немного событий и параметров, но и я не все буду рассматривать:</p>
<h4>Параметр – snap</h4>
<p>Параметр <strong>snap</strong> позволяет определить, на сколько пикселей пользователь должен передвинуть курсор прежде чем начнется сам процесс перемещения элемента. Значение по умолчанию – 6, но можно указать любое число или переменную, содержащую число. Конечно же, существуют некие логические рамки (установив это значение на 1000, никакой пользы не принесешь своему приложению), но все-таки этот параметр может сослужить хорошую службу разработчику при улучшении своего приложения.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag</span>
		snap<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">10</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h4>Параметр – handle</h4>
<p>Данный параметр добавляет "ручку" к вашему перетаскиваемому элементу. Эта «ручка» определяет единственную область элемента, которой можно воспользоваться для "захвата" перетаскиваемого элемента, что позволяет использовать оставшуюся часть элемента для других целей. Для определения "ручки", просто вызовите элемент.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">// определяет массив элементов по классу</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">// это позволит нам добавить несколько "ручек",</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">// если нам нужно будет определять несколько передвигаемых элементов</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragHandle <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_handle'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// параметры Drag</span>
		handle<span style="color: rgb(51, 153, 51);">:</span> dragHandle
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h4>Событие onStart</h4>
<p>Событие <strong>onStart</strong> определяет функцию, которая будет запускаться при начале перетаскивания. Если значение параметра <strong>snap</strong> установлено большое, то событие не начнется до тех пор, пока заданное количество пикселей не будет пройдено.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag</span>
		onStart<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
                    <span style="color: rgb(0, 102, 0); font-style: italic;">// сюда вставляем всё, что должно произойти вначале перетаскивания</span>
               <span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h4>Событие – onDrag</h4>
<p>Событие <strong>onDrag</strong> будет работать постоянно во время перетаскивания элемента.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag</span>
		onDrag<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
                    <span style="color: rgb(0, 102, 0); font-style: italic;">// сюда вставляем всё, что должно происходить во время перетаскивания</span>
               <span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h4>Событие onComplete</h4>
<p>Событие <strong>onComplete</strong> запускается когда происходит сброс перетаскиваемого элемента и оно будет запущено вне зависимости от того, будет этот элемент приземлен в элементе droppable или нет.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement <span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	        <span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag</span>
		onComplete<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
                    <span style="color: rgb(0, 102, 0); font-style: italic;">// сюда вставляем всё, что должно произойти при сбросе элемента</span>
               <span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h2>Примеры</h2>
<p>Снова подошло время моей любимой части любого урока: Пример!</p>
<p>Давайте, для упрощения процесса переваривания всей информации этого урока, соорудим пример, который бы содержал максимум из представленных параметров, событий и т.д. Поехали!</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragElement <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_me'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragContainer <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_cont'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragHandle <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_me_handle'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dropElement <span style="color: rgb(51, 153, 51);">=</span> $$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'.draggable'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> startEl <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'start'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> completeEl <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'complete'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dragIndicatorEl <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drag_ind'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> enterDrop <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'enter'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> leaveDrop <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'leave'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> dropDrop <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'drop_in_droppable'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> 
&nbsp;
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> myDrag <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Drag.<span style="color: rgb(102, 0, 102);">Move</span><span style="color: rgb(0, 153, 0);">(</span>dragElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	    <span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag.Move</span>
		droppables<span style="color: rgb(51, 153, 51);">:</span> dropElement<span style="color: rgb(51, 153, 51);">,</span>
		container<span style="color: rgb(51, 153, 51);">:</span> dragContainer<span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// Параметры Drag</span>
		handle<span style="color: rgb(51, 153, 51);">:</span> dragHandle<span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// События Drag.Move</span>
		onDrop<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			<span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 153, 51);">!</span>dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span> <span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
        	        <span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span>
				dropDrop.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#FB911C'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает оранжевым</span>
				el.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#fff'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает белым</span>
				dr.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#667C4A'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает зеленым</span>
			<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">;</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
		onLeave<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			leaveDrop.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#FB911C'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает оранжевым</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
		onEnter<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(51, 153, 51);">,</span> dr<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			enterDrop.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#FB911C'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает оранжевым</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(0, 102, 0); font-style: italic;">// Drag Events</span>
		onStart<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			startEl.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#FB911C'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает оранжевым</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
		onDrag<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			dragIndicatorEl.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#FB911C'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает оранжевым</span>
		<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
		onComplete<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>el<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
			completeEl.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#FB911C'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span> <span style="color: rgb(0, 102, 0); font-style: italic;">//мигает оранжевым</span>
		<span style="color: rgb(0, 153, 0);">}</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>В этом примере, в отличие от большинства ранее представленных, мы будем серьезно использовать CSS, потому нужно добавить некоторые пояснения к таблице CSS. Для того, чтобы контейнер Drag.Move нормально определялся в IE, нужно будет подробно объяснить позиционирование элементов этому популярному браузеру. Очень важно определить элементу-контейнеру «position:relative», а перетаскиваемому элементу «position:absolute». Далее нужно удостовериться в том, что знаяения «left» и «top» для этого элемента тажке установлены. Ну, а если вы создаете приложение с перетаскиваемыми элементами, которое никоим образом не предназначается для IE, можете вообще не обращать внимание на эту часть.</p>
<div class="wp_syntax">
<div class="code">
<pre class="css" style="font-family: monospace;">body <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">margin</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 102, 204);">0</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">padding</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 102, 204);">0</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(128, 128, 128); font-style: italic;">/* убедитесь в том, что перетаскиваемый элемент умеет "position: absolute"
 а параметры top и left установлены на значения для первоначального положения элемента*/</span>
<span style="color: rgb(204, 0, 204);">#drag_me</span> <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">width</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">100px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">height</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">100px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">background-color</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 0, 204);">#333</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">position</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">absolute</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">top</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 102, 204);">0</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">left</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 102, 204);">0</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(204, 0, 204);">#drop_here</span> <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">width</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">200px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">height</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">200px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">background-color</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 0, 204);">#eee</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(128, 128, 128); font-style: italic;">/* убедитесь в том, что элемент-контейнер имеет "position:relative" */</span>
<span style="color: rgb(204, 0, 204);">#drag_cont</span> <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">background-color</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 0, 204);">#ccc</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">height</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">600px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">width</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">500px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">position</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">relative</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">margin-top</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">100px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">margin-left</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">100px</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(204, 0, 204);">#drag_me_handle</span> <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">width</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);"><span style="color: rgb(204, 102, 204);">100</span>%</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">height</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">auto</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">background-color</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 0, 204);">#666</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">cursor</span><span style="color: rgb(0, 170, 0);">:</span>move<span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(204, 0, 204);">#drag_me_handle</span> span <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">display</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">block</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">padding</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">5px</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(102, 102, 255);">.indicator</span> <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">width</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);"><span style="color: rgb(204, 102, 204);">100</span>%</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">height</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">auto</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">background-color</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(204, 0, 204);">#0066FF</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">border-bottom</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">1px</span> <span style="color: rgb(153, 51, 51);">solid</span> <span style="color: rgb(204, 0, 204);">#eee</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(102, 102, 255);">.indicator</span> span <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">padding</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">10px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">font-size</span><span style="color: rgb(0, 170, 0);">:</span><span style="color: rgb(153, 51, 51);">14px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">display</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">block</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span>
&nbsp;
<span style="color: rgb(102, 102, 255);">.draggable</span> <span style="color: rgb(0, 170, 0);">{</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">width</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">200px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">height</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(153, 51, 51);">200px</span><span style="color: rgb(0, 170, 0);">;</span>
	<span style="color: rgb(0, 0, 0); font-weight: bold;">background-color</span><span style="color: rgb(0, 170, 0);">:</span> <span style="color: rgb(0, 0, 0); font-weight: bold;">blue</span><span style="color: rgb(0, 170, 0);">;</span>
<span style="color: rgb(0, 170, 0);">}</span></pre>
</p></div>
</div>
<p>Далее следует HTML код, который создаст нам плацдарм для восхощения возможностями Mootools.</p>
<div class="wp_syntax">
<div class="code">
<pre class="html4strict" style="font-family: monospace;"><span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"drag_cont"</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"start"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"indicator"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>Начало<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"drag_ind"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"indicator"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>Перетаскивание<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"complete"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"indicator"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>Завершен<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"enter"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"indicator"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>Вход в принимающий элемент<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"leave"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"indicator"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>Выход из принимающего элемента<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"drop_in_droppable"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"indicator"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>Сброшен в принимающий элемент<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"drag_me"</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"drag_me_handle"</span>&gt;&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;</span>ручка<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">span</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"drop_here"</span> <span style="color: rgb(0, 0, 102);">class</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"draggable"</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span></pre>
</p></div>
</div>
<div id="drag_cont">
<div style="background-color: rgb(0, 102, 255);" id="start" class="indicator"><span>Начало</span></div>
<div style="background-color: rgb(0, 102, 255);" id="drag_ind" class="indicator"><span>Перетаскивание</span></div>
<div style="background-color: rgb(0, 102, 255);" id="complete" class="indicator"><span>Завершен</span></div>
<div style="background-color: rgb(0, 102, 255);" id="enter" class="indicator"><span>Вход в принимающий элемент</span></div>
<div style="background-color: rgb(0, 102, 255);" id="leave" class="indicator"><span>Выход из принимающего элемента</span></div>
<div style="background-color: rgb(0, 102, 255);" id="drop_in_droppable" class="indicator"><span>Сброшен в принимающий элемент</span></div>
<div style="position: absolute; left: 59px; top: 279px; background-color: rgb(51, 51, 51);" id="drag_me">
<div id="drag_me_handle"><span>ручка</span></div>
</p></div>
<div style="background-color: rgb(238, 238, 238);" id="drop_here" class="draggable"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/mootools-drag-move-objects-tut12.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Создаем интерактивные закладки JavaScript</title>
		<link>http://php.infoniac.ru/javascript-zakladki.html</link>
		<comments>http://php.infoniac.ru/javascript-zakladki.html#comments</comments>
		<pubDate>Thu, 25 Feb 2010 18:37:15 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[закладки]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=609</guid>
		<description><![CDATA[Я часто замечал, что многие сайты предлагают добавить закладку для быстрого выполнения действия на этом сайте, например заполнение формы или что-то подобное. Изнутри такая закладка была похожа на обычную только адресом, а далее для меня всё выглядело, как каракули. Когда я только знакомился с интернетом и технологиями, его делающими, мне было интересно, как делаются такие закладки. Когда познакомился с JavaScript, понял, что с помощью JavaScript. И потом я захотел делать свои собственные закладки. Так, когда я начал заниматься SEO появилась необходимость быстро проверить ту или иную страницу на предмет индексации, сколько на нее ссылок и т.д. Руками это все делать накладно, а специализированные программы для проверки одной страницы - это слишком. Так я создал свою первую интерактивную закладку :) - небольшое, но достижение!]]></description>
			<content:encoded><![CDATA[<p>Всем привет!</p>
<p>Хочу поделиться опытом! Я давно хотел научиться делать интерактивные закладки, чтобы размещать их на панели закладок браузера, но, к сожалению, пока этого так и не сделал…</p>
<p>Зато, я подсмотрел, как это делается у всяких сервисов, как, например, у сервиса автоматического постинга в различные сервисы закладок – <strong><a href="http://www.bposter.net/?a=13968">bposter.net</a></strong>, и теперь, как минимум, могу просто их изменять и приспосабливать под собственные нужды. Но, обо всем по порядку&#8230;</p>
<p>Вначале, напомню, кто такая эта панель, да еще и закладок. В Win Safari она выглядит так:</p>
<p><img class="aligncenter size-full wp-image-612" title="browser-window" src="http://php.infoniac.ru/wp-content/uploads/browser-window1.jpg" alt="" width="400" height="389" /></p>
<p>Для тех, кто пока не рассмотрел и не особо понял, что это, пожалуйста:</p>
<p><a href="http://php.infoniac.ru/wp-content/uploads/bookmarks-pannel-zoomed-in-150x291.jpg"><img class="alignleft size-full wp-image-611" title="Панель закдадок" src="http://php.infoniac.ru/wp-content/uploads/bookmarks-pannel-zoomed-in-150x291.jpg" alt="Панель закладок браузера Safari" width="150" height="29" /></a></p>
<p>Наверняка, многие знают, что сегодняшние браузеры могут хранить в закладках не только URL адреса понравившихся или полезных сайтов, но и короткие скрипты JavaScript, основанные на самовыполняемые функции, о которых я уже написал <a href="http://php.infoniac.ru/auto-executable-functions-javascript.html" title="Самовыполняющиеся функции JavaScript">короткий пост</a>, что, как мне кажется, станет очень полезным для многих. Я уже начал интенсивно пользоваться такими закладками.</p>
<p>Пока у меня есть только несколько примеров, как и зачем можно использовать такие закладки. Например, думаю, все специалисты, занимающиеся продвижением сайтов, знают сервис siteexplorer.search.yahoo.com, ведь на сегодняшний день, это чуть ли не единственный источник данных по обратным ссылкам на любой сайт, а для того, чтобы получить эту информацию, нужно сделать слишком много телодвижений, а именно:</p>
<p>- открыть сервис;</p>
<p>– возможно, yahoo.com попросит авторизоваться;</p>
<p>- набрать адрес сайта, инфу о котором требуется узнать;</p>
<p>- нажать на кнопку «Inlinks», чтобы перейти на отображение не кол-ва страниц в кэше Яху, а на, собственно, информацию об обратных ссылках;</p>
<p>- выбрать опцию «Except from this domain» (Кроме этого домена), чтобы исключить ссылки с этого домена;</p>
<p>– возможно, выбрать опцию «Entire Site», чтобы посмотреть ссылки, приходящие на страницы всего сайта, а не только на одну страницу.</p>
<p>Чтобы исключить всё это, требуется всего-лишь немного наблюдательности. Например, перетащите эту ссылку -</p>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://siteexplorer.search.yahoo.com/search?p='+encodeURIComponent(document.domain)+'&amp;bwm=i&amp;bwmo=d&amp;bwmf=s');})();">Обратные ссылки по SiteExplorer</a></p>
<p>- в панель закладок вашего браузера и нажмите на появившуюся там кнопку – вы увидите все ссылки, приходящие на все страницы моего блога.</p>
<p>А вот и сам код ссылки:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://siteexplorer.search.yahoo.com/search?p='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>document.<span style="color: #660066;">domain</span><span style="color: #009900;">)</span><span style="color: #339933;">+</span><span style="color: #3366cc;">'&amp;amp;bwm=i&amp;amp;bwmo=d&amp;amp;bwmf=s'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>Что в коде? Первым словом в атрибуте href идет слово <strong>javascript</strong>, которое сообщает браузеру, что ссылка – это JavaScript код. Далее – функция, которая открывает новое окно, вставляя имя домена (<strong>document.domain</strong>) текущего документа «куда надо». (По сути, такая ссылка действует также,  как и ссылка вида <strong>javascript:history.back()</strong>.) Если вместо <strong>window.domain</strong> использовать метод <strong>location.href</strong>, в открывшейся вкладке (окне), будут показаны обратные ссылки только на открытую страницу.</p>
<p>Вот еще несколько закладок, которые я уже соорудил (если кому что нужно, перетягивайте ссылку в панель закладок):</p>
<h3>• Посмотреть, есть ли страница в индексе Яндекса:</h3>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://www.yandex.ru/yandsearch?serverurl='+encodeURIComponent(location.href));})();">Индекс Яндекса</a></p>
<p>Исходник:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://www.yandex.ru/yandsearch?serverurl='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>location.<span style="color: #660066;">href</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<h3>• Количество страниц с домена в индексе Google:</h3>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://www.google.ru/search?q=site:'+encodeURIComponent(document.domain));})();"># страниц в гугле</a></p>
<p>Исходник:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://www.google.ru/search?q=site:'</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>document.<span style="color: #660066;">domain</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<h3>• Есть ли страница в индексе Google:</h3>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://www.google.ru/search?q=cache:'+encodeURIComponent(location.href));})();">Есть ли в кэше гугла?</a></p>
<p>Исходник:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://www.google.ru/search?q=cache:'</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>location.<span style="color: #660066;">href</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>Вообще, каждый, у кого есть плагин SearchStatus для Firefox, может проверить наличие страницы в кэше Гугла, но, может кому и пригодится такая закладка.</p>
<h3>• <a href="http://www.bposter.net/?a=13968">Постинг в закладки через сервис bposter.net</a>:</h3>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://www.bposter.net/?url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title)+'&amp;desc='+encodeURIComponent(window.getSelection?window.getSelection():''));})();">В закладки!!!</a></p>
<p>Исходник:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://www.bposter.net/?url='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>location.<span style="color: #660066;">href</span><span style="color: #009900;">)</span><span style="color: #339933;">+</span><span style="color: #3366cc;">'&amp;amp;title='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>document.<span style="color: #660066;">title</span><span style="color: #009900;">)</span><span style="color: #339933;">+</span><span style="color: #3366cc;">'&amp;amp;desc='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>window.<span style="color: #660066;">getSelection</span><span style="color: #339933;">?</span>window.<span style="color: #660066;">getSelection</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">:</span><span style="color: #3366cc;">''</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>Тут следует отметить, что я этот код совсем не придумывал, а просто заменил метод <strong>location.href</strong> на <strong>window.open</strong>, чтобы открывалась новая закладка (или окно, в зависимости от настроек браузера).</p>
<h3>• Обратные ссылки по SiteExplorer.search.yahoo.com на весь сайт:</h3>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://siteexplorer.search.yahoo.com/search?p='+encodeURIComponent(document.domain)+'&amp;bwm=i&amp;bwmo=d&amp;bwmf=s');})();">Обратные ссылки на сайт</a></p>
<p>Исходник:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://siteexplorer.search.yahoo.com/search?p='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>document.<span style="color: #660066;">domain</span><span style="color: #009900;">)</span><span style="color: #339933;">+</span><span style="color: #3366cc;">'&amp;amp;bwm=i&amp;amp;bwmo=d&amp;amp;bwmf=s'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<h3>• Обратные ссылки по SiteExplorer.search.yahoo.com на данную страницу:</h3>
<p><a class="jsBookmark" href="javascript:(function(){window.open('http://siteexplorer.search.yahoo.com/search?p='+encodeURIComponent(location.href)+'&amp;bwm=i&amp;bwmo=d&amp;bwmf=u');})();">Обратные ссылки на страницу</a></p>
<p>Исходник:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">javascript<span style="color: #339933;">:</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>window.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'http://siteexplorer.search.yahoo.com/search?p='</span><span style="color: #339933;">+</span>encodeURIComponent<span style="color: #009900;">(</span>location.<span style="color: #660066;">href</span><span style="color: #009900;">)</span><span style="color: #339933;">+</span><span style="color: #3366cc;">'&amp;amp;bwm=i&amp;amp;bwmo=d&amp;amp;bwmf=u'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
</div>
</div>
<p>Хочу заметить, что все эти закладки открывают новые вкладки (или окна, в зависимости от браузера и его настроек), что, как мне кажется, на порядок удобнее, чем  когда эти страницы открываются на месте просматриваемых.</p>
<p>Ну вот, пока это все закладки, да и все, что я хотел тут написать. По мере того, как у меня будут появляться такие закладки, обязательно буду ими делиться через эту страницу.</p>
<p>Всем удачи в своих открытиях!</p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/javascript-zakladki.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Есть такой вопрос: Как получить ссылки с известных доменов?</title>
		<link>http://php.infoniac.ru/question-how-to-get-links-from-popular-domains.html</link>
		<comments>http://php.infoniac.ru/question-how-to-get-links-from-popular-domains.html#comments</comments>
		<pubDate>Fri, 15 Jan 2010 08:23:55 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Поисковые системы]]></category>
		<category><![CDATA[персонализированный поиск]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=635</guid>
		<description><![CDATA[Получил на работе номер 308 расширенного выпуска ашмановской рассылки «Продвижение сайта. Профессиональные советы экспертов«, где есть ссылка на статью «Getting Links from the Top 50 Domains» («Получение ссылок с Топ 50 доменов Интернета»). Решил поделиться мыслями и наблюдениями по поводу неё. Некоторые из пунктов очень очевидны, думаю, только ленивый СЕО-работник не использует их, а некоторые [...]]]></description>
			<content:encoded><![CDATA[<div>Получил на работе номер 308 расширенного выпуска ашмановской  рассылки «<strong>Продвижение сайта. Профессиональные советы экспертов</strong>«,   где есть ссылка на статью «<a rel="nofollow" href="http://www.thegooglecache.com/uncategorized/getting-links-from-the-top-50-domains/">Getting Links from the Top 50 Domains</a>»  («Получение ссылок с Топ 50 доменов Интернета»). Решил поделиться  мыслями и наблюдениями по поводу неё.</p>
<p>Некоторые из пунктов очень очевидны, думаю, только ленивый  СЕО-работник не использует их, а некоторые раскрыты только потому, что  они уже и так слишком раскрыты. Я имею ввиду, ну вот зачем раскрывать  всем, что с домена nytimes.com (а точнее с одного из его поддоменов),  либо с форума на поддомене sourceforge.net можно получить ссылку без  nofollow? А только потому, что там этих ссылок уже и так уйма, и  добавлять еще и себя туда, среди виагры, порнухи, таблеток и фармы  абсолютно не нужно – такая ссылка, мне кажется, только навредит. Сами  посудите: вот <a rel="nofollow" href="http://code.nytimes.com/projects/xslcache/ticket/3">одна   страница</a>, вот <a rel="nofollow" href="http://code.nytimes.com/projects/xslcache/ticket/1">другая</a>.  Эти страницы о PECL, а то, что там вылазят ссылки на всякие нечистоты –  уже не хорошо, и даже если там вдруг появится ссылка на  сайт/страницу/статью про PECL – сомневаюсь, что она даст ее владельцу  серьезный вес, т.к. вся страница уже с черной пометкой «spam page»  где-то там, в недрах гугловской БД и Гугл либо не учитывает эти ссылки  при ранжировании, либо просто выбросил ее из свой выдачи.</p>
<p>Что касается ссылок с остальных доменов – мне думается, они рано или  поздно все равно утратят свою значимость при ранжировании, но пока,  естественно, можно их и попользовать. Например,  можно, добавить ссылку  на сайт в профиль при регистрации на форуме sourceforge (вообще, это  нужно делать всегда, при регистрации на любом форуме), можно/нужно  добавить ссылку на что-то продвигаемое в подпись, но и нужно потом  использовать этот профиль, нужно быть активным форумчанином, чтобы эти  ссылки имели хоть какую-то значимость. Еще раз, в качестве примера,  возьмем уже упомянутый форум на поддомене sourceforge.net –  http://ettercap.sourceforge.net/forum/. Я не поленился и посмотрел на  список форумчан. Судя по их количеству – определенно очень популярный  форум. 28419 пользователей. А между тем, кто-нибудь слышал про такую  программульку, как Ettercap? Если кто не в курсе, вышла версия 0.7.3!!!  Оказалось, что 27093 пользователя не написало ни одного сообщения (хотя,  самые отпетые спамеры умудрились зарегистрироваться еще в 2001 году –  они не оставили ни одного сообщения, но у них есть интересные сайты про  фарм). Вопрос в том, стоит ли тратить время, на то, чтобы  зарегистрироваться на форуме только ради того, чтобы получить одну  ссылку, которая, скорее всего, уже никогда не проиндексируется из-за  большого количества спаммынх ссылок? Длинный вопрос получился…</p>
<p>Ради чего я всего это написал? Просто хотел поделиться мыслью о том,  что реально полезной информации на тему СЕО мало. Публикуется, в  основном то, что опытные СЕО-специалисты уже испробовали и им это  результата не дало, либо метод исчерпал себя. Они публикуют метод на  своем блоге, получают кучу благодарностей в комментариях, трафика и  доход с рекламы на блоге. Конечно же, отнюдь не все методы,  публикующиеся на СЕО блогах – фальшивки. Например, я подписан на RSS <a href="http://shakin.ru/">блога Михаила Шакина – shakin.ru</a> (Михаил  мне, вообще, кажется, талантливым писателем, т.к. он не только про  Интернет интересно пишет, но и просто про жизнь), и блога известного <a href="http://blog.dimok.ru/">Рунет деятеля Димка</a> (моего тезки,  только меня просто Дима зовут <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), который недавно получил от WebmastersWorld мою любимую игрушку – <strong>МакБук   Pro</strong>.</p>
<p>Итого: верить всему, что написано в СЕО статьях и блогах, мне  кажется, не нужно. Главное в этой сфере – умение анализировать факты!  Почитал, проанализировал. При необходимости, проверил, протестировал.  Слепо верить и следовать всему, что пишут в Интернете – не всегда верно и  не всегда полезно. Так что моим ответом на вопрос в заголовке будет  таким: <strong>Нужно думать самому.</strong>.</div>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/question-how-to-get-links-from-popular-domains.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Уроки Mootools – Использование Fx.Morph, Fx.Options и Fx.Events – Урок 11</title>
		<link>http://php.infoniac.ru/fx-morph-fx-options-fx-events-day11.html</link>
		<comments>http://php.infoniac.ru/fx-morph-fx-options-fx-events-day11.html#comments</comments>
		<pubDate>Thu, 17 Dec 2009 19:09:59 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Уроки новичка]]></category>
		<category><![CDATA[fx.events]]></category>
		<category><![CDATA[fx.morph]]></category>
		<category><![CDATA[fx.options]]></category>
		<category><![CDATA[анимация]]></category>
		<category><![CDATA[уроки mootools]]></category>
		<category><![CDATA[эффекты]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=586</guid>
		<description><![CDATA[Mootools 1.2 Fx.Morph, Fx.Options, и Fx.Events Сегодня продолжим исследовать раздел спец. эффектов нашей любимой библиотеки. Вначале, мы научимся тому, как использовать библиотеку Fx.Morph (которая, по сути, позволяет изменять несколько свойств объектов), после чего посмотрим на несколько примеров использования общих параметров спец. эффектов, применимых как к Fx.Tween и Fx.Morph. Ну а в конце, рассмотрим такие события [...]]]></description>
			<content:encoded><![CDATA[<h2>Mootools 1.2 Fx.Morph, Fx.Options, и Fx.Events</h2>
<p>Сегодня продолжим исследовать раздел спец. эффектов нашей любимой библиотеки. Вначале, мы научимся тому, как использовать библиотеку Fx.Morph (которая, по сути, позволяет изменять несколько свойств объектов), после чего посмотрим на несколько примеров использования общих параметров спец. эффектов, применимых как к Fx.Tween и Fx.Morph. Ну а в конце, рассмотрим такие события раздела Fx как &laquo;<strong>onComplete</strong>&raquo; и &laquo;<strong>onStart</strong>&laquo;. Все эти параметры и события позволят нам получить больше контроля над анимированными переходами.</p>
<h3>Fx.Morph</h3>
<h4>Создание нового эффекта Fx.Morph</h4>
<p>Запуск нового превращения (<em>morph</em> с англ. – превращение) происходит примерно также, как и запуск нового <a href="http://php.infoniac.ru/mootorials-special-effects-day10.html" title="Спец. Эффекты в Mootools – Уроки Mootools – Урок 10">эффекта tween</a>, с той разницей, что указывать изменения нужно в нескольких свойствах.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//вначале, назначим нашему элементу переменную</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphElement <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'morph_element'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//теперь создаем объект превращения</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//далее задаем параметры свойств, также как в случае с Fx.Tween</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//только сейчас можно будет устанавливать несколько свойств</span>
morphObject.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
    <span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">100</span><span style="color: rgb(51, 153, 51);">,</span>
    <span style="color: rgb(51, 102, 204);">'height'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">100</span><span style="color: rgb(51, 153, 51);">,</span>
    <span style="color: rgb(51, 102, 204);">'background-color'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'#eeeeee'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//еще можно начать превращение также, как и в случае с tween</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//с помощью функции start, но назначить изменения в нескольких свойствах</span>
morphObject.<span style="color: rgb(102, 0, 102);">start</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
    <span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">300</span><span style="color: rgb(51, 153, 51);">,</span>
    <span style="color: rgb(51, 102, 204);">'height'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">300</span><span style="color: rgb(51, 153, 51);">,</span>
    <span style="color: rgb(51, 102, 204);">'background-color'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'#d3715c'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Вот это и есть тот минимум, который необходим для создания, настройки и запуска эффекта morph – превращения.</p>
<p>Ну, а для того, что бы сделать всё по-хорошему, нужно создать еще несколько переменных, отделить функции друг от друга, создать несколько событий и прослушек для хорошего контроля всего процесса:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphSet <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//далее задаем параметры свойств стилей, также как в случае с Fx.Tween</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//только сейчас можно будет устанавливать несколько свойств стилей</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">100</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(51, 102, 204);">'height'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">100</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(51, 102, 204);">'background-color'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'#eeeeee'</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphStart <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//еще можно начать превращение также, как и в случае с tween</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//с помощью функции start, но назначить изменения в нескольких свойствах</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">start</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">300</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(51, 102, 204);">'height'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">300</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(51, 102, 204);">'background-color'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'#d3715c'</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphReset <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//устанавливаем первоначальные значения</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
		<span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(51, 102, 204);">'height'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">,</span>
		<span style="color: rgb(51, 102, 204);">'background-color'</span><span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'#ffffff'</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphElement <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'morph_element'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
	<span style="color: rgb(0, 102, 0); font-style: italic;">//тут добавляем прослушку соответствующим кнопкам</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//и соединяем переменную morphObject с функцией</span>
	<span style="color: rgb(0, 102, 0); font-style: italic;">//что позволяет нам использовать "this"</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'morph_set'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> morphSet.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>morphObject<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'morph_start'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> morphStart.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>morphObject<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'morph_reset'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> morphReset.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>morphObject<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<div class="wp_syntax">
<div class="code">
<pre class="html4strict" style="font-family: monospace;"><span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"morph_element"</span>&gt;&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">button</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"morph_set"</span>&gt;</span>Установить<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">button</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">button</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"morph_start"</span>&gt;</span>Запустить<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">button</span>&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">button</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"morph_reset"</span>&gt;</span>Сбросить<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">button</span>&gt;</span></pre>
</p></div>
</div>
<div id="morph_element"></div>
<p>
  <button id="morph_set">Установить</button><br />
  <br />
  <button id="morph_start">Запустить</button><br />
  <br />
  <button id="morph_reset">Сбросить</button>
</p>
<h2>Fx Options</h2>
<p>Вот несколько параметров, которые принимаются как Fx.Tween, так и Fx.Morph. Их просто использовать и они дают массу возможностей по управлению над вашими эффектами. Для использования этих настроек, нужно использовать конструкции такой формы:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//объявляем объекты morph и tween</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//а все параметры вставляем в фигурные скобки</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//вначале объявляем название параметра</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//потом двоеточие - :</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//и значение параметра</span>
    duration<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'long'</span><span style="color: rgb(51, 153, 51);">,</span>
    transition<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'sine:in'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>fps (frames per second) – кадры в секунду</h3>
<p>Данный параметр определяет скорость анимации. По умолчанию скорость анимации установлена на 50 кадров в секунду и этот параметр может принимать данные в виде чисел и переменные, содержащие числа.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//определяем объект, а параметры в фигурные скобки { }</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    fps<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">60</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//или</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> framesPerSecond <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">60</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>tweenElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    fps<span style="color: rgb(51, 153, 51);">:</span> framesPerSecond
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>unit</h3>
<p>Параметр <strong>unit</strong> определяет единицу измерения. Например, нужно, чтобы число 100 означало px – пиксели, % – проценты или что-лобо еще.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//все как и выше</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    unit<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'%'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>link</h3>
<p>Параметр <strong>link</strong> позволяет управлять несколькими вызовами эффекта. Например, если имеется объект с эффектом mouseover, вы же не хотите начинать его каждый раз, как пользователь наводит на него указатель? Или, если пользователь наводит мышь на объект дважды, нужно ли игнорировать следующий вызов эффекта или его нужно поставить в очередь и запустить сразу по окончании первого вызова? У параметра link есть 3 возможных значения: </p>
<ul>
<li>&#8216;ignore&#8217; (по умолчанию) – это значение игнорирует все вызовы пока предыдущее выполнение эффекта не выполнено.</li>
<li>&#8216;calcel&#8217; – отменяет текущее выполнение эффекта и запускает его с начала.</li>
<li>&#8216;chain&#8217; – позволяет чередовать вызовы эффектов и выполнять каждый из них по очереди.</li>
</ul>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//и снова назначаем объект в переменную</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    link<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'chain'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>duration – длительность</h3>
<p>Параметр <strong>duration</strong> определяет длительности анимации. Этот параметр не является идентичным параметру <strong>speed</strong> (<em>скорость</em>), но пока всей разницы лично я пока не понял. Может кто объяснит? <img src="11_files/icon_smile.gif" alt=":)" class="wp-smiley"/> Этот параметр принимает числа (милисекунды), переменную, содержащую числа, или же одно из ключевых слов, обозначающих длительность в милисекундах:</p>
<ul>
<li>&#8216;short&#8217; = 250</li>
<li>&#8216;normal&#8217; = 500 (по умолчанию)</li>
<li>&#8216;long&#8217; = 1000</li>
</ul>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//определяем объект и вставляем его параметры в фигурные скобки</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    duration<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'long'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//или</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> morphObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Morph</span><span style="color: rgb(0, 153, 0);">(</span>morphElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    duration<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(204, 0, 0);">1000</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>transition – переход</h3>
<p>И последний параметр, который мы рассмотрим, это параметр <strong>transition</strong>, который определяет тип перехода. Например, это должен быть плавный переход или он должен начинаться плавно, а потом ускориться под конец. В полиграфии есть штука под названием «пантонница». Предлагаю вашему вниманию <em>«транзитницу»</em> библиотеки Mootools <img src="11_files/icon_smile.gif" alt=":)" class="wp-smiley"/> :</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenObject <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>tweenElement<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
    transition<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'quad:in'</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p><strong><em>Примечание</em></strong>: Первая полоса перехода оснащена зарядом красного highlight, переходящий в оранжевый highlight (мы о нем говорили <a href="http://php.infoniac.ru/mootorials-special-effects-day10.html" title="Спец. Эффекты в Mootools – Уроки Mootools – Урок 10">в прошлом уроке</a>). А вот и она, «транзитница», собственно:</p>
<div style="width: 300px; background-color: rgb(102, 102, 102);" id="quadin" class="trans">&#8216;quad:in&#8217;</div>
<div style="width: 300px;" id="quadout" class="trans stripe">&#8216;quad:out&#8217;</div>
<div style="width: 300px;" id="quadinout" class="trans">&#8216;quad:in:out&#8217;</div>
<div style="width: 300px;" id="cubicin" class="trans stripe">&#8216;cubic:in&#8217;</div>
<div style="width: 300px;" id="cubicout" class="trans">&#8216;cubic:out&#8217;</div>
<div style="width: 300px;" id="cubicinout" class="trans stripe">&#8216;cubic:in:out&#8217;</div>
<div style="width: 300px;" id="quartin" class="trans">&#8216;quart:in&#8217;</div>
<div style="width: 300px;" id="quartout" class="trans stripe">&#8216;quart:out&#8217;</div>
<div style="width: 300px;" id="quartinout" class="trans">&#8216;quart:in:out&#8217;</div>
<div style="width: 300px;" id="quintin" class="trans stripe">&#8216;quint:in&#8217;</div>
<div style="width: 300px;" id="quintout" class="trans">&#8216;quint:out&#8217;</div>
<div style="width: 300px;" id="quintinout" class="trans stripe">&#8216;quint:in:out&#8217;</div>
<div style="width: 300px;" id="expoin" class="trans">&#8216;expo:in&#8217;</div>
<div style="width: 300px;" id="expoout" class="trans stripe">&#8216;expo:out&#8217;</div>
<div style="width: 300px;" id="expoinout" class="trans">&#8216;expo:in:out&#8217;</div>
<div style="width: 300px;" id="circin" class="trans stripe">&#8216;circ:in&#8217;</div>
<div style="width: 300px;" id="circout" class="trans">&#8216;circ:out&#8217;</div>
<div style="width: 300px;" id="circinout" class="trans stripe">&#8216;circ:in:out&#8217;</div>
<div style="width: 300px;" id="sinein" class="trans">&#8216;sine:in&#8217;</div>
<div style="width: 300px;" id="sineout" class="trans stripe">&#8216;sine:out&#8217;</div>
<div style="width: 300px;" id="sineinout" class="trans">&#8216;sine:in:out&#8217;</div>
<div style="width: 300px;" id="backin" class="trans stripe">&#8216;back:in&#8217;</div>
<div style="width: 300px;" id="backout" class="trans">&#8216;back:out&#8217;</div>
<div style="width: 300px;" id="backinout" class="trans stripe">&#8216;back:in:out&#8217;</div>
<div style="width: 300px;" id="bouncein" class="trans">&#8216;bounce:in&#8217;</div>
<div style="width: 300px;" id="bounceout" class="trans stripe">&#8216;bounce:out&#8217;</div>
<div style="width: 300px;" id="bounceinout" class="trans">&#8216;bounce:in:out&#8217;</div>
<div style="width: 300px;" id="elasticin" class="trans stripe">&#8216;elastic:in&#8217;</div>
<div style="width: 300px;" id="elasticout" class="trans">&#8216;elastic:out&#8217;</div>
<div style="width: 300px;" id="elasticinout" class="trans stripe">&#8216;elastic:in:out&#8217;</div>
<p>Всего существует 30 видов переходов, которые состоят из 10 основных типов, имеющих каждый по 3 параметра.</p>
<p><strong>Основные типы</strong>:</p>
<ul>
<li>Quad</li>
<li>Cubic</li>
<li>Quart</li>
<li>Quint</li>
<li>Expo</li>
<li>Circ</li>
<li>Shine</li>
<li>Back</li>
<li>Bounce</li>
<li>Elastic</li>
</ul>
<p><strong>Параметры</strong>:</p>
<ul>
<li>Ease In</li>
<li>Ease Out</li>
<li>Ease In Out</li>
</ul>
<p>Эти три параметра отвечают за следующее: при использовании параметра <strong>In</strong> спец.эффект перехода будет использоваться только при увеличении некоторых свойств объекта, тогда как параметр <strong>Out</strong> отвечает за спец.эффект перехода при уменьшении свойствf (знаю, что звучит немного непонятно, но обратите внимание на то, как себя ведут объекты с переходом одного типа с параметрами in и out нашей «транзитницы» при наведении курсора и при его заборе с объекта). <strong>InOut</strong>, соответственно, определяет использование спец. эффекта перехода, в обоих случаях, т.е. как при увеличении определенных свойств, так и при их уменьшении.</p>
<h3>Fx Events – события</h3>
<p>События спец. эффектов позволяют выполнять определенный код в различные стадии анимационного эффекта. Эти события могут быть очень полезны для создания обратной связи с пользователями и создает еще один уровень управления над своими эффектами:</p>
<ul>
<li>onStart – срабатывает при начале эффекта</li>
<li>onCancel – срабатывает при отмене эффекта</li>
<li>onComplete – срабатывает при завершении эффекта</li>
<li>onChainComplete – срабатывает при завершении поочередных эффектов.</li>
</ul>
<p>При создании эффекта tween или morph, события определяются по тому же принципу, что и параметры эффекта, только в качестве значения событию передается функция:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//определяем новый объект переменной</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и объявляем его новым объектом класса Fx.Tween</span>
quadIn <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>quadIn<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тут выставляем опции</span>
	link<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'cancel'</span><span style="color: rgb(51, 153, 51);">,</span>
	transition<span style="color: rgb(51, 153, 51);">:</span> 'quad<span style="color: rgb(51, 153, 51);">:</span><span style="color: rgb(0, 0, 102); font-weight: bold;">in</span>'<span style="color: rgb(51, 153, 51);">,</span>
&nbsp;
       <span style="color: rgb(0, 102, 0); font-style: italic;">//несколько событий</span>
	onStart<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>passes_tween_element<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">//эти события применяются к нашему объекту</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">//потому эффект "highlight" применяется к</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">//началу анимации</span>
	        passes_tween_element.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#C54641'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
&nbsp;
        <span style="color: rgb(0, 102, 0); font-style: italic;">//обратите внимание на разделители между функциями, в виде запятых,</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тогда как, после последнего параметра или события</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//запятые не ставятся</span>
        onComplete<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>passes_tween_element<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
                <span style="color: rgb(0, 102, 0); font-style: italic;">//а тут мы применяем эффекст highlight к завершению анимации </span>
	        passes_tween_element.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#C54641'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h2>Пример</h2>
<p>Попробуем сгенерировать все переходы, показанные выше и попробуем использовать наши функции немного другими методами, какими ранее еще не пользовались. Все элементы переходов используют по две функции: одна функция запускает анимацию по наведению курсора, другая при его отводе.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//эту функцию будем запускать по событию mouseenter</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> enterFunction <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">start</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'700px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//эту функцию будем запускать по событию mouseleave</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> leaveFunction <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">start</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//определим переменными некоторые элементы на странице</span>
    <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> quadIn <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'quadin'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
    <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> quadOut <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'quadout'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
    <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> quadInOut <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'quadinout'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    <span style="color: rgb(0, 102, 0); font-style: italic;">//потом создаем по одному элементу tween каждой переменной, объявленной выше</span>
    quadIn <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>quadIn<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	link<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'cancel'</span><span style="color: rgb(51, 153, 51);">,</span>
	transition<span style="color: rgb(51, 153, 51);">:</span> Fx.<span style="color: rgb(102, 0, 102);">Transitions</span>.<span style="color: rgb(102, 0, 102);">Quad</span>.<span style="color: rgb(102, 0, 102);">easeIn</span><span style="color: rgb(51, 153, 51);">,</span>
	onStart<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>passes_tween_element<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
		passes_tween_element.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#C54641'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span>
	onComplete<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>passes_tween_element<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">{</span>
		passes_tween_element.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#E67F0E'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	<span style="color: rgb(0, 153, 0);">}</span>
    <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
   quadOut <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>quadOut<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	link<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'cancel'</span><span style="color: rgb(51, 153, 51);">,</span>
	transition<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'quad:out'</span>
    <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    quadInOut <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>quadInOut<span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 153, 0);">{</span>
	link<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'cancel'</span><span style="color: rgb(51, 153, 51);">,</span>
	transition<span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">'quad:in:out'</span>
    <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    <span style="color: rgb(0, 102, 0); font-style: italic;">//теперь добавим каждому элементу по прослушке на события</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//обратите внимание на использование функции .addEvents</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//которая работает также, как и .addEvent</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//только можно добавлять несколько событий, используя определённый шаблон</span>
    $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'quadin'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvents</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//вначале нужно объявить событие, поместив его в единичные кавычки,</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//отделить их двоеточием (":")</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//и объявить функцию, которая будет выполняться при этом событии.</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//в данном случае, это функция, которая связана с эффектом tween</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//разделения событий производится с помощью запятой;</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//после последнего события запятая НЕ ИСПОЛЬЗУЕТСЯ</span>
        <span style="color: rgb(51, 102, 204);">'mouseenter'</span><span style="color: rgb(51, 153, 51);">:</span> enterFunction.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>quadIn<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">,</span>
        <span style="color: rgb(51, 102, 204);">'mouseleave'</span><span style="color: rgb(51, 153, 51);">:</span> leaveFunction.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>quadIn<span style="color: rgb(0, 153, 0);">)</span>
    <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'quadout'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvents</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//обратите внимание, как мы снова используем те же функции в этом коде</span>
        <span style="color: rgb(51, 102, 204);">'mouseenter'</span><span style="color: rgb(51, 153, 51);">:</span> enterFunction.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>quadOut<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">,</span>
        <span style="color: rgb(51, 102, 204);">'mouseleave'</span><span style="color: rgb(51, 153, 51);">:</span> leaveFunction.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>quadOut<span style="color: rgb(0, 153, 0);">)</span>
    <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'quadinout'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvents</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тут мы также используем те же функции</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//просто они каждый раз вызываются для работы с событием над разными элементами</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//и привязаны они к разным объектам tween</span>
        <span style="color: rgb(51, 102, 204);">'mouseenter'</span><span style="color: rgb(51, 153, 51);">:</span> enterFunction.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>quadInOut<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">,</span>
        <span style="color: rgb(51, 102, 204);">'mouseleave'</span><span style="color: rgb(51, 153, 51);">:</span> leaveFunction.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>quadInOut<span style="color: rgb(0, 153, 0);">)</span>
    <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/fx-morph-fx-options-fx-events-day11.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Спец. Эффекты в Mootools – Уроки Mootools – Урок 10</title>
		<link>http://php.infoniac.ru/mootorials-special-effects-day10.html</link>
		<comments>http://php.infoniac.ru/mootorials-special-effects-day10.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 18:26:24 +0000</pubDate>
		<dc:creator>proglammer</dc:creator>
				<category><![CDATA[Mootools]]></category>
		<category><![CDATA[Уроки новичка]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[уроки mootools]]></category>
		<category><![CDATA[эффекты]]></category>

		<guid isPermaLink="false">http://php.infoniac.ru/?p=582</guid>
		<description><![CDATA[Библиотека Mootools, будучу основанной на Javascript, имеет довольно серьезные средвства для создание простынх и не очень спец. эффектов для придания красоты и удобства использования страницы пользователем. В этом уроке речь пойдет оь одной из самых интересных (мне лично) сторон Javascript и Mootools в частности - создание и управление спец. эффектами. Сейчас мы поговорим о самых простых эффектах, таких, как изменение размера, формы, цвета элемента, но чем дальше мы зайдем, тем больше всего интересного узнаем. Интрига? Тогда читаем дальше!]]></description>
			<content:encoded><![CDATA[<p>Еще раз добро пожаловать в наш класс по изучению библиотеки Mootools 1.2. Если вы пришли сюда впервые, советую посмотреть и предыдущие уроки, особенно, если вы не совсем знакомы с этой библиотекой (внизу страницы, около комментариев есть специальная ссылка).</p>
<p>Итак, сегодня мы рассмотрим возможности создания спец. эффектов в Mootools из библиотеки эффектов Fx.Tween. Функции этого дополнения, как и многие другие функции библиотеки, очень просты в применении, но при этом дают разработчикам очень большую свободу действий, позволяя улучшить эстетичность веб-приложений и конечно же «юзабилити» (очень модное слово сегодня в интернете; в переводе с англицкого: <strong>usability</strong> – «<em>удобство (ис)пользования</em>«).</p>
<h2>Быстрые спец.эффекты</h2>
<p>Обычно я начинаю с основ той или иной темы, но функции работы со спец. эффектами так просты в использовании, что не могу удержаться от того, чтобы именно их поставить на передовую рассмотрения.</p>
<h3>.tween();</h3>
<p>Английское слово <em>tween</em> означает мягкий переход из одного свойства в другое. В нашем случае можно сказать, что переход осуществляется от одного значения свойства, к другому. Например можно сделать так, чтобы блок <strong>div</strong> мягко и красиво растянулся с ‘width:100px’ до ‘width:300px’. А фреймворк Mootools позаботился о том,<br />
  чтобы создание таких эффектов не занимало более секунды!</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//создаем функцию</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenerFunction  <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//выбираем элемент, над которым будем издеваться</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//и добавляем к нему .tween</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//а в качестве атрибутов добавляем свойство, которое будет изменяться</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//и значение на которое это свойство нужно мягко изменить</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">tween</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тут мы добавляем прослушку на определенное событие (в нашем случае click)</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//к кнопке, которая должна вызвать эффект</span>
        $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_button'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenerFunction<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Ну а HTML код для этой функции выглядит так:</p>
<div class="wp_syntax">
<div class="code">
<pre class="html4strict" style="font-family: monospace;"><span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">button</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"tween_button"</span>&gt;</span>растянуть до 300 px<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">button</span>&gt;</span></pre>
</p></div>
</div>
<h3>.fade();</h3>
<p>Еще одна потрясающая функция, которая позволяет тонко настроить прозрачность элемента. А настройка выглядит примерно также, как показано в коде выше:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//создаем функцию</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenFadeFifty <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
       <span style="color: rgb(0, 102, 0); font-style: italic;">//выбираем объект</span>
       <span style="color: rgb(0, 102, 0); font-style: italic;">//добавляем к нему .fade</span>
       <span style="color: rgb(0, 102, 0); font-style: italic;">//и задаем значение между 0 и 1, к которому нужно привести прозрачность элемента</span>
       <span style="color: rgb(0, 102, 0); font-style: italic;">//(0 - невидимка, 1 - полный видимка)</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">fade</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'.5'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тут мы добавляем прослушку на определенное событие (в нашем случае click)</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//к кнопке, которая должна вызвать эффект</span>
        $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_fade_fifty'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenFadeFifty<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Вот и HTML код:</p>
<div class="wp_syntax">
<div class="code">
<pre class="html4strict" style="font-family: monospace;"><span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">button</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"tween_fade_fifty"</span>&gt;</span>Снижаем видимость до 50%<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">button</span>&gt;</span></pre>
</p></div>
</div>
<h3>.highlight();</h3>
<p>Снова не могу обойтись без слова «замечательная»! <strong>.highlight()</strong> – это замечательная функция! Она очень узконаправленная, при этом также очень полезна. Она имеет две функции:</p>
<ol>
<li>Использование для мягкого перехода к иному цвету фона (можно посмотреть пример немногой ниже).</li>
<li>Мгновенно изменяет цвет фона, потом мягко переходит к другому цвету.</li>
</ol>
<p>Если спросите, зачем вообще тратить время на создание и потом еще и изучение таких функции, могу сказать в их оправдание, что они очень полезны, когда создаешь обратную связь с пользователями. Например, можно привлечь внимание к определенному элементу, когда что-нибудь выделяется; или изменяете цвет, потом этот цвет вспыхивает когда элемент  сохраняется и закрывается. Вообще, возможностей уйма. Все зависит от опыта и воображения разработчика.</p>
<p>А пока предлагаю рассмотреть пример использования функции. Создадим два блока <strong>div</strong>, и применим к ним оба типа функции <strong>.highlight()</strong>.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//создаем функцию</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenHighlight <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>event<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тут мы будем использовать конструкцию, которую пока еще не использовали - event.target</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//которая будет передаваться как параметр функции</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//на человеческом языке это звучит как "цель события"</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//а так как эффект применим к тому же элементу, к которому прикреплена прослушка на событие</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//не нужно будет снова создавать селектор.</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//обратите внимание, что addEvent автоматически передаст объект события в качестве параметра</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//в функцию, которую вызывает... оч полезно <img src='http://php.infoniac.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span>
	event.<span style="color: rgb(102, 0, 102);">target</span>.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#eaea16'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//создаем вторую функцию</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//тут нужно передать сразу параметр</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//так как функция будет вызываться при определенном событии</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и ей в параметры автоматически припишут событие (как в функции выше)</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//а элемент можно вызывать с помощью конструкции .target</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//(цель события)</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenHighlightChange <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 102); font-weight: bold;">item</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//тут, вместо одного значения цвета, через запятую добавляем второй цвет</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//что установит первый цвет, и целевой цвет перехода</span>
        <span style="color: rgb(0, 0, 102); font-weight: bold;">item</span>.<span style="color: rgb(102, 0, 102);">target</span>.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#eaea16'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'#333333'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'mouseover'</span><span style="color: rgb(51, 153, 51);">,</span> tweenHighlight<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
    $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweenerChange'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'mouseover'</span><span style="color: rgb(51, 153, 51);">,</span> tweenHighlightChange<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>Вкусные примеры</h3>
<p>Вот она – самая интересная часть любого урока. Помните, еще со школы – все что там училка трындит, очень часто кажется бессмыслицей, но если правильно подобрать пример – все обретает очень четкий смысл. Вот они наши примеры. Понажимайте на кнопки в разном порядке и обратите внимание на поведение объекта:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenerFunction  <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">tween</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenerGoBack  <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">tween</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'100px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//функция .fade еще принимает ключевые слова 'out' и 'in',</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//что эквивалентно 0 и 1 соответственно</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenFadeOut <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">fade</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'out'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenFadeFifty <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">fade</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'.5'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenFadeIn <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">fade</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'in'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tweenHighlight <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span>event<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	event.<span style="color: rgb(102, 0, 102);">target</span>.<span style="color: rgb(102, 0, 102);">highlight</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'#eaea16'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_button'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenerFunction<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_reset'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenerGoBack<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_fade_out'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenFadeOut<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_fade_fifty'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenFadeFifty<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tween_fade_in'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> tweenFadeIn<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'tweener'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'mouseover'</span><span style="color: rgb(51, 153, 51);">,</span>tweenHighlight<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>При наведении курсора, кстати, работает первый тип функции <strong>.highlight()</strong>.</p>
</p>
<div id="tweener"></div>
<p><span class="pseudobutton" id="tween_button">Ширина 300</span> &#8212; <span class="pseudobutton" id="tween_reset">Ширина 100</span> &#8212; <span class="pseudobutton" id="tween_fade_out">В невидимку</span> &#8212; <span class="pseudobutton" id="tween_fade_fifty">На половину видно/невидно</span> &#8212; <span class="pseudobutton" id="tween_fade_in">Видимка</span></p>
<p>А этот одинокий квадратик иллюстрирует работу второго типа функции <strong>.highlight()</strong>.</p>
<div id="tweenerChange" style="border: 1px solid black; background-color: rgb(255, 255, 255); width: 100px; height: 100px;"></div>
<h2>И это еще не всё…</h2>
<h3>Создание нового эффекта</h3>
<p>Если потребовалось больше гибкости в управлении эффектами, или еще какие-то дополнительные возможности, а такое бывает, скажу я вам,  нужно будет всего навсего создать новый эффект, вместо использования уже имеющихся эффектов в Mootools. Ниже пример создания нового эффекта. Обратите внимание на ключевое слово <strong>new</strong>, которое используется для создания нового объекта Fx.Tween:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;">window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//вначале назначаем объект, над которым собираемся издеваться своим новым эффектом,</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и назначаем этот объект новой переменной</span>
        <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> newTweenElement <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'newTween'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
       <span style="color: rgb(0, 102, 0); font-style: italic;">//теперь создаем новый эффект, которому передаем переменную с объектом в качестве параметра</span>
       <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> newTween <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>newTweenElement<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<div class="wp_syntax">
<div class="code">
<pre class="html4strict" style="font-family: monospace;"><span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">div</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"newTween"</span>&gt;</span><span style="color: rgb(128, 128, 128); font-style: italic;">&lt;!-- это элемент, к которому применим новый Tween эффект--&gt;</span><span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">div</span>&gt;</span>
<span style="color: rgb(128, 128, 128); font-style: italic;">&lt;!-- а это кнопка, которая очень скоро сыграет свою главную роль --&gt;</span>
<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(0, 0, 0); font-weight: bold;">button</span> <span style="color: rgb(0, 0, 102);">id</span><span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"netTween_set"</span>&gt;</span>Назначить<span style="color: rgb(0, 153, 0);">&lt;<span style="color: rgb(102, 204, 102);">/</span><span style="color: rgb(0, 0, 0); font-weight: bold;">button</span>&gt;</span></pre>
</p></div>
</div>
<h3>Установка стилей</h3>
<p>При создании нового объекта Tween из элемента, можно начинать назначать свойства стилей с помощью функции <strong>.set();</strong>. Эта функция работает моментально и прицип ее работы практически ничем не отличается от <strong>.setStyle();</strong>, рассмотренной нами в <a title="Манипулирование стилями элементов страницы с помощью Mootools" href="http://php.infoniac.ru/mootools-day7-styles.html">7-м уроке</a>:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> newTweenSet <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//обратите внимание на использование ключевого слова "this"</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//немного далее рассмотрю более подробно использование этого слова</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span></pre>
</p></div>
</div>
<p>Когда-то, уже очень давно, я говорил, что определять функции нужно за пределами события domready, но в этом случае, мы создадим эффект внутри этого события, после чего сошлемся на него извне. Мы уже также как-то говорили о том, как можно передавать параметры извне события domready (путем созания анонимной функции).</p>
<h3>.bind()</h3>
<p>С помощью функции <strong>.bind();</strong> можно сделать любой параметр равным ключевому слову &laquo;<strong>this</strong>&raquo; в спектре работы определенной функции:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//вначале добавляем событие клика к кнопке, которую видели немного выше</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//потом, помимо простого вызова функции</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//мы добавляем к ней ".bind()"</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и помещаем в скобки все, что мы хотим передать этой функции</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//и теперь, внутри функции "newTweenSet," ключевое слово "this"</span>
<span style="color: rgb(0, 102, 0); font-style: italic;">//будет относиться к переменной "newTween"</span>
$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'netTween_set'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> newTweenSet.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>newTween<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Таким образом, если взглянем на функцию выше, &laquo;this&raquo; теперь ровняется тому, что мы говорим «newTween» (который, по совместительству, и является нашим объектом классса tween)</p>
<p>А теперь, соединим все это в единое целое:</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//вот наша функция</span>
<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> newTweenSet <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//так как мы использовали bind, "this" теперь относится к "newTween"</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//т.е. на самом деле мы говорим</span>
        <span style="color: rgb(0, 102, 0); font-style: italic;">//newTween.set('width', '300px')</span>
	<span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(102, 0, 102);">set</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span>
&nbsp;
window.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'domready'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span>
    <span style="color: rgb(0, 102, 0); font-style: italic;">//вначале назначаем нашему элементу переменную</span>
	<span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> newTweenElement <span style="color: rgb(51, 153, 51);">=</span> $<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'newTween'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    <span style="color: rgb(0, 102, 0); font-style: italic;">//потом создаем новый эффект FX.Tween и назначаем его своей собственной переменной</span>
    <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> newTween <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">new</span> Fx.<span style="color: rgb(102, 0, 102);">Tween</span><span style="color: rgb(0, 153, 0);">(</span>newTweenElement<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
    <span style="color: rgb(0, 102, 0); font-style: italic;">//а сейчас добавляем наше событие, в котором связываем newTween и newTweenSet с помощью bind</span>
	$<span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'netTween_set'</span><span style="color: rgb(0, 153, 0);">)</span>.<span style="color: rgb(102, 0, 102);">addEvent</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'click'</span><span style="color: rgb(51, 153, 51);">,</span> newTweenSet.<span style="color: rgb(102, 0, 102);">bind</span><span style="color: rgb(0, 153, 0);">(</span>newTween<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
<span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<h3>Запуск эффекта tween</h3>
<p>А теперь, когда мы полностью настроили наш объект, наша функция находится вне события <em>domready</em> и мы помним, как с помощью функции <strong>.set();</strong> назначить параметр стиля, потому, давайте пройдем к, собственно, спец.эффектам. Запустить эффект – очень просто! Аналогично <strong>.fade();</strong> использовать <strong>.start();</strong> можно двумя методами.</p>
<ol>
<li>Провести преобразование от одного значения свойства стиля до другого</li>
<li>Назначить значение свойства стиля, потом перейти у другому</li>
</ol>
<div class="wp_syntax">
<div class="code">
<pre class="javascript" style="font-family: monospace;"><span style="color: rgb(0, 102, 0); font-style: italic;">//эта строчка изменит текущее значение свойства width на 300px</span>
newTween.<span style="color: rgb(102, 0, 102);">start</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span>
&nbsp;
<span style="color: rgb(0, 102, 0); font-style: italic;">//эта строчка установит свойство width на 100px, потом сделает плавный переход на 300px</span>
newTween.<span style="color: rgb(102, 0, 102);">start</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(51, 102, 204);">'width'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'100px'</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">'300px'</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></pre>
</p></div>
</div>
<p>Теперь можно начать (с помощью функции <strong>.start();</strong>) выполнение эффекта из функции и спользовать «this», если была использована функция <strong>.bind();</strong> для связи с «newTween».</p>
<h3>По эффектам tween пока все&#8230;</h3>
<p>Несмотря на то что о эффектах tween еще можно долго говорить. Например, если нужно наложить спец. эффекты на несколько свойств стилей одновременно, можно использовать функцию <strong>.morph();</strong>. Можно использовать библиотеку эффектов и переходов для изменения тех самых переводов. Но этот урок и так получается довольно длинным, потому оставим это все на другие уроки.</p>
<p style="text-align: right;"><strong>Всем удачи и успехов!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://php.infoniac.ru/mootorials-special-effects-day10.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
