Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Блокировка mousemove при нажатой кнопке мыши


Автор: nikitos1980 26.2.2012, 13:03
Добрый день
В моем скрипте я перемещаю графический бегунок по горизонтали. Суть в том, чтобы когда было нажатие на самом бегунке (и кнопка не отпущена), то бегунок двигался за курсором.
При событии mousedown на бегунке я добавляю контейнеру обработчик события mousemove. Начинаю двигать крусор мыши и бегунок следует за мышью, но почти сразу браузер останавливает обработку события (показывается значок черного увета в виде перечеркнутого круга) и затем, только когда отпустить кнопку мыши продолжается обработка перемещения курсора и бегунок следует за курсором.
Я делал различные тесты и обнаружил, что при обработке события mousemove при нажатой кнопке мыши эта проблема возникает.

Подскажите, кто столкнулся с такой проблемой и можно ли как-то обойти эту особенность браузеров?

Автор: $дмитрий 26.2.2012, 14:04
Нужно запретить браузеру выделение.
Готовый код для Jquery

Код

jQuery.fn.extend({
    disableSelect:function(){
        this.each(function(){
            this.onselectstart = function() { return false; };
            this.unselectable = "on";
            jQuery(this).css('-moz-user-select', 'none');
    });
}, enableSelect:function(){
    this.each(function(){
        this.onselectstart = function(){};
        this.unselectable = "off";
        jQuery(this).css('-moz-user-select', 'auto');
    });
}});

///////

$('body').disableSelect(); // запрещает выделение
$('body').enableSelect(); // разрешает выделение




Автор: magelan 29.2.2012, 12:39
onselectstart тут не при чем, его хорошо запрещать, чтобы не было визуальных артефактов.
за описанное поведение отвечает событие ondragstart.

Автор: nikitos1980 29.2.2012, 13:37
magelan, $дмитрий, спасибо!
Решение от magelan оказалось самым что ни есть верным! Добавил код при начале пермещения (нажатие левой кнопки мыши):
document.ondragstart = function()
{
    return false;
}

А при окончании перемещения (отпускание мыши):
document.ondragstart = function(){}

Работает отлично!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)