<?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; droppable</title>
	<atom:link href="http://www.linkexchanger.su/tag/droppable/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; плагин Droppable</title>
		<link>http://www.linkexchanger.su/2009/108.html</link>
		<comments>http://www.linkexchanger.su/2009/108.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 05:25:13 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[droppable]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/108.html</guid>
		<description><![CDATA[Плагин Droppable &#8211; один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Droppable позволяет делать выбранные элементы веб-страницы &#171;сбрасываемыми&#187; в некий целевой элемент. Естественно, что для того чтобы быть &#171;сброшенным&#187;, элемент должен быть перемещаемым, а целевой элемент должен уметь принимать &#171;сбрасываемые&#187; элементы. Наведите указатель мыши [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong>Droppable</strong> &#8211; один из нескольких плагинов, входящих в состав <strong>jQuery UI</strong>, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Droppable позволяет делать выбранные элементы веб-страницы &laquo;сбрасываемыми&raquo; в некий целевой элемент. Естественно, что для того чтобы быть &laquo;сброшенным&raquo;, элемент должен быть перемещаемым, а целевой элемент должен уметь принимать &laquo;сбрасываемые&raquo; элементы. Наведите указатель мыши на черный квадрат, нажмите левую клавишу мыши, переместите его внутрь зеленого квадрата и отпустите.<br />
<iframe src="http://www.linkexchanger.su/examples_2009/ui_droppable/example-one.html" style="border: 1px solid #6699cc; overflow: hidden" height="280" width="418"></iframe><br />
А теперь разберемся, как это сделать самостоятельно.<span id="more-108"></span></p>
<p>Для начала посетим страницу <a href="http://jqueryui.com/download">настраиваемой закачки</a> на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке <strong>Deselect all component</strong>, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется &#8211; отмечаем <strong>чекбокс Droppable</strong> и видим, что вместе с ним отметились <strong>чекбоксы UI Core и Draggable</strong>. Работа плагина Droppable зависит от них, поэтому они необходимы.<br />
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку <strong>Download</strong> и получаем архив.</p>
<p>В разделе HEAD подключаем несколько файлов, которые есть в архиве.</p>
<pre class="brush: xml;">&lt;link type=&quot;text/css&quot; href=&quot;css/trontastic/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/trontastic/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагинов Droppable и Draggable (ведь прежде, чем «сбросить» элемент, его надо переместить).</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 to my target&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;droppable&quot; class=&quot;ui-widget-header&quot;&gt;
&lt;p&gt;Drop here&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;</pre>
<p>Элемент с идентификатором #draggable будет у нас перемещаемым, элемент с идентификатором #droppable &#8211; целевым, в него можно будет &laquo;сбросить&raquo; перемещаемый элемент. Наконец, элемент с идентификатором #result будет служить для придания наглядности примеру.</p>
<p>Теперь смотрим javascript-код:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
  $(&quot;#droppable&quot;).droppable({
    drop: function(){
      $(&quot;#result&quot;).append(&quot;Dropped!&quot;);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-one.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Мы сразу же определили callback-функцию в опции drop. Это сделано в первую очередь для наглядности. Как только перемещаемый блок div будет «сброшен» в целевой блок div, в элемент с идентификатором #result будет добавлен соответствующий текст.</p>
<p>Но попробуем передать плагину еще пару каких-либо опций.</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
  $(&quot;#droppable&quot;).droppable({
    activeClass: &quot;active&quot;,
    hoverClass: &quot;hover&quot;,
    drop: function(){
      $(&quot;#result&quot;).append(&quot;Dropped!&quot;);
    }
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-two.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>Передав плагину Droppable опции activeClass и hoverClass, в которых указали имена классов, мы добились того, чтобы все время в процессе движения перемещаемого элемента, у элемента целевого присутствовала красная рамка, а в тот момент, когда перемещаемый элемент оказывается над целевым, рамка поменяет свой цвет на синий.</p>
<p>Плагин Droppable может принимать семь опций:<br />
<strong>accept</strong> &#8211; в опции может быть указан селектор или функция. Все перемещаемые элементы, которые будут выбраны этим селектором, получат возможность быть «сброшенными» в элемент, к которому применена функциональность плагина Droppable. Если в этой опции определена функция, то она будет вызываться для каждого перемещаемого элемента на странице (передаваемого в функцию как первый аргумент), с целью применения пользовательского фильтра. Функция должна будет возвратить true, если элемент должен получить возможность быть «сброшенным». По умолчанию – *.<br />
<strong>activeClass</strong> &#8211; если в этой опции определить имя класса, то он будет добавлен к целевому элементу в момент начала перемещения элемента, который должен быть «сброшен». По умолчанию – false.<br />
<strong>addClasses</strong> &#8211; по умолчанию опция имеет значение true. Если установить false, то это предотвратит добавление класса с именем ui-droppable. Это может потребоваться в целях оптимизации при вызове .droppable() для нескольких сотен элементов.<br />
<strong>greedy</strong> &#8211; если для этой опции установлено значение true, это предотвращает всплывание события, т.е. если «сброс» был выполнен во внутренний элемент, в то время как его родитель тоже может принимать «сбрасываемый» элемент, события drop для элемента-родителя не произойдет. По умолчанию опция имеет значение false.<br />
<strong>hoverClass</strong> &#8211; если в этой опции определить имя класса, то он будет добавлен к целевому элементу в тот момент, когда перемещаемый элемент окажется над целевым элементом. По умолчанию – false.<br />
<strong>scope</strong> &#8211; по умолчанию эта опция имеет значение &#8216;default&#8217; и применяется в дополнение к опции accept. В опции может быть определено любое значение в виде строки и все перемещаемые элементы, с таким же значение соответствующей опции, будут иметь возможность «сброса» в целевой элемент.<br />
<strong>tolerance</strong> &#8211; опция определяет, в какой момент необходимо произвести «сброс» элемента, при нахождении его над целевым элементом. По умолчанию имеет значение &#8216;intersect&#8217;, что определит «сброс» в тот момент, когда перемещаемый элемент перекрыл целевой как минимум на 50%.  Другие возможные значения: <em>fit</em> – перемещаемый элемент должен полностью войти в целевой элемент; <em>pointer</em> – указатель мыши должен войти в целевой элемент; <em>touch</em> – перемещаемый элемент должен перекрыть целевой элемент на любую самую малую величину;</p>
<p>Как и другие плагины, входящие в состав UI jQuery, плагин Droppable умеет реагировать на некоторые события. Опций, в которых можно определить callback-функции, вызываемые при наступлении соответствующего события, всего пять.  В самом первом примере мы уже использовали опцию drop, но если вы откроете <a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-three.html" target="_blank">этот пример</a>, увидите в действии и остальные.</p>
<p>Опция <strong>activate</strong> &#8211; событие <em>dropactivate</em> происходит в момент начала движения перемещаемого элемента.<br />
Опция <strong>deactivate</strong> &#8211; событие <em>dropdeactivate</em> происходит в момент окончания движения перемещаемого элемента, независимо от того, был ли он «сброшен» в целевой элемент или нет.<br />
Опция <strong>over</strong> &#8211; событие <em>dropover</em> происходит в момент входа перемещаемого элемента в пределы целевого элемента.<br />
Опция <strong>out</strong> &#8211; событие <em>dropout</em> происходит в момент выхода перемещаемого элемента за пределы целевого элемента.<br />
Опция <strong>drop</strong> &#8211; событие <em>drop</em> происходит в момент «сброса» перемещаемого элемента в целевой элемент.</p>
<p>Надо отметить, что любая callback-функция, вызываемая при наступлении какого-либо события может принимать два аргумента. Первый аргумент – объект события, второй – специальный объект ui, в свойствах которого содержится следующая информация:<br />
<strong>ui.helper</strong> – объект, характеризующий перемещаемый элемент;<br />
<strong>ui.position</strong> – объект, в свойствах top и left которого содержится информация о положении перемещаемого элемента относительно родительского элемента;<br />
<strong>ui.offset</strong> – объект, в свойствах top и left которого содержится информация об абсолютном положении перемещаемого элемента;</p>
<p>Плагин Droppable имеет четыре метода, с помощью которых можно управлять им уже после инициализации. Добавим в разметку несколько кнопок, чтобы по клику на них вызывать нужные методы плагина:</p>
<pre class="brush: xml;">&lt;button id=&quot;disable&quot;&gt;Disable&lt;/button&gt;
&lt;button id=&quot;enable&quot;&gt;Enable&lt;/button&gt;
&lt;button id=&quot;destroy&quot;&gt;Destroy&lt;/button&gt;</pre>
<p>И теперь познакомимся с некоторыми из методов на примере:</p>
<pre class="brush: jscript;">$(function(){
  $(&quot;#draggable&quot;).draggable();
  $(&quot;#droppable&quot;).droppable({
    drop: function(event, ui){
      $(&quot;#result&quot;).append(event.type);
    }
  });
  $(&quot;#disable&quot;).click(function(){
    $(&quot;#droppable&quot;).droppable(&quot;disable&quot;);
  });
  $(&quot;#enable&quot;).click(function(){
    $(&quot;#droppable&quot;).droppable(&quot;enable&quot;);
  });
  $(&quot;#destroy&quot;).click(function(){
    $(&quot;#droppable&quot;).droppable(&quot;destroy&quot;);
  });
});</pre>
<blockquote><p><a href="http://www.linkexchanger.su/examples_2009/ui_droppable/example-four.html" target="_blank">Открыть пример в новом окне</a></p></blockquote>
<p>С кнопками, имеющими идентификаторы #disable, #enable и #destroy связаны обработчики события click, которые вызывают одноименные методы плагина.<br />
Используя .droppable(&laquo;disable&raquo;) можно временно удалить функциональность плагина из выбранного элемента, а с помощью .droppable(&laquo;enable&raquo;) – восстановить ее. Использование  .droppable(&laquo;destroy&raquo;) приведет к окончательному удалению функциональности. Восстановить ее можно будет только перезагрузкой страницы.</p>
<p><strong>destroy</strong> &#8211; .droppable(&#8216;destroy&#8217;) полностью удаляет всю функциональность плагина Droppable. Возвращает элементы в состояние, предшествующее инициализации.<br />
<strong>disable</strong> &#8211; .droppable(&#8216;disable&#8217;) временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.<br />
<strong>enable</strong> &#8211; .droppable(&#8216;enable&#8217;)разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.<br />
<strong>option</strong> &#8211; .droppable(&#8216;option&#8217;, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.</p>
<blockquote><p>Все примеры, использованные в статье, можно совершенно запросто получить в этом <a href="http://www.linkexchanger.su/examples_2009/ui_droppable/ui_droppable.zip">архиве</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/108.html/feed</wfw:commentRss>
		<slash:comments>4</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>
	</channel>
</rss>

