Перетащить, предотвратить неловкое выделение?

Я создаю метод перетаскивания, используя запрос -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*/
Другие вопросы по тегам