19
Mar/10
8

Ordenar elementos con jQuery

Vamos con otro tema que tenía en cartera hace ya tiempo – debería escribir las cosas cuando las aprendo, y no meses después, que me cuesta el doble – tuve que hacer algunas pruebas con jQuery que quiero compartir. Necesitaba conseguir un prototipo de interfaz de widgets, estilo iGoogle o netvibes.

ver
descargar

Para conseguir este efecto, utilizaremos la función sortable de jQuery UI. Bien, organizamos el html con tres contenedores que harán de columnas y que ha su vez contendran listas para organizar los widgets, mejor ver el código:

 
<div id="wrapper">
        <div id="uno" class="colum">
            <ul>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    Contenido del widget
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <div>
                    </div>
                </li>
            </ul>
        </div>
        <div id='dos' class="colum">
            <ul>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <img src="http://a1.twimg.com/profile_images/186917016/img2.jpg" alt="yngir" />
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <div>
                    </div>
                </li>
            </ul>
        </div>
        <div id='tres' class="colum">
            <ul>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                </li>
                <li>
                    <div class='header'>
                        Drag me
                    </div>
                    <div>
                    </div>
                </li>
            </ul>
        </div>
</div>

Configuramos los estilos:

<style type="text/css">
        div#wrapper
        {
            width: 1024px;
            margin: 0 auto;
        }
        div.colum
        {
            width: 33%;
            float: left;
        }
        ul
        {
            padding: 5px;
            padding-left: 10px;
            margin: 0 auto;
        }
        li
        {
            list-style-type: none;
            height: 150px;
            border: solid 1px Black;
            margin-top: 10px;
            text-align: center;
        }
        .sortHelper
        {
            border: 3px dashed #000;
        }
        div#uno li
        {
            background-color: ActiveBorder;
        }
        div#dos li
        {
            background-color: Highlight;
        }
        div#tres li
        {
            background-color: Yellow;
        }
        div.header
        {
            background-color: White;
            border-bottom: solid 1px Black;
            height: 25px;
            cursor: move;
        }
    </style>

Hasta aquí, deberíamos ver la página cómo la de demo pero sin el movimiento de drag&drop.
Ahora cargamos las librerías necesarias de javascript, que para este caso serán, la jquery.min.js, ui.core.js y ui.sortable.js:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
 
<script src="/scripts/ui.core.js" type="text/javascript"></script>
 
<script src="/scripts/ui.sortable.js" type="text/javascript"></script>

Y por último y más importante, incluimos la función jQuery al final de nuestro html, para que se ejecute una vez ha finalizado la carga de nuestra estructura dom de la página:

<script type="text/javascript">
        $(document).ready(function() {
 
            $("ul").sortable({
                connectWith: "ul",
                items: "li",
                hoverClass: "sortHelper",
                cursor: 'move',
                opacity: 0.8,
                revert: true,
                tolerance: 'pointer',
                placeholder: 'sortHelper',
                handle: $(".header")
            });
        });
    </script>

Los parámetros más importantes són el handle que indica desde que elementos se podrá iniciar la acción de ordenación, el items, que indica que elementos serán ordenados y el connectWith, que es el que indica que otros elementos podrán recibir a los items.

Better Tag Cloud