добавил следующее в мой контроллер:
var x =-1;
var y=-1;
$('#external-events').on('dragstop', function(evt)
{
isDragging = false;
x = evt.originalEvent.pageX;
y = evt.originalEvent.pageY;
if(!isDragging && x !=-1 && y!=-1 && !isEventOverDiv(x, y) && !isEventOverDivCal(x, y) )
{
// reset
var reccupuredIndexForTitle=$('.fc-event').attr('id');
$scope.ctrlendDragging(reccupuredIndexForTitle);
}
});
Как вы можете видеть из кода, я использовал jquery on ('dragstop') , потому что я не знаю, почему onСобытие ondragend не вызывается
, поэтому я удалил его из вида HTML ondragend = "angular.element (this) .scope (). ctrlendDragging (id)"
и вызвал manualy из моего контроллера $ scope.ctrlendDragging (id) , чтобы сбросить текущее перетаскиваемое событие, когда оно остановлено с помощью $ ('# external-events'). on ('dragstop', function (evt) и обработанослучай, когда текущее внешнее событие перестало перетаскиваться, и оно локализовано не над внешними событиями. Поле или над Календарем через
if(!isDragging && x !=-1 && y!=-1 && !isEventOverDiv(x, y) && !isEventOverDivCal(x, y) )
Рабочий кодPen
update2:
Потому что первое решение является базовым и работает в опасных условиях. Оно работает только для первого перетаскиваемого кода li, оно не является ни точным, ни точным. Я сделал следующее обновление:
var domRect;
var isDragging = false;
var x =-1;
var y=-1;
$scope.positionX =-1;
$scope.positionY=-1;
var myId=-1;
$(document).ready(function() {
$scope.ctrlstartDragging = function(id) {
myId = id;
};
$scope.ctrlendDragging = function(id) {
book.style.zIndex = "9999";
};
$('#external-events').on('dragstop', function(evt)
{
$scope.$watchGroup(['positionX','positionY'],function () {
x = $scope.positionX;
y = $scope.positionY;
});
if(!isDragging && x !=-1 && y!=-1 && !isEventOverDiv(x, y) && !isEventOverDivCal(x, y) ) {
// reset
var reccupuredIndexForTitle=myId;
$scope.ctrlendDragging(reccupuredIndexForTitle);
}
});
});//end of $(document).ready(function()
Заключено в $ (document) .ready (function () { все функции, которыеПодлежит применению в готовом документе:
1- $ scope.ctrlstartDragging , из которого мы получаем myId, равный (текущий li) идентификатор, переданный через представление html ondragstart = "angular.element (this) .scope (). ctrlstartDragging (id) "
2- $ scope.ctrlendDragging nb: я устанавливаю z-индекс с помощью book.style.zIndex= "9999"; , чтобы мы могли работать в модальном контексте
3- $ ('# external-events'). On ('dragstop', функция (evt) это должно работать в $ (document) .ready (function () { или $ window.load , где добавлена группа наблюдения за изменениями, внесенными в positionX positionY li
$scope.$watchGroup(['positionX','positionY'],function () {
x = $scope.positionX;
y = $scope.positionY;
});
также добавлено
if(!isDragging && x !=-1 && y!=-1 && !isEventOverDiv(x, y) && !isEventOverDivCal(x, y) ) {
// reset
var reccupuredIndexForTitle=myId;
$scope.ctrlendDragging(reccupuredIndexForTitle);
}
, которые на этот раз работают с myId, полученным от $ scope.ctrlstartDragging
С другой стороны, Я добавил при инициализации внешних событий
$ ('# external-events .fc-event'). Each (function () {
drag: function() {, чтобы получить точное положениеX позицияYдля текущего перетаскиваемого элемента li
$(this).draggable({
zIndex: 999,
revert: true, // will cause the event to go back to its
revertDuration: 0, // original position after the drag
drag: function(){
var offset = $(this).offset();
var xPos = offset.left;
var yPos = offset.top;
$scope.$apply(function() {
$scope.positionX =xPos;
$scope.positionY = yPos;
});
}
});
Рабочий codePen для li
Надеюсь, это может кому-нибудь помочь;).