<?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>jQuery и другое... &#187; draggable</title>
	<atom:link href="http://www.linkexchanger.su/tag/draggable/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linkexchanger.su</link>
	<description>css, html, php, javascript, jQuery, ajax ... - решения, примеры, рецепты</description>
	<lastBuildDate>Sun, 08 Jan 2012 13:25:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery UI &#8211; плагин Draggable</title>
		<link>http://www.linkexchanger.su/2009/107.html</link>
		<comments>http://www.linkexchanger.su/2009/107.html#comments</comments>
		<pubDate>Mon, 05 Oct 2009 11:27:16 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/107.html</guid>
		<description><![CDATA[Плагин Draggable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Draggable позволяет делать выбранные элементы веб-страницы перемещаемыми с помощью указателя мыши. Наведите указатель мыши на зеленый квадрат, нажмите левую клавишу мыши и попробуйте перемещать его.

А теперь посмотрите, насколько легко это реализовать&#8230;.
Для начала посетим [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Draggable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Draggable позволяет делать выбранные элементы веб-страницы перемещаемыми с помощью указателя мыши. Наведите указатель мыши на зеленый квадрат, нажмите левую клавишу мыши и попробуйте перемещать его.<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_draggable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="180" width="418"></iframe><br />
А теперь посмотрите, насколько легко это реализовать&#8230;.<span id="more-107"></span><br />
Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Draggable</strong> и видим, что вместе с ним отметился <strong>чекбокс UI Core</strong>. Работа плагина Draggable зависит от него, поэтому он необходим.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>Сначала в разделе <strong>HEAD</strong> подключаем несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/le-frog/jquery-ui-1.7.2.custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;js/jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Итак, сначала мы подключили файл стилей css/le-frog/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагина Draggable (на самом деле для использования в примерах этой статьи там содержится еще и функциональность плагинов Droppable и Sortable).</p>
<p>Смотрим HTML-разметку. Пусть у нас она будет выглядеть так:</p>
<pre class="brush: xml;">&lt;div id=&quot;draggable&quot; class=&quot;ui-widget-content&quot;&gt;
  &lt;p&gt;Drag me&lt;/p&gt;
&lt;/div&gt;</pre>
<p>Связываем функциональность плагина Draggable с выбранным элементом:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Пока мы использовали плагин Draggable с настройками по умолчанию. Но он может принимать более 20 различных опций, которые помогают очень гибко настроить его под конкретные условия использования.<br />
Попробуем передать плагину несколько настроек:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable({
    cursor: &quot;move&quot;,
    revert: true,
    revertDuration: 3000
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Здесь мы изменили вид курсора во время перемещения элемента, и добились того, что по окончании перемещения элемент самостоятельно вернется в свое начальное положение в течение 3 секунд.<br />
Остальные опции используются аналогичным образом, самое главное &#8211; знать их название и понимать какая за что отвечает.</p>
<p><strong>addClasses</strong> &#8211; по умолчанию эта опция имеет значение true. Если установить значение false, то это предотвратит добавление класса ui-draggable к перемещаемым элементам. Это может потребоваться из соображений оптимизации при вызове .draggable() например, для нескольких сотен элементов.<br />
<strong>appendTo</strong> &#8211; по умолчанию эта опция имеет значение &#8216;parent&#8217;. В ней можно передать селектор jQuery или элемент, который будет использован в качестве контейнера для объекта, представляющего перемещаемый элемент во все время его перемещения.<br />
<strong>axis</strong> &#8211; вынуждает перетаскиваемый элемент перемещаться только по оси x или только по оси y. Значение по умолчанию false, что позволяет элементу перемещаться свободно.<br />
<strong>cancel</strong> &#8211; по умолчанию эта опция имеет значение &#8216;input, option&#8217;. Если эти элементы находятся внутри перемещаемого элемента, то перемещаемый элемент нельзя захватить, при нахождении указателя мыши над определенными в этой опции элементами. Для выбора элементов используется селектор jQuery.<br />
<strong>connectToSortable</strong> &#8211; разрешает «сброс» перемещаемых элементов в сортируемый (sortable) список. При этом «сброшенный» элемент становится частью списка. В качестве значения указывается селектор jQuery. По умолчанию имеет значение false. Для корректной работы необходимо дополнительно использовать опцию helper со значением &#8216;clone&#8217;.<br />
<strong>containment</strong> &#8211; ограничивает перемещение внутри определенного элемента или области. В качестве значения может принимать селектор jQuery, элемент, строку или массив. Примеры возможных значений: &#8216;parent&#8217;, &#8216;document&#8217;, &#8216;window&#8217;, [x1, y1, x2, y2].<br />
<strong>cursor</strong> &#8211; строка, в которой может быть передано css значение, определяющее значок для курсора в процессе перетаскивания элемента. По умолчанию – auto.<br />
<strong>cursorAt</strong> &#8211; при перемещении элемента устанавливает курсор в определенную позицию. Например, значение {left: 5, top: 10}, при перемещении установит курсор в 10 пикселах от верхнего края и 5 пикселах от левого края.<br />
<strong>delay</strong> &#8211; отсрочка начала времени перемещения элемента в миллисекундах. Опция используется для того, чтобы предотвратить нежелательное перемещение элемента во время случайного щелчка по нему. По умолчанию имеет значение 0.<br />
<strong>distance</strong> &#8211; расстояние в пикселах, на которое должен переместиться курсор при удерживаемой в нажатом положении левой клавиши мыши прежде, чем начнется перемещение элемента. Опция используется для того, чтобы предотвратить нежелательное перемещение элемента во время случайного щелчка по нему. По умолчанию имеет значение 1.<br />
<strong>grid</strong> &#8211; заставляет перетаскиваемый элемент перемещаться дискретно, по сетке, определяемой массивом передаваемых в опцию значений. Значение по умолчанию false, что позволяет элементу перемещаться свободно. Пример передаваемого значения &#8211; [10, 10].<br />
<strong>handle</strong> &#8211; в этой опции можно определить элемент, находящийся внутри перемещаемого элемента, при нахождении над которым указателя мыши будет возможен захват перемещаемого элемента. Для выбора элементов можно использовать селектор jQuery.<br />
<strong>helper</strong> &#8211; возможные значения опции &#8211; &#8216;original&#8217;, &#8216;clone&#8217;, Function. По умолчанию установлено значение &#8216;original&#8217; – визуально наблюдается перемещении самого элемента. При использовании значения &#8216;clone&#8217; перемещаться будет клон элемента, а сам элемент при этом остается на своей позиции. В опции можно определить функцию. Функция обязательно должна возвращать DOM элемент.<br />
<strong>iframeFix</strong> &#8211; по умолчанию установлено значение false. Если установить значение true, будет предотвращен перехват события mousemove во время перемещения элемента при прохождении указателя мыши над iframe. В качестве значения может быть использован селектор jQuery – при этом предотвращение перехвата будет производиться только при прохождении указателя мыши над выбранными iframe. Опция бывает полезна при использовании совместно например с cursorAt.<br />
<strong>opacity</strong> &#8211; устанавливает значение css-свойства opacity для элемента, находящегося в процессе перемещения. По умолчанию установлено значение false, что соответствует полной непрозрачности.<br />
<strong>refreshPositions</strong> &#8211; по умолчанию используется значение false. При значении true позиция «сброса» элемента будет пересчитываться при каждом событии mousemove. Использовать с осторожностью! Такой подход может помочь создать очень динамичное приложение, но безусловно снизит производительность.<br />
<strong>revert</strong> &#8211; значение по умолчанию – false. Если установить значение true, то элемент возвратится на свою исходную позицию после окончания перетаскивания. Также можно передать значения в виде строки. Возможные значения &#8211; &#8216;valid&#8217; или &#8216;invalid&#8217;. Эти значения используются в случае, если перемещаемый элемент будет «сброшен» в какой-либо целевой элемент. При использовании значения &#8216;valid&#8217; перемещаемый элемент возвратится в предыдущую позицию только в том случае, если был «сброшен» в целевой элемент. При использовании значения &#8216;invalid&#8217; не возвратится в предыдущую позицию только в том случае, если он был «сброшен» в целевой элемент.<br />
<strong>revertDuration</strong> &#8211; длительность эффекта возвращения элемента на исходную позицию, в миллисекундах. По умолчанию имеет значение 500. Опция игнорируется, если опция revert имеет значение false.<br />
<strong>scope</strong> &#8211; значением этой опции является строка. По умолчанию установлено значение &#8216;default&#8217;. Перемещаемые элементы, имеющие в опции scope точно такое же значение, как и значение опции scope для элементов с функциональность droppable, будут приниматься этими элементами. По сути, дополняет опцию accept плагина Droppable.<br />
<strong>scroll</strong> &#8211; по умолчанию установлено значение true – при перемещении элемента к краю области просмотра, она автоматически прокручивается бесконечно. Если установить значение false, эта возможность будет запрещена.<br />
<strong>scrollSensitivity</strong> &#8211; число, определяющее расстояние в пикселах от края области просмотра, после которого она начинает прокручиваться. Расстояние определяется относительно указателя мыши, а не перемещаемого элемента. По умолчанию установлено значение 20.<br />
<strong>scrollSpeed</strong> &#8211; число, определяющее скорость, с которой прокручивается область просмотра при приближении указателя мыши к ее краю на расстояние определенное в опции scrollSensitivity. По умолчанию установлено значение 20.<br />
<strong>snap</strong> &#8211; по умолчанию установлено значение false. Если установить значение true (что эквивалентно &#8216;.ui-draggable&#8217;, поскольку значение может определяться также селектором jQuery), то перемещаемый элемент будет «прилипать» к краям выбранных элементов при прохождении около них.<br />
<strong>snapMode</strong> &#8211; опция определяет, как именно перемещаемый элемент будет «прилипать» к выбранным элементам. Например, только к внешним или только к внутренним сторонам элементов. Возможные значения &#8216;inner&#8217;, &#8216;outer&#8217;, &#8216;both&#8217;. Любое значение игнорируется при snap: false. По умолчанию установлено значение &#8216;both&#8217;.<br />
<strong>snapTolerance</strong> &#8211; расстояние в пикселах от перемещаемого элемента до выбранного, при котором произойдет «прилипание». По умолчанию установлено значение 20. Любое значение игнорируется при snap: false.<br />
<strong>stack</strong> &#8211; объект, с помощью которого осуществляется автоматический контроль за свойством z-index определенной группы перемещаемых элементов, всегда помещая перемещаемый элемент поверх остальных. Значение свойства &#8216;group&#8217; определяет jQuery селектор. Дополнительно можно определить свойство &#8216;min&#8217;, число ниже которого значение z-index опуститься не сможет. Например:  $(&#8216;.selector&#8217;).draggable({ stack: { group: &#8216;.selector&#8217;, min: 50 } });<br />
<strong>zIndex</strong> &#8211; число, определяющее значение свойства z-index перемещаемого элемента. По умолчанию false.</p>
<p>Кроме возможности гибкой настройки плагина Draggable, есть возможность заставить его реагировать на некоторые события. Вот пример:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable({
    cursor: &quot;move&quot;,
    stop: function(event, ui) {
  	  alert(&quot;Событие: &quot; + event.type +
  	        &quot;\n\ntop: &quot; + ui.offset.top +
  	        &quot; px\nleft: &quot; + ui.offset.left +
  	        &quot; px&quot;);
  	}
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-three.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы определили в опции stop callback-функцию. Функция принимает два аргумента – объекты event и ui. На простом примере показано, каким образом можно обратиться к свойствам этих объектов. В итоге, при окончании перемещения элемента, в окне предупреждения мы увидим информацию о типе наступившего события &#8211; dragstop, и текущее абсолютное положение элемента на странице.</p>
<p>Опций, связанных с событиями только три:<br />
Опция <strong>start</strong> &#8211; событие <em>dragstart</em> наступает каждый раз при начале перемещения элемента.<br />
Опция <strong>drag</strong> &#8211; событие <em>drag</em> наступает все время, пока элемент находится в процессе перемещения.<br />
Опция <strong>stop</strong> &#8211; событие <em>dragstop</em> наступает каждый раз при завершении перемещения элемента.</p>
<p>Любая callback-функция, определенная в опциях start, drag или stop принимает два аргумента – event и ui. Объект event – это объект события, а объект ui – это специальный объект, в свойствах которого содержится следующая информация:<br />
<strong>ui.helper</strong> – объект, характеризующий элемент, находящийся в процессе перемещения;<br />
<strong>ui.position</strong> – объект, в свойствах top и left которого содержится информация о положении перемещаемого элемента относительно родительского элемента;<br />
<strong>ui.offset</strong> – объект, в свойствах top и left которого содержится информация об абсолютном положении перемещаемого элемента;</p>
<p>Нам осталось познакомиться с методами плагина Draggable. Но для этого нам понадобится добавить в HTML-разметку пару кнопок. Вот так:</p>
<pre class="brush: xml;">&lt;button id=&quot;getOption&quot;&gt;Get Option&lt;/button&gt;
&lt;button id=&quot;setOption&quot;&gt;Set Option&lt;/button&gt;</pre>
<p>В следующем примере продемонстрировано как получать и устанавливать значения опций плагина после его инициализации:</p>
<pre class="brush: jscript;">$(function(){
 $(&quot;#draggable&quot;).draggable({
  cursor: &quot;move&quot;
 });
 $(&quot;#getOption&quot;).click(function(){
  alert($(&quot;#draggable&quot;).draggable(&quot;option&quot;,&quot;grid&quot;));
 });
 $(&quot;#setOption&quot;).click(function(){
  $(&quot;#draggable&quot;).draggable(&quot;option&quot;,&quot;grid&quot;,[50,50]);
 });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_draggable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы связали с кнопками Get Option и Set Option событие click. При щелчке на кнопке Get Option мы вызовем метод option, название которого указываем в первом аргументе, а во втором аргументе передаем название опции, значение которой мы хотели бы получить. В итоге мы увидим окно предупреждения, в котором будет показано значение false, поскольку при инициализации эта опция не была определена, а по умолчанию она имеет именно такое значение.<br />
Попробуйте перетаскивать элемент с помощью мыши – он будет плавно перемещаться в любых направлениях.</p>
<p>Сделаем щелчок на кнопке Set Option, снова вызывая метод option, но теперь мы передаем три аргумента. Первый – название метода, второй – название опции, значение которой мы хотим изменить, и третий аргумент – новое значение опции. Таким образом, передав опции grid значение [50,50] мы заставим элемент перемещаться дискретно, вдоль сетки с шагом 50х50 пикселей.</p>
<p>Доступные методы плагина Draggable:<br />
<strong>destroy</strong> &#8211; .draggable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Draggable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .draggable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .draggable(&#8216;enable&#8217;) разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .draggable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.</p>
<blockquote><p>Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_draggable/ui_draggable.zip">архиве</a>.</p></blockquote>
<p>Для тех, кто смог все это прочитать до конца (а также для тех, кто сразу прокрутил страницу вниз) сообщаю, что в архиве Вы найдете и еще один пример, где показано как можно реализовать перемещение и &laquo;сброс&raquo; элемента несортируемого списка в другой, сортируемый список.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/107.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы: jQuery dialog &#8211; диалоговое окно.</title>
		<link>http://www.linkexchanger.su/2008/32.html</link>
		<comments>http://www.linkexchanger.su/2008/32.html#comments</comments>
		<pubDate>Fri, 22 Feb 2008 07:10:04 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[resizible]]></category>
		<category><![CDATA[диалог]]></category>
		<category><![CDATA[интерфейс]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/32.html</guid>
		<description><![CDATA[Разберем еще один пример для библиотеки jQuery &#8211; построение диалогового окна. При всей полезности этого плагина не могу не отметить, что по крайней мере в IE и Opera присутствуют небольшие огрехи (их можно увидеть и на сайте разработчиков), но они связаны скорее со стилевым оформлением, чем с работой самой библиотеки. В FireFox же и Netscape [...]]]></description>
			<content:encoded><![CDATA[<p>Разберем еще один пример для библиотеки jQuery &#8211; построение диалогового окна. При всей полезности этого плагина не могу не отметить, что по крайней мере в IE и Opera присутствуют небольшие огрехи (их можно увидеть и на сайте разработчиков), но они связаны скорее со стилевым оформлением, чем с работой самой библиотеки. В FireFox же и Netscape Navigator никаких проблем не наблюдалось. Поскольку штука получилась весьма полезная &#8211; разберем ее подробнее. <font color="#ff0000"><strong>Внимание! Эта статья устарела!</strong></font> Новую статью можно <a href="http://www.linkexchanger.su/2009/95.html">почитать здесь</a>.<span id="more-32"></span></p>
<p>Итак, что мы можем получить подключив несколько javascript-файлов, задав соответствующее стилевое оформление и написав вот такой небольшой кусочек кода.<code> </code></p>
<pre class="brush: jscript;">$(&quot;#example&quot;).dialog();</pre>
<p>Мы получаем диалоговое окно, которое можно перемещать по экрану в любом направлении. Мы можем менять размеры этого окна. И конечно, содержимое этого окна может быть вполне функциональным. Испытайте все это на примере.</p>
<blockquote><p>Принимайте во внимание, что пример демонстрируется во фрейме.</p></blockquote>
<p><iframe src="http://www.linkexchanger.su/example_jquery/dialog.html" style="border: medium none " width="420" height="420"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/dialog.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>В раздел HEAD понадобится подключить довольно много файлов: кроме самой библиотеки jQuery &#8211; jquery-1.2.1.js, файлы jquery.dimensions.js, ui.resizable.js, ui.draggable.js, ui.mouse.js и конечно <strong>ui.dialog.js</strong></p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.1.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.dimensions.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.dialog.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.resizable.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.mouse.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.draggable.js&quot;&gt;&lt;/script&gt;</pre>
<p>В исходном коде примера Вы сможете посмотреть стилевую таблицу, отвечающую за отображение диалогового окна и при необходимости отредактировать ее под свой дизайн. Обращаю Ваше внимание на, то что имена классов менять нежелательно. В противном случае Вам придется самостоятельно править код в файле <strong>ui.dialog.js</strong>.</p>
<p>HTML-код не представляет собой ничего интересного &#8211; элемент <strong>div</strong>, который будет служить диалоговым окном с идентификатором и именем класса.</p>
<p>И наконец приведу полностью тот код, который отвечает за диалоговое окно.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#example&quot;).dialog({
    title: &quot;Пример диалогового окна&quot;,
    width: 250,
    height: 150,
    resizable: true,
    draggable: true,
    position: &quot;center&quot;,
    buttons: {
      &quot;Отправить&quot;: function() {
        alert(&quot;Вы нажали кнопку Отправить&quot;);
      },
      &quot;Закрыть&quot;: function() {
        $(this).dialog(&quot;close&quot;);
        alert(&quot;Вы нажали кнопку Закрыть&quot;);
      }
    }
  });
});
&lt;/script&gt;</pre>
<p>Элемент с идентификатором <strong>#example</strong> будет служить диалоговым окном. В файле <strong>ui.dialog.js</strong> большинство опций заданы по умолчанию, мы же для примера попробуем переопределить большинство из них.<br />
<strong>title: &#8216;Пример диалогового окна&#8217;</strong> &#8211; задаем название диалогового окна.<br />
<strong>width: 250</strong> &#8211; ширина окна в px.<br />
<strong>height: 150</strong> &#8211; высота окна в px.<br />
<strong>resizable: true</strong> &#8211; диалоговое окно может (или false &#8211; не может) изменять свои размеры.<br />
<strong>draggable: true</strong> &#8211; диалоговое окно может (или false &#8211; не может) перемещаться по экрану.<br />
<strong>position: center</strong> &#8211; начальное положение окна на экране. Доступны значения center, left, top.<br />
<strong>buttons</strong> &#8211; об этом несколько подробнее. Эта опция определяет кнопки, которые понадобится отображать в диалоге. Определяются они парами ключ/значение, где ключ &#8211; это текст, который необходимо отобразить на кнопке, а в качестве значения может выступать функция, которая должна быть вызвана при клике на соответствующую кнопку.</p>
<p>Вот собственно и все. А внутри диалогового окна можно предусмотреть то, что угодно Вам. Будь то авторизационная форма или форма для отправки e-mail с сайта, или еще что-то&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/32.html/feed</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: drag-and-drop сортируемый список.</title>
		<link>http://www.linkexchanger.su/2008/23.html</link>
		<comments>http://www.linkexchanger.su/2008/23.html#comments</comments>
		<pubDate>Mon, 28 Jan 2008 10:25:02 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[drag-and-drop]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[droppable]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[li]]></category>
		<category><![CDATA[ol]]></category>
		<category><![CDATA[ul]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[список]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/23.html</guid>
		<description><![CDATA[Внимание! Эта статья устарела. Новая статья по этой теме: &#171;jQuery UI &#8211; плагин Sortable&#187;. Давайте используем возможности jQuery для создания сортируемого с помощью drag-and-drop списка. Возможность сортировать список с помощью простого перетаскивания мышкой  его пунктов, наверняка сможет произвести впечатление на Ваших пользователей. Только не забывайте одну важную вещь: применение всех этих &#171;фишек&#187; должно быть [...]]]></description>
			<content:encoded><![CDATA[<p><font color="#ff0000">Внимание! Эта статья устарела. Новая статья по этой теме: <a href="http://www.linkexchanger.su/2009/111.html">&laquo;jQuery UI &#8211; плагин Sortable&raquo;</a>.</font> Давайте используем возможности jQuery для создания сортируемого с помощью drag-and-drop списка. Возможность сортировать список с помощью простого перетаскивания мышкой  его пунктов, наверняка сможет произвести впечатление на Ваших пользователей. Только не забывайте одну важную вещь: применение всех этих &laquo;фишек&raquo; должно быть целесообразным и соответствовать ожиданиям пользователя. Не стоит применять такие эффекты сплошь и рядом  &#8211; можно  получить совсем не тот результат, на который Вы рассчитывали. Это было небольшое лирическое отступление, а теперь &#8211; к делу.<span id="more-23"></span><br />
Как обычно, первым делом рассмотрим работу пары примеров.<br />
Меню слева работает с опциями, установленными по умолчанию. Все, что нужно для создания такого меню (разумеется, кроме библиотеки jQuery и своего HTML-кода), это написать следующее:</p>
<pre class="brush: jscript;">$(&quot;#menuList&quot;).sortable();</pre>
<p>где <strong>#menuList</strong> &#8211; это идентификатор списка.<br />
В меню справа использованы некоторые дополнительно установленные опции. Код конечно немного посложнее, но и в нем нет абсолютно ничего страшного.<br />
<iframe src="http://www.linkexchanger.su/example_jquery/sortable.html" style="border: medium none " width="420" height="250"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/sortable.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>А теперь разберем примеры более подробно. Этот пример для своей корректной работы требует подключения достаточно большого количества различных вспомогательных файлов.</p>
<pre class="brush: xml;">
&lt;script src=&quot;js/jquery-1.2.1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.dimensions.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.mouse.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.draggable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.draggable.ext.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.droppable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.droppable.ext.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.sortable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Все файлы уже знакомы по предыдущим примерам. Добавился только один файл <strong>ui.sortable.js</strong>, который (как и все остальные) мы подключаем в разделе <strong>HEAD</strong> нашей страницы.<br />
Из таблицы стилей остановлюсь только на небольшом моменте, поскольку это по большому счету дело вкуса.</p>
<pre class="brush: css;">.dragStyle {
  background:#CFD4E6;
  border:1px solid #727EA3;
}</pre>
<p>Класс <strong>dragStyle</strong> используется во втором примере и применяется в момент перемещения элемента, отображая то место, на которое перемещаемый элемент будет &laquo;сброшен&raquo;.</p>
<p>Далее полностью приведен кусок кода, который и отвечает за работу обоих списков.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#menuList&quot;).sortable(); // 1-ый спискок

  $(&quot;#menuList2&quot;).sortable({ // 2-ой список
	hoverClass: &quot;dragStyle&quot;,
	start: function(ev, ui) {
	  var text = $(ui.draggable.element).text();
	  $(&quot;#result&quot;).text(&quot;Перемещаем &quot; + text);
	},
	stop: function(ev, ui) {
	  $(&quot;#result&quot;).text(&quot;Перемещение окончено!&quot;);
	}
  });
});
&lt;/script&gt;</pre>
<p>Вот так просто. За работу первого списка отвечает всего-навсего одна строка кода. Для второго списка мы используем некоторые дополнительные опции.<br />
<strong>hoverClass</strong> &#8211; опция содержит название класса, который будет применен в процессе перемещения одного из пунктов списка, чтобы указать место, куда перемещаемый пункт будет &laquo;сброшен&raquo;.<br />
<strong>start</strong> &#8211; здесь указываем функцию, которая выполнится в момент старта перемещения элемента списка. В этой функции мы обращаемся к перемещаемому элементу, получаем его содержимое в виде текста и записываем в переменную <strong>text</strong>. Затем отыскиваем элемент <strong>#result</strong> и вставляем текст туда.<br />
<strong>stop</strong> &#8211; указываем функцию, которая выполнится в момент, когда произошел &laquo;сброс&raquo; элемента на нужную позицию (независимо от того изменилась ли фактическая позиция элемента). Тут тоже все предельно просто &#8211; вставляем текст сообщения в элемент <strong>#result</strong>.</p>
<p>Я использовал для примера всего несколько опций, а их полный список опций можно найти на сайте разработчиков библиотеки.</p>
<p>Буду рад, если найдете возможность оставить свой комментарий или задать вопросы.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/23.html/feed</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: перемещаемый и &#171;сбрасываемый&#187; контент.</title>
		<link>http://www.linkexchanger.su/2008/21.html</link>
		<comments>http://www.linkexchanger.su/2008/21.html#comments</comments>
		<pubDate>Thu, 24 Jan 2008 14:30:46 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[drag-and-drop]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[droppable]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[скрипт]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/21.html</guid>
		<description><![CDATA[ Внимание! Эта статья устарела. Новая статья по этой теме: &#171;jQuery UI &#8211; плагин Droppable&#171;. Библиотека jQuery предоставляет возможность не только легко и просто написать код, который позволит свободно перемещать элементы по странице. В ее состав, вернее в состав ее расширений входит функция droppable, которая позволяет также довольно просто написать код, который будет обрабатывать события, [...]]]></description>
			<content:encoded><![CDATA[<p> <font color="#ff0000">Внимание! Эта статья устарела. Новая статья по этой теме: &laquo;<a href="http://www.linkexchanger.su/2009/108.html">jQuery UI &#8211; плагин Droppable</a>&laquo;.</font> Библиотека jQuery предоставляет возможность не только легко и просто написать код, который позволит свободно перемещать элементы по странице. В ее состав, вернее в состав ее расширений входит функция <strong>droppable</strong>, которая позволяет также довольно просто написать код, который будет обрабатывать события, которые происходят в момент окончания перемещения элемента.<br />
Что полезного с практической точки зрения можно сделать, воспользовавшись такой возможностью. Первое, что приходит в голову &#8211; это какая-нибудь интерактивная корзина для интернет-магазина. Вот и попробуем сделать такой пример.<span id="more-21"></span></p>
<p>Как всегда сначала попробуем испытать готовый пример, а затем разберемся как работает этот код. Берем мышкой нужный продукт и тащим его в корзину. Над корзиной отпускаем и смотрим, что получилось&#8230;</p>
<blockquote><p>Чтобы не усложнять код примера, не применяются некоторые проверки, которые должны быть использованы в целях безопасности в реальных интернет-магазинах.</p></blockquote>
<p><iframe src="http://www.linkexchanger.su/example_jquery/droppable.html" style="border: medium none " width="420" height="180"></iframe></p>
<blockquote><p>Вы можете сохранить <a href="http://www.linkexchanger.su/example_jquery/droppable.zip">исходный код</a> примера и при наличии у Вас библиотеки jQuery, воспроизвести его на своем сайте.</p></blockquote>
<p>Чтобы все это работало, нам потребуется подключить к нашей странице, в разделе HEAD довольно много файлов (за исключением самой библиотеки эти файлы не очень большие):</p>
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.1.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.dimensions.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.mouse.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.draggable.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.draggable.ext.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.droppable.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.droppable.ext.js&quot;&gt;&lt;/script&gt;</pre>
<p>Большинство их уже знакомы по предыдущим примерам, добавились только ui.droppable.js и ui.droppable.ext.js, которые и обеспечат нам те возможности, которые мы собираемся рассмотреть.</p>
<p>Не будем очень уж внимательно рассматривать таблицу стилей, поскольку здесь в основном это дело вкуса. Остановлюсь только на ее отдельных моментах.</p>
<pre class="brush: css;">
.products {
  float:left;
}
#basket {
  background-color:#e9b96e;
  border:3px double #c17d11;
  width:150px;
  height:120px;
  margin:10px;
  padding:3px;
  position:absolute;
  top:5px;
  right:5px;
}</pre>
<p>В работе примера используются элементы с классом <strong>.products</strong> и идентификатором <strong>#basket</strong> (понятно, что products &#8211; это товары интернет-магазина, а basket &#8211; корзина). Никаких подводных камней тут нет, можно использовать любой стиль отображения этих элементов. Единственное, что необходимо учитывать &#8211; наш скрипт будет обращаться к этим элементам по имени класса и идентификатора.<br />
Можно упомянуть еще два класса из таблицы стилей:</p>
<pre class="brush: css;">
.droppable-active {
	outline:1px dotted #F00;
}
.droppable-hover {
	outline:1px dotted #00F;
}</pre>
<p>Класс <strong>.droppable-active</strong> будет использован скриптом в тот момент, когда процесс перемещения элемента уже начался, но перемещаемый элемент еще не находится &laquo;в зоне действия&raquo; целевого элемента. А класс <strong>.droppable-hover</strong> будет применен, когда перемещаемый элемент окажется над целевым.</p>
<p>Сам HTML-код вообще не представляет собой ничего особенного: несколько картинок, целевой блок, блок вывода результатов. Все это Вы сможете посмотреть, если скачаете файл примера. А вот сам JavaScript, который все это обрабатывает, разберем подробнее. Код получился немножко длинноват, но очень хотелось сделать более-менее красивый пример, а не полуфабрикат&#8230;</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){

// ---- DRAGGABLES &amp; DROPPABLES -----
$(&quot;div.products&quot;).draggable({
  helper: clone,
  opacity: 0.5
});

$(&quot;#basket&quot;).droppable({
  accept: &quot;.products&quot;,
  activeClass: &quot;droppable-active&quot;,
  hoverClass: &quot;droppable-hover&quot;,
  drop: function(ev, ui) {
    var code = $(ui.draggable.element)
    .find(&quot;img&quot;).attr(&quot;id&quot;);
    if($(this).find(&quot;div[@id=&quot;+ code +&quot;]&quot;)
      .html()==null) {
      var name = $(ui.draggable.element)
      .find(&quot;img&quot;).attr(&quot;alt&quot;);
      $(this).append(&quot;
&lt;div class=&quot;basket&quot; id=&quot; + code + &quot;&gt;
&lt;input type=&quot;text&quot; class=&quot;qnt&quot;/&gt; &quot; + name +
&quot;&lt;img src=&quot;droppable-delete.gif&quot; class=&quot;delete&quot;
alt=&quot;Удалить&quot; /&gt;&lt;/div&gt;
&quot;);
    }
  // *******************
  $(&quot;.delete&quot;).click(function () {
    $(this).parent().remove();
  });
  // *******************
  // *******************
  $(&quot;#buy&quot;).click(function () {
    var databox = new Array();
    $(&quot;#basket&quot;).find(&quot;input[@type=text]&quot;)
      .each(function(){
      var qnt = $(this).attr(&quot;value&quot;);
      if(qnt===undefined) { qnt = 0; }
      	var text = $(this).parent().text();
      	databox[databox.length] =  text + &quot; - &quot; + qnt;
      });
      data = databox.join(&quot; кг, &quot;);
      $(&quot;#buyResult&quot;).html(&quot;Вы заказали:&quot; + data +
&quot; кгСпасибо за покупку!&quot;);
    });
  // ****************
  }
});
// ------ DRAGGABLES &amp; DROPPABLES ------
});
&lt;/script&gt;</pre>
<p>Как обычно используем $(document).ready(function(){&#8230;}); которая отслеживает момент готовности объектной модели документа (DOM). В нее &laquo;завернуто&raquo; все, что мы написали. И начнем разбираться дальше.</p>
<pre class="brush: jscript;">
$(&quot;div.products&quot;).draggable({
  helper: clone,
  opacity: 0.5
});</pre>
<p>Это уже должно быть немножко знакомо: выбираем набор элементов <strong>DIV</strong>, имеющих класс <strong>.products</strong> и делаем любой из них свободно перемещаемым, задавая при этом некоторые опции. <strong>helper: clone</strong> &#8211; при перемещении элемента он останется на месте, а перемещать с помошью мыши мы будем его клон, <strong>opacity: 0.5</strong> &#8211; прозрачность которого во время перемещения будет 0,5.</p>
<p>Дальше буду приводить код небольшими кусочками, чтобы было легче разбираться.<br />
<code></code></p>
<pre class="brush: jscript;">
$(&quot;#basket&quot;).droppable({
  accept: &quot;.products&quot;,
  activeClass: &quot;droppable-active&quot;,
  hoverClass: &quot;droppable-hover&quot;</pre>
<p>Выбираем элемент с идентификатором <strong>basket</strong> и делаем его <strong>droppable</strong> &#8211; туда будем &laquo;сбрасывать&raquo; перемещаемые элементы. Далее устанавливаем необходимые опции:<br />
<strong>accept: &laquo;.products&raquo;</strong> &#8211; &laquo;сбросить&raquo; мы можем только элементы, имеющие класс <strong>products</strong>.<br />
<strong>activeClass: &laquo;droppable-active&raquo;</strong> &#8211; имя класса, который будет применен к <strong>#basket</strong> во время перемещения любого из элементов с классом <strong>.products</strong>, но до того, как перемещаемый элемент окажется &laquo;в зоне действия&raquo; элемента <strong>#basket</strong>.<br />
<strong>hoverClass: &laquo;droppable-hover&raquo;</strong> &#8211; все тоже самое, только класс будет применен тогда, когда перемещаемый элемент попадет в &laquo;зону действия&raquo; элемента <strong>#basket</strong>.<br />
В опции <strong>drop</strong> &#8211; устанавливается функция, которая должна будет выполниться в момент, когда мы &laquo;сбросили&raquo; перемещаемый элемент. Простор для фантазии &#8211; обрабатывайте данные как угодно. Я кратко немного прокомментирую, что написано дальше.</p>
<pre class="brush: jscript;">
var code = $(ui.draggable.element)
.find(&quot;img&quot;).attr(&quot;id&quot;);</pre>
<p>Мы обращаемся к перемещаемому элементу, находим в нем (именно в нем) элемент <strong>img</strong> и получаем значение его атрибута <strong>id</strong>. Сохраняем в переменной <strong>code</strong>.</p>
<pre class="brush: jscript;">if($(this).find(&quot;div[@id=&quot;+ code +&quot;]&quot;).html()==null)</pre>
<p>Здесь будем проверять, нет ли уже в нашей корзине товара с таким же <strong>id</strong>. Для этого обратимся к элементу, который представляет собой нашу корзину (<strong>this</strong> в данном случае тоже самое, что и <strong>#basket</strong>), найдем элемент <strong>div</strong> с <strong>id</strong> равным <strong>id</strong> перемещаемого элемента (хранится в переменной <strong>code</strong>) и получим его HTML-код. Сравним с <strong>null</strong>. Если условие верное, значит такого продукта в корзине еще нет и мы можем выполнять следующие операторы, чтобы добавить товар в корзину.</p>
<pre class="brush: jscript;">var name = $(ui.draggable.element)
.find(&quot;img&quot;).attr(&quot;alt&quot;);</pre>
<p>Обращаемся к перемещаемому элементу (это уже делали, правда?), ищем <strong>img</strong>, получаем значение атрибута <strong>alt</strong>, где у нас хранится название товара.<br />
Теперь осталось только сформировать нужный HTML-код и добавить его в корзину, т.е. в элемент <strong>#basket</strong>.</p>
<pre class="brush: jscript;">$(this).append('&lt;p class=&quot;basket&quot; id=' + code + '&gt;
&lt;input class=&quot;qnt&quot; type=&quot;text&quot; /&gt; ' + name +
'&lt;img src=&quot;droppable-delete.gif&quot; class=&quot;delete&quot; alt=&quot;Удалить&quot; /&gt;');&lt;/p&gt;</pre>
<p>Тут вроде бы все достаточно понятно. И осталось написать еще пару вспомогательных функций, чтобы пример был хоть немного действующим. Приводить их еще раз тут не  буду (можете посмотреть их в полном коде), просто поясню, что первая обрабатывает клик мышкой на картинке удаления товара из корзины и собственно удаляет выбранный элемент <strong>div</strong>. А вторая обходит все имеющиеся текстовые поля ввода, собирает их значения в массив, объединяет массив в строку и выводит результат в виде HTML-кода в элемент <strong>#buyResult</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/21.html/feed</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: свободно перемещаемый контент.</title>
		<link>http://www.linkexchanger.su/2008/18.html</link>
		<comments>http://www.linkexchanger.su/2008/18.html#comments</comments>
		<pubDate>Fri, 18 Jan 2008 11:35:26 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[интерфейс]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/18.html</guid>
		<description><![CDATA[Внимание! Эта статья устарела. Новая статья по этой теме: &#171;jQuery UI &#8211; плагин Draggable&#171;. Давайте продолжим знакомство с элементами пользовательских интерфейсов, которые можно создавать на базе библиотеки jQuery. Попробуем создавать элементы, которые можно будет свободно перемещать по странице с помощью мыши. Вы наверняка уже встречали такие &#171;фичи&#187;. Оказывается, с помощью jQuery сделать это самому не [...]]]></description>
			<content:encoded><![CDATA[<p><font color="#ff0000">Внимание! Эта статья устарела. Новая статья по этой теме: &laquo;<a href="http://www.linkexchanger.su/2009/107.html">jQuery UI &#8211; плагин Draggable</a>&laquo;.</font> Давайте продолжим знакомство с элементами пользовательских интерфейсов, которые можно создавать на базе библиотеки jQuery. Попробуем создавать элементы, которые можно будет свободно перемещать по странице с помощью мыши. Вы наверняка уже встречали такие &laquo;фичи&raquo;. Оказывается, с помощью jQuery сделать это самому не составляет почти никакого труда!<span id="more-18"></span><br />
Опять же обратимся к сайту разработчиков библиотеки. Там приведен вот такой простой код:</p>
<pre class="brush: jscript;">$(&quot;.block&quot;).draggable();</pre>
<p>И это почти все! В этом коде сообщается, что перемещаемыми элементами становятся все элементы с классом <strong>block</strong>. Но опять же, разработчики предлагают большой набор различных опций, с помощью которых можно извлекать какую-либо практическую пользу. Иначе зачем таскать блоки по странице? Только лишь с целью поразить пользователя? Нет конечно.<br />
Давайте сначала посмотрим пример того, как это работает, а затем мы разберем код, который обеспечивает эту возможность. В примере задана опция возврата элемента на исходную позицию после окончания его перемещения.<br />
<iframe src="http://www.linkexchanger.su/example_jquery/draggable.html" style="border: medium none " width="400" height="300"></iframe></p>
<blockquote><p>Вы можете сохранить <a href="http://www.linkexchanger.su/example_jquery/draggable.zip">исходный код</a> примера и при наличии у Вас  библиотеки jQuery, воспроизвести его на своем сайте.</p></blockquote>
<p>Для того, чтобы элементы действительно стали перемещаемыми, нам потребуется подключить к нашей странице, в разделе <strong>HEAD</strong> четыре файла:</p>
<pre class="brush: xml;">
&lt;script src=&quot;js/jquery-1.2.1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.mouse.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.draggable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.draggable.ext.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Первым подключается библиотека jQuery, а затем &#8211; файл, выполняющий обработку событий мышки. Два следующих файла работают непосредственно над перемещением элементов по странице.<br />
Далее в этом же разделе <strong>HEAD</strong> следует таблица стилей в которой мы определим класс (это может быть например и идентификатор) для элементов, которые хотим сделать свободно перемещаемыми.<br />
И наконец код&#8230; Естественно, в примере используются не все возможные опции, но я думаю, что сами принципы пример может продемонстрировать неплохо.</p>
<pre class="brush: jscript;">
$(document).ready(function(){
    $(&quot;.block&quot;).draggable({
        revert: true,
        drag: function(e,ui) {
            $(this).css(&quot;background-color&quot;,&quot;#E2F2E2&quot;);
            $(&quot;#position&quot;).text(&quot;Положение перемещаемого
            элемента - слева: &quot; + ui.position.left + &quot;px,
            а сверху: &quot; + ui.position.top + &quot;px&quot;);
        },
        stop: function(e,ui) {
            $(this).css(&quot;background-color&quot;, &quot;#58AEFC&quot;);
        }
    });
});
</pre>
<p>Весь код &laquo;обернут&raquo; уже немного знакомой нам</p>
<pre class="brush: jscript;">
$(document).ready(function(){
...
});</pre>
<p>которая отслеживает момент готовности объектной модели документа (DOM).</p>
<blockquote><p>Это чем-то похоже на событие onload, но в отличие от него разрешает выполнение javascript сразу после того, как DOM готова к работе, а не после полной загрузки страницы.</p></blockquote>
<p>Итак, вначале мы сообщаем, что перемещаемыми элементами будут все элементы с классом <strong>block</strong>. А затем просто перечисляем те опции, которые мы хотим использовать.</p>
<p><strong>revert: true</strong> указывает на то, что после окончания процесса перетаскивания, элемент должен вернуться на прежнее место.<br />
Опция <strong>drag</strong> содержит функцию, которая будет выполняться во время самого процесса перетаскивания элемента. В этой функции мы сначала задаем свойство background-color для перетаскиваемого элемента (по-русски &#8211; меняем его цвет), а затем в элемент с идентификатором <strong>#position</strong> вставляем строку текста, в которой сообщаем текущее пололжение левого верхнего угла перетаскиваемого элемента относительно окна браузера.<br />
В опции <strong>stop</strong> мы определяем функцию, которая выполнится в момент остановки процесса перемещения элемента и просто вернет цвет элемента к начальному.</p>
<p>Вот и все. Далее я привожу всего несколько опций. Полный их перечень можно найти на сайте разработчиков библиотеки jQuery.</p>
<p><strong>axis</strong> &#8211; ограничивает перемещение по горизонтальной (x) или вертикальной (y) осям.<br />
<strong>containment</strong> &#8211; ограничивает перемещение к в пределах границ указанного элемента &#8211; может быть элемент DOM, родительский элемент, документ или селектор jQuery.<br />
<strong>effect</strong> &#8211; эффекты от начала перемещения до остановки. Возможно например FadeIn при старте и FadeOut при остановке.<br />
<strong>opacity</strong> &#8211; прозрачность перемещаемого элемента.<br />
<strong>revert</strong> &#8211; если истина, элемент вернется на позицию откуда было начато перемещение.<br />
<strong>start(e,ui), drag(e,ui) и stop(e,ui)</strong> &#8211; функции, которые могут вызываться при начале, окончании или процессе перетаскивания элементов.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/18.html/feed</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
	</channel>
</rss>

