彈框拖動(dòng)功能 && mouseup事件丟失

對(duì)于某區(qū)域的拖動(dòng)功能主要用到mousedown,mousemove和mouseup事件,具體代碼如下:

function pauseEvent(e){
    if(e.stopPropagation) e.stopPropagation();
    if(e.preventDefault) e.preventDefault();
    e.cancelBubble=true;
    e.returnValue=false;
    return false;
}
$('.selectMajor .co_tit').mousedown(function(ev){
    var e = ev||event;
    pauseEvent(e);
    var mdX = e.clientX;
    var mdY = e.clientY;
    var ele_top = $('.selectMajor').position().top;
    var ele_left = $('.selectMajor').position().left;
    var ele_width = $('.selectMajor').width();
    var ele_height = $('.selectMajor').height();
    var win_width = $(window).width();
    var win_height = $(window).height();
    // IE8 取消默認(rèn)行為-設(shè)置全局捕獲
    if ($('.selectMajor .co_tit').setCapture) {
        $('.selectMajor .co_tit').setCapture();
    }
    document.onmousemove = function(ev2) {
        var e2 = ev2||event;
        pauseEvent(e2);
        var mmX = e2.clientX;
        var mmY = e2.clientY;
        var moveX = mmX-mdX;
        var moveY = mmY-mdY;
        var target_top = ((ele_top+moveY) > (win_height-ele_height)) ? (win_height-ele_height) : (ele_top+moveY)
        target_top = target_top < 0 ? 0 : target_top
        var target_left = (ele_left+moveX-400) < 0 ? 400 : ( (ele_left+moveX-400)>(win_width-ele_width) ? (win_width-ele_width+400) : ele_left+moveX )
        $('.selectMajor').css('top',target_top+'px');
        $('.selectMajor').css('left',target_left+'px');
    }
})
document.onmouseup = function() {
    document.onmousemove = null;
    // 釋放全局捕獲
    if ($('.selectMajor .co_tit').releaseCapture) {
        $('.selectMajor .co_tit').releaseCapture();
    }
}

在測(cè)試時(shí)會(huì)發(fā)現(xiàn),如果不加pauseEvent方法時(shí),會(huì)出現(xiàn)時(shí)常mouseup事件丟失的情況。具體原因:

  • 觸發(fā)了瀏覽器的 drag 操作,導(dǎo)致mouseup丟失。
  • 由于鼠標(biāo)離開了操作的區(qū)域,觸發(fā)了mouseleave導(dǎo)致mouseup丟失。

加的pauseEvent方法就是用來防止觸發(fā)drag操作的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,690評(píng)論 1 11
  • 本節(jié)介紹各種常見的瀏覽器事件。 鼠標(biāo)事件 鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件,主要有以下一些。 click 事件,dblc...
    許先生__閱讀 2,840評(píng)論 0 4
  • 本篇博客源地址 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件ele.click()ele.click(ha...
    ZombieBrandg閱讀 749評(píng)論 0 1
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,719評(píng)論 2 10
  • 在前端開發(fā)過程中,頁面交互過程和事件機(jī)制密不可分,一直以來對(duì)于事件相關(guān)機(jī)制了解的不夠深刻,沒有好好進(jìn)行了解,最近花...
    Patrick浩閱讀 1,871評(píng)論 0 2

友情鏈接更多精彩內(nèi)容