{"id":3736,"date":"2017-10-25T21:06:49","date_gmt":"2017-10-25T21:06:49","guid":{"rendered":"http:\/\/disenodepagina.com\/disenoweb\/?p=3736"},"modified":"2017-10-25T21:06:49","modified_gmt":"2017-10-25T21:06:49","slug":"drag-y-drop","status":"publish","type":"post","link":"https:\/\/disenodepagina.com\/disenoweb\/drag-y-drop\/","title":{"rendered":"Drag y Drop"},"content":{"rendered":"<h1>Drag y Drop<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-12\" src=\"http:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/03\/about-web-design-studio-cardiff-300x97.jpg\" alt=\"Drag y Drop\" width=\"300\" height=\"97\" srcset=\"https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/03\/about-web-design-studio-cardiff-300x97.jpg 300w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/03\/about-web-design-studio-cardiff-768x249.jpg 768w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/03\/about-web-design-studio-cardiff-1024x332.jpg 1024w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/03\/about-web-design-studio-cardiff.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>DRAG AND DROP<\/p>\n<p><a href=\"http:\/\/marketingweb.com.mx\" target=\"_blank\" rel=\"noopener\">Durante a\u00f1os, hemos utilizado bibliotecas como<\/a>\u00a0jQuery y Dojo para conseguir funcionalidades complejas en las interfaces de usuario como las animaciones, las esquinas redondeadas y la funci\u00f3n de arrastrar y soltar. Esta \u00faltima funcionalidad (Drag and Drop, DnD) tiene una gran importancia en HTML5, y de hecho se ha integrado en el API. En la especificaci\u00f3n, este API se define como un mecanismo basado en eventos, donde identificamos los elementos que deseamos arrastrar con el atributo draggable y desde JavaScript escuchamos los eventos que se producen, para proporcionar la funcionalidad deseada\u00a0<em><strong>Drag y Drop<\/strong><\/em>.<\/p>\n<p>Por defecto, todos los enlaces, im\u00e1genes y nodos de texto (o selecciones de texto) de un documento HTML son arrastables, pero no hay ning\u00fan evento asociado a estas acciones, por lo que poco m\u00e1s podemos hacer, a excepci\u00f3n de la funcionalidad que nos ofrezca el navegador o el propio sistema operativo (guardar las im\u00e1genes en el escritorio, crear ficheros de texto, etc)\u00a0<em><strong>Drag y Drop<\/strong><\/em>.<\/p>\n<p>DETECCI\u00d3N DE LA FUNCIONALIDAD<\/p>\n<p>Aunque la compatibilidad actual de los navegadores con esta API es bastante amplia, hay que tener en cuenta que los dispositivos m\u00f3viles no soportan esta funcionalidad. Si nuestro sitio web est\u00e1 siendo accedido desde un dispositivo m\u00f3vil, y tenemos implementada esta funcionalidad (por ejemplo en una cesta de la compra), debemos proveer otra soluci\u00f3n para que nuestro sitio web se comporte de manera correcta, y no perjudicar la experiencia del usuario.<\/p>\n<p>La manera mas sencilla de comprobar la disponibilidad de este API, es utilizar la biblioteca Modernizr, la cual nos indica si el navegador soporta esta funcionalidad:<\/p>\n<p>if (Modernizr.draganddrop)<\/p>\n<p>{\u00a0\u00a0\u00a0 \/\/ Browser supports HTML5 DnD.<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>{\u00a0\u00a0\u00a0 \/\/ Fallback to a library solution or disable DnD.<\/p>\n<p>}<\/p>\n<p>CREACI\u00d3N DE CONTENIDO ARRASTRABLE<\/p>\n<p>Hacer que un elemento se pueda arrastrar es muy sencillo. Solo hay que establecer el atributo draggable=\u00bbtrue\u00bb en el elemento que se quiere mover. La funci\u00f3n de arrastre se puede habilitar pr\u00e1cticamente en cualquier elemento, incluidos archivos, im\u00e1genes,<\/p>\n<p>enlaces, listas u otros nodos DOM.<\/p>\n<p>&lt;div id=\u00bbcolumns\u00bb&gt;<\/p>\n<p>&lt;div class=\u00bbcolumn\u00bb draggable=\u00bbtrue\u00bb&gt;<\/p>\n<p>&lt;header&gt;A&lt;\/header&gt;<\/p>\n<p>&lt;\/div&gt;<\/p>\n<p>&lt;div class=\u00bbcolumn\u00bb draggable=\u00bbtrue\u00bb&gt;<\/p>\n<p>&lt;header&gt;B&lt;\/header&gt;<\/p>\n<p>&lt;\/div&gt;<\/p>\n<p>&lt;div class=\u00bbcolumn\u00bb draggable=\u00bbtrue\u00bb&gt;<\/p>\n<p>&lt;header&gt;C&lt;\/header&gt;<\/p>\n<p>&lt;\/div&gt;<\/p>\n<p>&lt;\/div&gt;<\/p>\n<p>Una ayuda visual al usuario, para indicar que un elemento es arrastable, es transformar el aspecto tanto del elemento como del cursor. Con CSS esto es muy sencillo:<\/p>\n[draggable] {\u00a0\u00a0\u00a0 user-select: none; }<\/p>\n<p>.column:hover {\u00a0\u00a0\u00a0 border: 2px dotted #666666;\u00a0\u00a0\u00a0 background-color: #ccc;\u00a0\u00a0\u00a0 border-radius: 10px;\u00a0\u00a0\u00a0 box-shadow: inset 0 0 3px #000;\u00a0\u00a0\u00a0 cursor: move;<em><strong>Drag y Drop<\/strong><\/em><\/p>\n<p>}<\/p>\n<p>La especificaci\u00f3n define hasta siete eventos que son lanzados tanto por los elementos de origen (los que son arrastrados) com para los elementos de destino (donde soltamos el elemento arrastrado)\u00a0<em><strong>Drag y Drop<\/strong><\/em>.<\/p>\n<p><span style=\"text-decoration: underline;\"><em><strong>Drag y Drop<\/strong><\/em><\/span><\/p>\n<p><a href=\"https:\/\/www.facebook.com\/disenopaginaweb\" target=\"_blank\" rel=\"noopener\">#dropyDrag<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Drag y Drop &nbsp; DRAG AND DROP Durante a\u00f1os, hemos utilizado bibliotecas como\u00a0jQuery y Dojo para conseguir funcionalidades complejas en las interfaces de usuario como las animaciones, las esquinas redondeadas y la funci\u00f3n de arrastrar y soltar. Esta \u00faltima funcionalidad (Drag and Drop, DnD) tiene una gran importancia en HTML5, y de hecho se ha [&#8230;]\n","protected":false},"author":2,"featured_media":5,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[478,477,8],"tags":[82,12,24,13,553,530],"class_list":["post-3736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo-web","category-diseno-de-pagina","category-diseno-web","tag-diseno","tag-diseno-web","tag-diseno-web-df","tag-diseno-web-guadalajara","tag-drag-y-drop","tag-sitio-web"],"_links":{"self":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/3736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/comments?post=3736"}],"version-history":[{"count":1,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/3736\/revisions"}],"predecessor-version":[{"id":3737,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/3736\/revisions\/3737"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/media\/5"}],"wp:attachment":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/media?parent=3736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/categories?post=3736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/tags?post=3736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}