Показать сообщение отдельно
  #1 (permalink)  
Старый 30.01.2013, 17:25
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Перемещение объектов, ff
Добрый день!

У меня есть список, элементы списка можно менять местами перетаскивая их мышкой. В хроме работает шикарно, и в мозиле, если тащить не за текст, а за пустое место элемента списка. Если тащить за текст, то браузер пытается перетащить сам текст (чтобы скопировать) и начинает глючить.

У есть идея закрывать текст дивом, но решение не красивое.

(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();
    };

Последний раз редактировалось tsigel, 30.01.2013 в 17:29.
Ответить с цитированием