拖放,防止尴尬的突出显示?

时间:2012-03-09 01:29:04

标签: javascript jquery events drag-and-drop

我正在使用查询构建拖放方法 -onmousedown 导致-onmousemove(拖动)然后-onmouseup(unbinds onmousemove)

问题是,浏览器默认开始突出显示onmousemove,它会飞越整个页面并取消事件,使其无法使用。任何想法如何防止突出显示,因为preventDefault似乎没有工作。这是我的代码(是的,非常草率,对不起!)

$(".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 个答案:

答案 0 :(得分:12)

您可以使用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()

答案 1 :(得分:2)

添加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*/