拖动排序示例
Source
Output
QRCode
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>拖动排序</title>
<link rel="stylesheet" href="//g.alicdn.com/kissy/k/5.0.1/css/base.css">
<link rel="stylesheet" type="text/css" href="assets/box.css">
<style type="text/css">
.container {
border: 1px solid #366EBE;
height: 200px;
padding: 10px;
position: relative;
overflow: auto;
}
.component {
margin: 10px 10px;
width: 100px;
height: 100px;
display: inline-block;
*display: inline;
*zoom: 1;
overflow: hidden;
}
.cheader {
cursor: move;
border: 1px solid black;
height: 20px;
line-height: 20px;
}
.component .cheader {
cursor: move;
}
.ks-dd-dragging {
border: 2px #4886DE dashed;
}
.ks-dd-dragging * { /*设置正被拖动的元素隐藏*/
visibility: hidden;
}
</style>
<script src="//g.alicdn.com/kissy/k/5.0.1/seed-debug.js"></script>
</head>
<body>
<h3>拖动排序示例</h3>
<button id="add">增加拖动块</button>
<br/><br/>
<script type="x-template" id="newTpl">
<div class="box component">
<s class="box-tp"><b></b></s>
<div class="box-hd cheader">
<h3>拖动头</h3>
</div>
<div class="box-bd">drag proxy {id}
</div>
<s class="box-bt"><b></b></s>
</div>
</script>
<div id="container2" class="container">
<div class="box component">
<s class="box-tp"><b></b></s>
<div class="box-hd cheader">
<h3>拖动头</h3>
</div>
<div class="box-bd">
drag proxy 1
</div>
<s class="box-bt"><b></b></s>
</div>
<div class="box component">
<s class="box-tp"><b></b></s>
<div class="box-hd cheader">
<h3>拖动头</h3>
</div>
<div class="box-bd">
drag proxy 2
</div>
<s class="box-bt"><b></b></s>
</div>
<div class="box component">
<s class="box-tp"><b></b></s>
<div class="box-hd cheader">
<h3>拖动头</h3>
</div>
<div class="box-bd">
drag proxy 3
</div>
<s class="box-bt"><b></b></s>
</div>
</div>
<script type="text/javascript">
require(['util', 'node', 'dd', 'dd/plugin/proxy'], function (Util, Node, DD, Proxy) {
var DDM = DD.DDM,
DraggableDelegate = DD.DraggableDelegate,
DroppableDelegate = DD.DroppableDelegate,
Draggable = DD.Draggable,
Droppable = DD.Droppable;
/**
* 拖放排序
*/
var dragDelegate = new DraggableDelegate({
container: "#container2",
handlers: ['.cheader'],
selector: '.component',
move: true,
plugins: [
new Proxy({
/**
* 如何产生替代节点
* @param drag 当前拖动对象
*/
node: function (drag) {
var n = Node.one(drag.get("dragNode")[0].cloneNode());
n.removeAttr('id');
n.css({
border : '2px #4886DE dashed',
opacity : '0.8'
});
return n; //返回的元素就是跟着鼠标移动的元素
},
// 主体位置不跟随 proxy
moveOnEnd: false,
// 每次 proxy 都重新生成
destroyOnEnd: true
})
]
});
var dropDelegate = new DroppableDelegate({
container: "#container2",
selector: '.component'
});
//dragover事件:当前 Draggable 对象在一个 Droppable 实例上移动时触发, 可简单理解成 mouseover.
dragDelegate.on("dragover", function (ev) {
var drag = ev.drag;
var drop = ev.drop;
var dragNode = drag.get("dragNode"),
dropNode = drop.get("node");
var middleDropX = dropNode.offset().left + dropNode.width()/2;
if (ev.pageX > middleDropX) {
var next = dropNode.next();
if (next && next[0] == dragNode[0]) {
} else {
dragNode.insertAfter(dropNode);
}
} else {
var prev = dropNode.prev();
if (prev && prev[0] == dragNode[0]) {
} else {
dragNode.insertBefore(dropNode);
}
}
});
var container = Node.one("#container2");
var id = 4;
container.unselectable();
var newTpl= Node.one('#newTpl').html();
Node.one("#add").on("click", function () {
new Node(Util.substitute(newTpl,{
id:(id++)
})).appendTo(container).unselectable();
});
});
</script>
</body>
</html>