Перетащить, предотвратить неловкое выделение?
Я создаю метод перетаскивания, используя запрос -onmousedown, приводящий к -onmousemove (перетаскивание), а затем -onmouseup (отменяет привязку к onmousemove)
проблема в том, что настройки браузера по умолчанию начинают выделять onmousemove, который летит по всей странице и отменяет событие, делая его непригодным для использования. Любая идея о том, как предотвратить выделение, так как предотвращение дефолта, похоже, не работает. вот мой код (да, он очень небрежный, извините!)
$(".middleRow").mousedown(function(){
calculateSelection();
$('body').append('<div class="messageDrag" style="display:block">'+numSelected+'<div style="font-size: 18px">messages</div></div>');
$(document).mouseup(function(){
$('.messageDrag').fadeOut(500);
setTimeout(function(){
$('.messageDrag').remove();
}, 500);
$(document).unbind();
})
$(document).mousemove(function(e){
e.preventDefault();
var x = e.pageX;
var y = e.pageY;
$(".messageDrag").css("left", x-49);
$(".messageDrag").css("top", y-49);
});
});
2 ответа
Решение
Вы можете отключить выделение, используя CSS
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
Другой способ сделать это - очистить выделение по событию drop, как показано ниже:
function clearSelection() {
var sel;
if(document.selection && document.selection.empty){
document.selection.empty() ;
} else if(window.getSelection) {
sel = window.getSelection();
if(sel && sel.removeAllRanges)
sel.collapse();
}
}
Так вы бы позвонили clearSelection()
событие сброса (после завершения перетаскивания)
Добавить CSS
-webkit-touch-callout: none;/*for mobile*/
-webkit-user-select: none;/*for chrome*/
-khtml-user-select: none;/*for safari*/
-moz-user-select: none;/*for Mozilla*/
-ms-user-select: none;/*for mircosoft*/
-o-user-select: none;/*for opera*/
user-select: none;/*base css ,but not work in all browsers*/