jQWidgets jqxSortable是一个基于jQuery和jQWidgets库的排序插件。他能够允许你更新和移动一组HTML元素,支持嵌套、拖动滚动条等多种特性。其中,connectWith属性是jqxSortable比较有趣的一个属性,它能实现两个sortable控件之间的连接和交互。
具体来说,connectWith属性定义了一个jqxSortable要连接的另一个jqxSortable的选择器,它允许两个sortable控件在拖动元素时,元素能够进行交换,被连接的sortable控件会被设置为droppable,并且接受位于源sortable控件中的任意拖动元素。
下面我们通过两个示例来进一步了解connectWith属性的使用。
示例1:基本使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>connectWith示例1</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://jqwidgets.com/public/jqwidgets/jqx-all.js"></script>
<link rel="stylesheet" href="https://jqwidgets.com/public/jqwidgets/styles/jqx.base.css">
<link rel="stylesheet" href="https://jqwidgets.com/public/jqwidgets/styles/jqx.fresh.css">
</head>
<body>
<h3>可互相连接的jqxSortable控件</h3>
<div id="sortable-list-1" class="sortable-container">
<div class="item">item 1</div>
<div class="item">item 2</div>
</div>
<div id="sortable-list-2" class="sortable-container">
<div class="item">item 3</div>
<div class="item">item 4</div>
</div>
<script>
$(document).ready(function () {
$('.sortable-container').jqxSortable({
connectWith: '.sortable-container'
});
});
</script>
</body>
</html>
在这个例子中,我们定义了两个id分别为sortable-list-1和sortable-list-2的div,他们都有类名为sortable-container。我们希望这两个div能够进行拖拽排序,且能够互相连接(即将拖动元素从一个div放到另一个div中)。 我们在JS代码中调用了jqxSortable()方法来启用插件,并且传入了connectWith:’.sortable-container’来表示要连接的sortable控件的选择器。这样就实现了一个简单的connectWith效果。
示例2:拖动克隆元素
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>connectWith示例2</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://jqwidgets.com/public/jqwidgets/jqx-all.js"></script>
<link rel="stylesheet" href="https://jqwidgets.com/public/jqwidgets/styles/jqx.base.css">
<link rel="stylesheet" href="https://jqwidgets.com/public/jqwidgets/styles/jqx.fresh.css">
<style>
.sortable-container {
border: 1px solid #ccc;
float: left;
margin-right: 10px;
padding: 10px;
}
.sortable-container .item {
border: 1px solid #ddd;
border-radius: 5px;
cursor: pointer;
padding: 5px;
margin-bottom: 5px;
}
</style>
</head>
<body>
<h3>可互相连接的jqxSortable控件</h3>
<div id="sortable-list-1" class="sortable-container">
<div class="item">item 1</div>
<div class="item">item 2</div>
</div>
<div id="sortable-list-2" class="sortable-container">
<div class="item">item 3</div>
<div class="item">item 4</div>
</div>
<script>
$(document).ready(function () {
$('.item').on('mousedown', function () {
$(this).clone().appendTo('body').addClass('clone').show();
});
$('.sortable-container').jqxSortable({
connectWith: '.sortable-container',
filter: '.item',
helper: function () {
return $('<div>').addClass('dragged').append($('.clone').clone());
},
start: function (event) {
$('.dragged').css({left: event.clientX, top: event.clientY});
},
stop: function () {
$('.clone').remove();
$('.dragged').remove();
}
});
});
</script>
</body>
</html>
在这个例子中,我们仍然定义了两个sortable控件sortable-list-1和sortable-list-2,它们互相之间能够连接。我们添加了一些样式,让它们看起来更像一个可排序的列表控件。在JS代码中,我们通过复制一个被拖动的元素的副本到body中来实现拖动时的复制效果。我们为jqxSortable()方法传递了以下四个选项参数:
– filter:筛选可拖动的元素,这里限定了只有class名为item的元素才可以被拖动。
– helper:生成一个可以被拖动的元素副本作为helper。
– start:通过start事件额外设置helper的位置。
– stop:停止拖动时移除所有helper元素。
这个例子中我们实现了一个可复制元素的sortable控件,可根据需求进行修改。
总结来说,connectWith属性能够帮助我们实现多个sortable控件之间的连接和交换。我们需要通过传递一个选择器来指定另一个可连接的sortable控件,然后它们就能够实现元素的拖动和交换了。