script.aculo.us - Arrastar e soltar

O recurso mais popular da interface da Web 2.0 é o recurso de arrastar e soltar. Felizmente, o script.aculo.us vem com uma capacidade inerente para suportar arrastar e soltar.

Para usar os recursos de arrastar de script.aculo.us, você precisará carregar o dragdrop módulo, que também requer o effectsmódulo. Portanto, seu carregamento mínimo para script.aculo.us ficará assim:

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

Arrastando coisas

É muito simples tornar um item arrastável usando script.aculo.us. Isso requer a criação de uma instância da classe Draggable e a identificação do elemento a ser arrastado.

Sintaxe arrastável

new Draggable( element, options );

O primeiro parâmetro para o construtor identifica o elemento a ser arrastado como o id do elemento ou uma referência ao elemento. O segundo parâmetro especifica informações opcionais sobre como o elemento arrastável deve se comportar.

Opções arrastáveis

Você pode usar uma ou mais das seguintes opções ao criar seu objeto arrastável.

Opção Descrição Exemplos
reverter Se definido como verdadeiro , o elemento retorna à sua posição original quando o arrasto termina. Também especifica se o retorno de chamada de efeito reverso será invocado quando a operação de arrastar parar. O padrão é falso .

Exemplo

estalo Usado para fazer com que um objeto arrastável se encaixe em uma grade ou para restringir seu movimento. Se false (padrão), não ocorre ajuste ou restrição.
  • Se for atribuído um inteiro x, o arrastável se ajustará a uma grade de x pixels.

  • Se for um array [x, y], o arrastar horizontal se ajustará a uma grade de x pixels e o vertical se ajustará a y pixels.

  • Também pode ser uma função em conformidade com Function (x, y, draggable) que retorna um array [x, y].

Exemplo

zindex Especifica o índice z CSS a ser aplicado ao elemento durante uma operação de arrastar. Por padrão, o índice z do elemento é definido como 1000 ao arrastar.

Exemplo

fantasma Booleano determinando se o arrastável deve ser clonado para arrastar, deixando o original no lugar até que o clone seja solto. O padrão é falso .

Exemplo

restrição Uma string usada para limitar as direções arrastáveis, horizontal ou vertical . O padrão é nulo, o que significa movimento livre.

Exemplo

lidar com Especifica um elemento a ser usado como alça para iniciar a operação de arrastar. Por padrão, um elemento é seu próprio identificador.

Exemplo

efeito estelar Um efeito chamado no elemento ao iniciar o arrastamento. Por padrão, ele altera a opacidade do elemento para 0,2 em 0,2 segundos.

Exemplo

efeito reverso Um efeito chamado no elemento quando o arrasto é revertido. O padrão é um deslizamento suave para a posição original do elemento. Chamado somente se a reversão for verdadeira.

Exemplo

efeito final Um efeito chamado no elemento ao arrastar termina. Por padrão, ele altera a opacidade do elemento para 1,0 em 0,2 segundos.

Exemplo

Opções de retorno de chamada

Além disso, você pode usar qualquer uma das seguintes funções de retorno de chamada no parâmetro de opções -

Função Descrição Exemplos
onStart Chamado quando um arrasto é iniciado.

Exemplo

onDrag Chamado repetidamente quando um mouse se move, se a posição do mouse mudar em relação à chamada anterior.

Exemplo

mudança Chamado apenas como onDrag (que é o retorno de chamada preferido).

Exemplo

No fim Chamado quando um arrasto é encerrado.

Exemplo

Exceto para o retorno de chamada "alterar", cada um desses retornos de chamada aceita dois parâmetros: o objeto arrastável e o objeto de evento do mouse.

Exemplo arrastável

Aqui, definimos 5 elementos que podem ser arrastados: três elementos <div>, um elemento <img> e um elemento <span>. O objetivo dos três elementos <div> diferentes é demonstrar que, independentemente de um elemento começar com uma regra de posicionamento estático (o padrão), relativo ou absoluto, o comportamento de arrastar não é afetado.

<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>

Isso produzirá o seguinte resultado -

Soltando Coisas Arrastadas

Um elemento é convertido em um destino de soltar por meio de uma chamada ao método add () em um namespace chamado Droppables .

O namespace Droppables tem dois métodos importantes: add () para criar um alvo de soltar e remove () para remover um alvo de soltar.

Sintaxe

Aqui está a sintaxe do método add () para criar um destino de soltar. O método add () cria um destino de eliminação do elemento passado como seu primeiro parâmetro, usando as opções no hash passado como o segundo.

Droppables.add( element, options );

A sintaxe para remove () é ainda mais simples. O método remove () remove o comportamento de destino de soltar do elemento passado.

Droppables.remove(element);

Opções

Você pode usar uma ou mais das seguintes opções ao criar seu objeto arrastável.

Opção Descrição Exemplos
Hoverclass O nome de uma classe CSS que será adicionada ao elemento enquanto o droppable estiver ativo (tem um arrastável aceitável pairando sobre ele). O padrão é nulo.

Exemplo

Aceitar Uma string ou uma matriz de strings que descreve as classes CSS. O droppable só aceitará arrastáveis ​​que tenham uma ou mais dessas classes CSS.

Exemplo

Contenção Especifica um elemento, ou matriz de elementos, que deve ser pai de um item arrastável para ser aceito pelo destino de soltar. Por padrão, nenhuma restrição de contenção é aplicada.

Exemplo

Sobreposição Se definido como 'horizontal' ou 'vertical', o droppable só reagirá a um Draggable se estiver sobreposto em mais de 50% na direção dada. Usado por classificáveis, discutido no próximo capítulo.  
ávido Se verdadeiro (padrão), ele para de pairar sobre outros droppables, sob o draggable não será pesquisado.

Exemplo

Opções de retorno de chamada

Além disso, você pode usar qualquer uma das seguintes funções de retorno de chamada no parâmetro de opções -

Função Descrição Exemplos
onHover Especifica uma função de retorno de chamada que é ativada quando um item arrastável adequado passa sobre o destino de soltar. Usado por classificáveis, discutido no próximo capítulo.  
onDrop Especifica uma função de retorno de chamada que é chamada quando um elemento arrastável adequado é solto no destino de soltar.

Exemplo

Exemplo

Aqui, a primeira parte deste exemplo é semelhante ao nosso exemplo anterior, exceto que usamos a função $ A () útil do Prototype para converter uma lista de nós de todos os elementos <img> no elemento com o id de draggables para um array .

<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>

Isso produzirá o seguinte resultado -