Как я могу предотвратить выделение текста / элемента с помощью перетаскивания курсора
Я сделал управление подкачкой, и я заметил, что при нажатии на кнопки очень легко случайно выбрать отдельные изображения и текст. Можно ли это предотвратить?
для уточнения выбора я имею в виду выделение с помощью мыши. (Попробуйте перетащить мышь с одной стороны экрана на другую.)
при попытке выделить текст / элементы управления в этой сетке он не может быть выбран. Как это делается? ссылке
8 ответов:
перетаскивание и выбор как инициализировать событие мыши вниз, так и обновление при последующих перемещениях мыши. Когда вы обрабатываете события, чтобы начать перетаскивание, или следовать за мышью, отмените пузырение события и переопределите возврат браузера по умолчанию:
что-то вроде этого в вашем начале перетаскивания mousedown и перемещения обработчиков -
e=e || window.event; pauseEvent(e);
function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble=true; e.returnValue=false; return false; }
для перетаскивания, вы захватываете
mousedown
иmousemove
событий. (И, надеюсь,touchstart
иtouchmove
события, а также для поддержки сенсорных интерфейсов.)нужно позвонить
event.preventDefault()
и вdown
иmove
события для того, чтобы браузер не выбирал текст.например (с помощью jQuery):
var mouseDown = false; $(element).on('mousedown touchstart', function(event) { event.preventDefault(); mouseDown = true; }); $(element).on('mousemove touchmove', function(event) { event.preventDefault(); if(mouseDown) { // Do something here. } }); $(window.document).on('mouseup touchend', function(event) { // Capture this event anywhere in the document, since the mouse may leave our element while mouse is down and then the 'up' event will not fire within the element. mouseDown = false; });
Я хотел прокомментировать, но у меня недостаточно репутации. Использование предложенной функции из @kennebec решило мою проблему в моей библиотеке перетаскивания javascript. Он работает безупречно.
function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble=true; e.returnValue=false; return false; }
Я вызвал его в своей пользовательской функции mousedown и mousemove, сразу же после того, как я могу распознать, я нажал на правильный элемент. Если я вызываю его только поверх функции, я просто убиваю любой щелчок по документу. Моя функция зарегистрирована как событие в документе.тело.
Это может быть достигнуто с помощью CSS в большинстве браузеров и
unselectable
expando в IE. Смотрите мой ответ здесь: Как отключить выделение текста с помощью CSS?
Это очень старый пост. Он может не отвечать точно на эту ситуацию, но я использую CSS для своего решения:
-webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;