Добрый день!
У меня есть список, элементы списка можно менять местами перетаскивая их мышкой. В хроме работает шикарно, и в мозиле, если тащить не за текст, а за пустое место элемента списка. Если тащить за текст, то браузер пытается перетащить сам текст (чтобы скопировать) и начинает глючить.
У есть идея закрывать текст дивом, но решение не красивое.
(user select none поставил)
Главная часть кода:
//Конструктор
var Line = function ($dom) {
this.$ = $dom;
this.$.data('line', this);
this.body = null;
this.index = null
this.init();
};
//Инициализация обработчиков
Line.prototype.init = function () {
this.$.mousedown(this.handlers.onMouseDown);
this.body = bodyArray[index];
this.index = index;
index++;
(this.$.hasClass('selected')) ? this.body.addClass('selected') : false;
};
//Назначение обработчиков
Line.prototype.handlers = {
onMouseDown: function (e) {
var line = $(this).data('line');
line.onMouseDown();
},
onMouseUp: function () {
Line.getActive().onMouseUp();
},
mouseMove: function (e) {
var line = Line.getActive();
line.onMuve(line.getY(e));
}
};
//Обработчики:
Line.prototype.onMouseDown = function () {
Line.setActive(this);
Line.setSelected(this);
$(document).bind('mousemove', this.handlers.mouseMove);
$(document).bind('mouseup', this.handlers.onMouseUp);
Line.parent.toggleClass('noneUserSelect');
this.select();
};
Line.prototype.onMuve = function (y) {
if (!this.isLast()) {
if (y > this.getNext().getCenter()) {
this.insertAfter(this.getNext());
}
}
if (!this.isFirst()) {
if (y < this.getPrev().getCenter()) {
this.insertBefore(this.getPrev());
}
}
clearSelection();
};
Line.prototype.onMouseUp = function () {
$(document).unbind('mousemove', this.handlers.mouseMove);
$(document).unbind('mouseup', this.handlers.onMouseUp);
Line.setActive(null);
Line.parent.toggleClass('noneUserSelect');
this.showBody();
if (this.isFirst()) {
this.$.removeClass('li_second');
}
clearSelection();
};