Учебники

script.aculo.us — Drag & Drop

Самая популярная особенность интерфейса Web 2.0 — это функция перетаскивания. К счастью, script.aculo.us обладает встроенной способностью поддерживать перетаскивание.

Чтобы использовать возможности перетаскивания в script.aculo.us, вам необходимо загрузить модуль dragdrop , для которого также требуется модуль эффектов . Таким образом, ваша минимальная загрузка для script.aculo.us будет выглядеть так:

<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript"  src = "/javascript/scriptaculous.js?load = effects,dragdrop"></script>

Перетаскивание вещей вокруг

Сделать элемент перетаскиваемым с помощью script.aculo.us очень просто. Это требует создания экземпляра класса Draggable и определения элемента, который нужно сделать перетаскиваемым.

Draggable Синтаксис

new Draggable( element, options );

Первый параметр конструктора идентифицирует элемент, который необходимо сделать перетаскиваемым, либо как идентификатор элемента, либо как ссылку на элемент. Второй параметр указывает необязательную информацию о том, как должен вести себя перетаскиваемый элемент.

Перетаскиваемые параметры

При создании перетаскиваемого объекта вы можете использовать один или несколько из следующих параметров.

вариант Описание Примеры
возвращаться Если установлено значение true , элемент возвращается в исходное положение после завершения перетаскивания. Также указывает, будет ли вызываться обратный эффект обратного эффекта при остановке операции перетаскивания. По умолчанию false .

пример

щелчок Используется для того, чтобы перетаскивать привязку к сетке или ограничивать ее движение. Если false (по умолчанию), привязка или ограничение не происходит.

  • Если ему назначено целое число x, перетаскиваемый объект будет привязан к сетке из x пикселей.

  • Если массив [x, y], горизонтальное перетаскивание привязывается к сетке из x пикселей, а вертикальное — к y пикселям.

  • Это также может быть функция, соответствующая функции (x, y, draggable), которая возвращает массив [x, y].

пример

ZIndex Задает z-индекс CSS, который будет применен к элементу во время операции перетаскивания. По умолчанию для z-индекса элемента задано значение 1000 при перетаскивании.

пример

ореолы Логическое значение, определяющее, следует ли клонировать перетаскиваемый объект для перетаскивания, оставив оригинал на месте, пока клон не будет отброшен. По умолчанию false .

пример

ограничение Строка, используемая для ограничения перетаскиваемых направлений, горизонтальных или вертикальных . По умолчанию ноль, что означает свободное движение.

пример

справиться Указывает элемент, который будет использоваться в качестве дескриптора для запуска операции перетаскивания. По умолчанию элемент является собственным дескриптором.

пример

starteffect Эффект, вызываемый для элемента при начале перетаскивания. По умолчанию изменяет непрозрачность элемента до 0,2 за 0,2 секунды.

пример

reverteffect Эффект, вызываемый для элемента, когда перетаскивание восстанавливается. По умолчанию используется плавное скольжение к исходной позиции элемента. Вызывается только в том случае, если для возврата задано значение true.

пример

endeffect Эффект, вызываемый для элемента при перетаскивании, заканчивается. По умолчанию изменяет непрозрачность элемента до 1,0 за 0,2 секунды.

пример

пример

Если ему назначено целое число x, перетаскиваемый объект будет привязан к сетке из x пикселей.

Если массив [x, y], горизонтальное перетаскивание привязывается к сетке из x пикселей, а вертикальное — к y пикселям.

Это также может быть функция, соответствующая функции (x, y, draggable), которая возвращает массив [x, y].

пример

пример

пример

пример

пример

пример

пример

пример

Параметры обратного вызова

Кроме того, вы можете использовать любую из следующих функций обратного вызова в параметре options —

функция Описание Примеры
OnStart Вызывается, когда начинается перетаскивание.

пример

onDrag Вызывается повторно при перемещении мыши, если положение мыши меняется с предыдущего вызова.

пример

менять Вызывается так же, как onDrag (который является предпочтительным обратным вызовом).

пример

под конец Вызывается, когда перетаскивание закончено.

пример

пример

пример

пример

пример

За исключением обратного вызова «change», каждый из этих обратных вызовов принимает два параметра: объект Draggable и объект события мыши.

Draggable Пример

Здесь мы определяем 5 элементов, которые сделаны перетаскиваемыми: три элемента <div>, элемент <img> и элемент <span>. Цель трех различных элементов <div> состоит в том, чтобы продемонстрировать, что независимо от того, начинается ли элемент с правила позиционирования статического (по умолчанию), относительного или абсолютного, поведение перетаскивания не изменяется.

Live Demo

<html>
   <head>
      <title>Draggables Elements</title>
		
      <script type = "text/javascript" src = "/javascript/prototype.js"></script>
      <script type = "text/javascript" src = "/javascript/scriptaculous.js"></script>
      
      <script type = "text/javascript">
         // Take all the elements whatever you want to make Draggable.
         var elements = ['normaldiv', 'relativediv', 'absolutediv', 'image', 'span'];
			
         // Make all the items drag able by creating Draggable objects
         window.onload = function() {
            elements.each(function(item) { new Draggable(item, {});});
         }			
      </script>
   </head>

   <body>
      <div id = "normaldiv">
         This is a normal div and this is dragable.
      </div>

      <div id = "relativediv" style="position: relative;">
         This is a relative div and this is dragable.
      </div>

      <div id = "absolutediv" style="position: absolute;">
         This is an absolute div and this dragable.
      </div>
      <br />
		
      <img id = "image" src = "/images/scriptaculous.gif"/>

      <p>Let part <span id = "span" style = "color: blue;"> 
         This is middle part</span> Yes, only middle part is dragable.</p>
   </body>
</html>

Это даст следующий результат —

Отбрасывание вытащенных вещей

Элемент преобразуется в целевой объект с помощью вызова метода add () в пространстве имен с именем Droppables .

Пространство имен Droppables имеет два важных метода: add () для создания цели удаления и remove () для удаления цели удаления.

Синтаксис

Вот синтаксис метода add () для создания цели удаления. Метод add () создает целевой объект из элемента, переданного в качестве его первого параметра, используя параметры хэша, переданные в качестве второго.

Droppables.add( element, options );

Синтаксис для remove () еще проще. Метод remove () удаляет поведение цели удаления из переданного элемента.

Droppables.remove(element);

Опции

При создании перетаскиваемого объекта вы можете использовать один или несколько из следующих параметров.

вариант Описание Примеры
Hoverclass Имя класса CSS, который будет добавлен к элементу, в то время как Droppable активен (имеет приемлемое перетаскивание над ним). По умолчанию равно нулю.

пример

принимать Строка или массив строк, описывающих классы CSS. Падение может принимать только перетаскиваемые объекты, которые имеют один или несколько из этих классов CSS.

пример

политика сдерживания Указывает элемент или массив элементов, которые должны быть родительскими для перетаскиваемого элемента, чтобы он был принят целевым объектом перетаскивания. По умолчанию сдерживающие ограничения не применяются.

пример

перекрываться Если установлено значение «горизонтальный» или «вертикальный», перетаскиваемый элемент будет реагировать на перетаскиваемый элемент только в том случае, если он перекрывается более чем на 50% в заданном направлении. Используется Sortables, обсуждается в следующей главе.
жадный Если true (по умолчанию), он перестает зависать над другими дескрипторами, при перетаскивании не будет искать.

пример

пример

пример

пример

пример

Параметры обратного вызова

Кроме того, вы можете использовать любую из следующих функций обратного вызова в параметре options —

функция Описание Примеры
onHover Определяет функцию обратного вызова, которая активируется, когда подходящий перетаскиваемый элемент находится над целью отбрасывания. Используется Sortables, обсуждается в следующей главе.
OnDrop Определяет функцию обратного вызова, которая вызывается, когда подходящий перетаскиваемый элемент помещается на цель удаления.

пример

пример

пример

Здесь первая часть этого примера аналогична нашему предыдущему, за исключением того, что мы использовали удобную функцию $ A () Prototype для преобразования списка узлов всех элементов <img> в элементе с идентификатором draggables в массив ,

Live Demo

<html>
   <head>
      <title>Drag and Drop Example</title>
		
      <script type = "text/javascript" src = "/javascript/prototype.js"></script>
      <script type = "text/javascript" src = "/javascript/scriptaculous.js"></script>
		
      <script type = "text/javascript">
         window.onload = function() {
            // Make all the images draggables from draggables division.
				
            $A($('draggables').getElementsByTagName('img')).each(function(item) {
               new Draggable(item, {revert: true, ghosting: true});
            });

            Droppables.add('droparea', {hoverclass: 'hoverActive', onDrop: moveItem});
				
            // Set drop area by default  non cleared.
            $('droparea').cleared = false;
         }
   
         // The target drop area contains a snippet of instructional
         // text that we want to remove when the first item
         // is dropped into it.
			
         function moveItem( draggable,droparea){
            if (!droparea.cleared) {
               droparea.innerHTML = '';
               droparea.cleared = true;
            }
				
            draggable.parentNode.removeChild(draggable);
            droparea.appendChild(draggable);
         }
      </script>

      <style type = "text/css">
         #draggables {
            width: 172px;
            border: 3px ridge blue;
            float: left;
            padding: 9px;
         }
			
         #droparea {
            float: left;
            margin-left: 16px;
            width: 172px;
            border: 3px ridge maroon;
            text-align: center;
            font-size: 24px;
            padding: 9px;
            float: left;
         }
			
         .hoverActive {
            background-color: #ffffcc;
         }
			
         #draggables img, #droparea img {
            margin: 4px;
            border:1px solid red;
         }
      </style>
   </head>

   <body>
      <div id = "draggables">
         <img src = "/images/html.gif"/>
         <img src = "/images/css.gif"/>
         <img src = "/images/xhtml.gif"/>
         <img src = "/images/wml_logo.gif"/>
         <img src = "/images/javascript.gif"/>
      </div>

      <div id = "droparea">
         Drag and Drop Your Images in this area
      </div>
   </body>
</html>

Это даст следующий результат —