国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從GGEditor的一個案例看JS原生拖拽功能

PingCAP / 3756人閱讀

摘要:涉及部分的,不會對理解全局產(chǎn)生干擾。在上監(jiān)聽事件,當為畫布時,通過創(chuàng)建一個藍色虛線框移動的時候,更新的位置在上監(jiān)聽事件,落在畫布時,創(chuàng)建一個的節(jié)點從而完成整個拖拽添加元素的功能。

拖拽操作平時用的比較少,在最近的一個項目中使用到了,并且踩了一些坑,本文做一個簡單的總結。涉及部分G6的API,不會對理解全局產(chǎn)生干擾。
需求概述

如下圖所示,左側為GGEditor元素面板React組件,右側為G6畫布,現(xiàn)需要將元素從「元素面板」中拖拽到「畫布」上。要求:

拖拽時藍色虛線框和元素面板的對應元素尺寸相同(為一矩形)

藍色虛線框跟隨鼠標移動,指明當前拖拽的位置

元素面板上對應元素不應發(fā)生改變

??圖中的黑色圓圈僅為錄屏軟件指明鼠標操作提示

拖拽方法總結

相較于大部分DOM操作只需要監(jiān)聽某一種事件,原生拖拽功能的實現(xiàn)通常需要監(jiān)聽全部或部分的下述事件:

事件 event.target 觸發(fā)時機
drag 被拖動元素 拖拽中(每幾百毫秒觸發(fā)一次)
dragstart 被拖動元素 剛開始拖拽
dragend 被拖動元素 拖拽結束(鼠標釋放或esc
dragover 被拖動元素下方元素 拖拽到某一目標上時(每幾百毫秒一次)
dragenter 被拖動元素下方元素 被拖動元素進入可釋放處時
dragleave 被拖動元素下方元素 拖拽離開某一目標時
drop 被拖動元素下方元素 dragend 且在其之前觸發(fā)
需求實現(xiàn)

實現(xiàn)之前,有幾個踩坑點先說明:

不能將左側面板的元素設置為draggable,因為原生拖拽自帶陰影效果,如下圖。


很明顯這不是我們要的效果。

拖拽時的藍色虛線框應該由G6繪制成一個canvas的元素,因為畫布可以放大或縮小,這個虛線框應和實際放在畫布上的元素尺寸相同而不是左側面板的元素尺寸相同。(不了解G6的同學自行忽略

思路

拖拽開始或鼠標落下時,創(chuàng)建一個和元素大小寬高相同的透明度為0的矩形shadowShape,并監(jiān)聽其dragmouseup事件。

document上監(jiān)聽dragenter事件,當target為畫布時,通過G6api創(chuàng)建一個藍色虛線框dragShape

shadowShape移動的時候,更新dragShape的位置

document上監(jiān)聽drop事件,落在畫布時,創(chuàng)建一個G6的節(jié)點從而完成整個拖拽添加元素的功能。

??踩坑點:必須要阻止dragover的默認行為,保證drop的正常觸發(fā),參考這則問答

總結

1 相較于上個版本的GGEditor,實現(xiàn)了拖拽功能的連續(xù)性。之前,鼠標即使保持按下,一旦移出畫布,就終止了本次的拖拽過程。


上個版本的GGEditor

2 待優(yōu)化點:

由于藍色虛線框是G6畫布上的元素,能夠根據(jù)G6的縮放比例自動調(diào)整大小,所以在其他地方的拖拽過程不易做出類似的虛線框,體驗上有間斷感

當前代碼在一個react組件里操作了大量的原生事件監(jiān)聽,不夠React,考慮之后直接開發(fā)一個新的組件,使用React的合成事件來重寫。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/54079.html

相關文章

  • GGEditor一個案例JS原生拖拽功能

    摘要:涉及部分的,不會對理解全局產(chǎn)生干擾。在上監(jiān)聽事件,當為畫布時,通過創(chuàng)建一個藍色虛線框移動的時候,更新的位置在上監(jiān)聽事件,落在畫布時,創(chuàng)建一個的節(jié)點從而完成整個拖拽添加元素的功能。 showImg(https://segmentfault.com/img/remote/1460000019564977);showImg(https://segmentfault.com/img/remot...

    taowen 評論0 收藏0
  • 百度網(wǎng)盤文件夾框選功能

    摘要:案例說明使用原生完成桌面操作級應用,對于原生的掌握情況而言,是一個較為全面的綜合型案例。本次課從事件相關的功能入手,給大家?guī)碓敿毜姆窒怼? showImg(https://segmentfault.com/img/bVbh1qw); 案例說明:使用原生 JS 完成桌面操作級應用,對于原生 JS 的掌握情況而言,是一個較為全面的綜合型案例。本次課從事件(event)相關的功能入手,給大家...

    jkyin 評論0 收藏0
  • JS進階篇4---原生JS實現(xiàn)對元素拖拽

    摘要:原生實現(xiàn)對元素的拖拽一背景介紹此處為鋪墊內(nèi)容,可跳過隨著前端的不斷發(fā)展,各種各樣的前端規(guī)范和新知識新技術層出不窮,極大地拓展了開發(fā)者的操作空間,也大大地提升了用戶體驗。 原生 JS 實現(xiàn)對 html 元素的拖拽 一、背景介紹 【此處為鋪墊內(nèi)容,可跳過】 隨著 Web 前端的不斷發(fā)展,各種各樣的前端規(guī)范和新知識、新技術層出不窮,極大地拓展了開發(fā)者的操作空間,也大大地提升了用戶體驗。而隨著...

    evin2016 評論0 收藏0
  • JS進階篇4---原生JS實現(xiàn)對元素拖拽

    摘要:原生實現(xiàn)對元素的拖拽一背景介紹此處為鋪墊內(nèi)容,可跳過隨著前端的不斷發(fā)展,各種各樣的前端規(guī)范和新知識新技術層出不窮,極大地拓展了開發(fā)者的操作空間,也大大地提升了用戶體驗。 原生 JS 實現(xiàn)對 html 元素的拖拽 一、背景介紹 【此處為鋪墊內(nèi)容,可跳過】 隨著 Web 前端的不斷發(fā)展,各種各樣的前端規(guī)范和新知識、新技術層出不窮,極大地拓展了開發(fā)者的操作空間,也大大地提升了用戶體驗。而隨著...

    phoenixsky 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<