多元素拖放
Multi element drag and drop
我正在为我的客户开发拖放功能。我已经为拖放实现了 dragular,但是在 dragular 或任何其他为拖放提供的库中没有提供多元素拖放。
请建议我如何 select 和 drag/drop 多元素 angular 或任何其他 javascript 库也应与触摸设备兼容。
提前致谢。
注意:我们可以在 dragular. 中使用多次拖放吗?
更新 (30/11/2016):补充一点我的要求。我们如何限制放置区中元素的冗余。
解释:
当我们从源复制任何项目时,如果它已经是 dropped/in 目标容器,我们将无法拖动它。
准确地说,如果项目已经在目标容器中,我们能否使项目不可拖动。
这是您问题的答案。
jQuery Sortable - Select and Drag Multiple List Items
我认为使用 jQuery 进行拖放是个好主意。我正在使用这个并且工作了。
在这里你有例子
jsfiddle.net/hQnWG/614/
你的意思是多个单独的拖放?就像用一根手指拖动一个元素,用另一根手指拖动第二个元素?
dragula 和 dragular 都不支持,但我正在开发新的库,但它现在仍在进行中:/
我不知道有任何其他库支持它。
编辑 (27.11.16):
我已经更新了你的笔http://codepen.io/luckylooke/pen/zodmEO
angular.module("testDnD", ["dragularModule"]).
controller("test", ['$scope', 'dragularService', function($scope, dragularService) {
$scope.selected = [];
$scope.filter = [];
$scope.testObj = [{...}];
$scope.modelClickData = function(test) {
console.log(test);
$scope.popdata = test;
};
$scope.modelSelect = function(test) {
test.selected = !test.selected;
if (test.selected)
$scope.selected.push(test);
else
$scope.selected.splice($scope.selected.indexOf(test), 1);
// console.log('selected', test);
};
var containerLeft = document.querySelector('#thumbnailTST');
var containerRight = document.querySelector('#filler');
dragularService.cleanEnviroment();
dragularService([containerLeft, containerRight], {
copy: true,
containersModel: [$scope.testObj, $scope.filter],
scope: $scope
});
$scope.$on('dragularcloned', function() {
var mirror = $('.gu-mirror');
if ($scope.selected.length > 1 && mirror.length) { // is multiple drag
mirror.addClass('multipledrag');
}
});
$scope.$on('dragulardrop', function(e, el, targetcontainer, sourcecontainer, conmodel, elindex, targetmodel, dropindex) {
if ($scope.selected.length > 1) { // is multiple drag
$scope.selected.forEach(function(item) {
if (item != $scope.testObj[elindex]) {
var clone = {};
clone = $.extend(true, clone, item);
delete clone.$$hashKey;
$scope.filter.splice(++dropindex, 0, clone);
}
});
}
console.log($scope.filter);
});
}])
我正在为我的客户开发拖放功能。我已经为拖放实现了 dragular,但是在 dragular 或任何其他为拖放提供的库中没有提供多元素拖放。
请建议我如何 select 和 drag/drop 多元素 angular 或任何其他 javascript 库也应与触摸设备兼容。
提前致谢。
注意:我们可以在 dragular. 中使用多次拖放吗?
更新 (30/11/2016):补充一点我的要求。我们如何限制放置区中元素的冗余。
解释:
当我们从源复制任何项目时,如果它已经是 dropped/in 目标容器,我们将无法拖动它。
准确地说,如果项目已经在目标容器中,我们能否使项目不可拖动。
这是您问题的答案。 jQuery Sortable - Select and Drag Multiple List Items
我认为使用 jQuery 进行拖放是个好主意。我正在使用这个并且工作了。 在这里你有例子
jsfiddle.net/hQnWG/614/
你的意思是多个单独的拖放?就像用一根手指拖动一个元素,用另一根手指拖动第二个元素?
dragula 和 dragular 都不支持,但我正在开发新的库,但它现在仍在进行中:/
我不知道有任何其他库支持它。
编辑 (27.11.16):
我已经更新了你的笔http://codepen.io/luckylooke/pen/zodmEO
angular.module("testDnD", ["dragularModule"]).
controller("test", ['$scope', 'dragularService', function($scope, dragularService) {
$scope.selected = [];
$scope.filter = [];
$scope.testObj = [{...}];
$scope.modelClickData = function(test) {
console.log(test);
$scope.popdata = test;
};
$scope.modelSelect = function(test) {
test.selected = !test.selected;
if (test.selected)
$scope.selected.push(test);
else
$scope.selected.splice($scope.selected.indexOf(test), 1);
// console.log('selected', test);
};
var containerLeft = document.querySelector('#thumbnailTST');
var containerRight = document.querySelector('#filler');
dragularService.cleanEnviroment();
dragularService([containerLeft, containerRight], {
copy: true,
containersModel: [$scope.testObj, $scope.filter],
scope: $scope
});
$scope.$on('dragularcloned', function() {
var mirror = $('.gu-mirror');
if ($scope.selected.length > 1 && mirror.length) { // is multiple drag
mirror.addClass('multipledrag');
}
});
$scope.$on('dragulardrop', function(e, el, targetcontainer, sourcecontainer, conmodel, elindex, targetmodel, dropindex) {
if ($scope.selected.length > 1) { // is multiple drag
$scope.selected.forEach(function(item) {
if (item != $scope.testObj[elindex]) {
var clone = {};
clone = $.extend(true, clone, item);
delete clone.$$hashKey;
$scope.filter.splice(++dropindex, 0, clone);
}
});
}
console.log($scope.filter);
});
}])