之前,想在浏览器中实现拖放似乎很困难,现在有了HTML5就简单了。下面实现一个例子:简单的拖拽排序。
拖放测试页面(DragDrop.html)
页面使用bootstrap
展示几张图片(缩略图)
注:省略号部分表示你可以自己在div.row下复制更多个div.thumbnail
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Drag & Drop sample</title> <link rel="stylesheet" href="http://cdn.staticfile.org/twitter-bootstrap/3.1.1/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="thumbnail col-sm-6 col-md-4"> <img class="img-responsive" src="img1.png"> <div class="caption text-center"><h5>Image1</h5></div> </div> <div class="thumbnail col-sm-6 col-md-4"> <img class="img-responsive" src="img2.png"> <div class="caption text-center"><h5>Image2</h5></div> </div> </div> </div> <script src="http://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <script src="DragDrop.js"></script> </body> </html>
|
拖放测试脚本(DragDrop.js)
注:脚本依赖的jquery已经在页面里引入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| $(function(){ var dragable = '.thumbnail'; var $dragable = $(dragable); $dragable.attr('draggable', true); $dragable.on('dragstart', setDragData); var $dropable = $dragable; $dropable.on('dragover', allowDrop); $dropable.on('drop', dropDragData);
function setDragData(e){ var $target = getDragable(e.target); e.originalEvent.dataTransfer.setData("text",$target.index()); } function allowDrop(e){ e.preventDefault(); } function dropDragData(e){ e.preventDefault(); var $target = getDragable(e.target); var dragIdx = e.originalEvent.dataTransfer.getData("text"); if (dragIdx !== $target.index()){ var $draged = $(dragable).eq(dragIdx); if ($draged.index() > $target.index()){ $target.before($draged); }else{ $target.after($draged); } } } function getDragable(dom){ var $dragable = $(dom); if (!$dragable.is(dragable)){ $dragable = $dragable.closest(dragable); } return $dragable; } });
|
总结
上例的拖放效果在最新的Chrome
、IE
、QQ浏览器
下测试了都很正常,但在FireFox
下拖放图片会激活一个新的页签(有人说使用e.preventDefault()
可以解决,但我试了没有效果)。