Javascript.RU

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

Многократный вызов функции
Здравствуйте!
У меня страница с книжной полкой, на которой 5 книг. Книги можно таскать по полке и менять местами, все почти готово. Книги таскаются и меняются местами.

Событие перетаскивания книги привязано на зажатие кнопки мыши, на "отжатие" - соответственно остановка книги. На данный момент книга останавливается только в том случае, если в момент "отжатия" курсор находится над книгой. Хотелось бы сделать так, чтобы"отжатие" срабатывало в любом месте документа.

Весь код можно посмотреть тут.

//Конструктор объекта "книга"
var Book = function ($dom, $shelf) {
    this.$ = $dom;
    this.width = this.$.width();
    this.x = parseInt(this.$.css('left'));
    this.$shelf = $shelf;
    this.$.data('book', this);
    this.init();
}

//Инициализация обработчиков книги
Book.prototype.init = function () {
    this.$.mousedown(this.handlers.mousedown);
    this.$.mouseup(this.handlers.mouseup);
}
//Назначение обработчиков
Book.prototype.handlers = {
    mousedown:function (e) {
        var book = $(this).data('book');
        book.onMousedown(book.getX(e.pageX));
    },
    mouseup:function () {
        Book.getActive().onMouseup();
    },
    mousemove:function (e) {
        var book = Book.getActive();
        book.onMove(book.getX(e.pageX));
    }
};

//Методы объекта книга
//Управлеие
Book.prototype.onMousedown = function (x) {
    Book.setActive(this);
    this.currentDelta = this.getDelta(x);
    this.$.css({
        'z-index' : '100',
        'cursor' : 'crosshair'
    });
    $(document).bind('mousemove', this.handlers.mousemove);
};

Book.prototype.onMouseup = function () {
    $(document).unbind('mousemove', this.handlers.mousemove);
    this.x = parseInt(this.$.css('left'));
    this.$.css({
        'z-index' : '5',
        'cursor' : 'default'
    });
    this.plaseInit();
};

Book.prototype.onMove = function (x) {
//    this.$.css('left', Math.max(Math.min(this.$shelf.width() - this.width,x - this.currentDelta),0));
    if (x - this.currentDelta > 2 && (x - this.currentDelta) < this.$shelf.width() - this.width - 2) {
        this.$.css('left', x - this.currentDelta);
    } else {

    }

    if (this.getNext()) {
        if (this.getCenter() > this.getNext().x) {
            this.getNext().moveBeack();
            this.insertAfter(this.getNext());
        }
    }
    if (this.getPrev()) {
        if (this.getCenter() < this.getPrev().getRightX()) {
            this.getPrev().moveFront();
            this.insertBefore(this.getPrev());
        }
    }
    return false;
};


Для того чтобы событие onMouseup срабатывало вне книги пробовал сделать так:

//Инициализация обработчиков книги
Book.prototype.init = function () {
    this.$.mousedown(this.handlers.mousedown);
    $(document).mouseup(this.handlers.mouseup);
}


В таком варианте событие mouseup срабатывает 5 раз подряд (вероятно из-за количества книг), в результате чего книга "прилипает" на какое-то время к краю полки и глючит.

Пожалуйста подскажите как сделать однократный запуск события и в чем ошибка.

Спасибо!

Последний раз редактировалось tsigel, 13.01.2013 в 23:32.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2013, 00:20
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Всем спасибо, разобрался!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции к элементу по клику (jquery) sogologo Общие вопросы Javascript 18 13.10.2012 19:14
Как временно запретить вызов функции? Dazar Общие вопросы Javascript 9 02.09.2012 22:52
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
вызов функции при смене url vvsh Events/DOM/Window 4 11.08.2011 19:01
Вызов функции, находящейся в другой функции ZneP Events/DOM/Window 6 24.08.2010 18:45