Метод handleDragStart
не вызывается, когда мы используем браузер Firefox, но он работает в Chrome. Может кто-нибудь помочь мне? У вас есть идея, почему она не работает в Firebox?
addDnDHandlers: function () {
this.dragSrcEl = null;
var assignedListItems = this.$(".assignedListContainer .assignedListItem");
[].forEach.call(assignedListItems, this.addItemDnDHandlers.bind(this));
},
addItemDnDHandlers: function (elem) {
elem.addEventListener('dragstart', this.handleDragStart.bind(this), false);
elem.addEventListener('dragover', this.handleDragOver.bind(this), false);
elem.addEventListener('drop', this.handleDrop.bind(this), false);
elem.addEventListener('dragend', this.handleDrag.bind(this), false);
},
handleDragStart: function (e) {
var currentElement = e.currentTarget;
this.dragSrcEl = currentElement;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/html', currentElement.outerHTML);
currentElement.classList.add('dragElem');
},
handleDragOver: function (e) {
if (e.preventDefault) {
e.preventDefault(); // Necessary. Allows us to drop.
}
e.dataTransfer.dropEffect = 'move'; // See the section on the DataTransfer object.
return false;
},
handleDrag: function (e) {
e.currentTarget.classList.remove('dragElem');
},
handleDrop: function (e) {
var currentElement = e.currentTarget;
if (e.stopPropagation) {
e.stopPropagation(); // Stops some browsers from redirecting.
}
if (this.dragSrcEl != currentElement) {
if ($(this.dragSrcEl).index() < $(currentElement).index()) {
insertIndex = "afterend";
} else {
insertIndex = "beforebegin";
}
currentElement.parentNode.removeChild(this.dragSrcEl);
var dropHTML = e.dataTransfer.getData('text/html');
currentElement.insertAdjacentHTML(insertIndex, dropHTML);
var dropElem;
if (insertIndex === "afterend") {
dropElem = currentElement.nextElementSibling;
} else {
dropElem = currentElement.previousSibling;
}
this.addItemDnDHandlers(dropElem);
this.trigger("dropEvent");
}
return false;
}