2018-06-24 關(guān)于拖拽給自己挖的坑

寫在世界杯當(dāng)中...
好吧层亿,當(dāng)別人刷世界杯的時(shí)候桦卒,我還在刷拖拽的bug...
這個(gè)確實(shí)是給自己挖的坑
整理了一下拖拽坑的幾個(gè)思路

首先上個(gè)API

在拖動(dòng)目標(biāo)上觸發(fā)事件 (源元素):
ondragstart - 用戶開始拖動(dòng)元素時(shí)觸發(fā)
ondrag - 元素正在拖動(dòng)時(shí)觸發(fā)
ondragend - 用戶完成元素拖動(dòng)后觸發(fā)

釋放目標(biāo)時(shí)觸發(fā)的事件:
ondragenter - 當(dāng)被鼠標(biāo)拖動(dòng)的對(duì)象進(jìn)入其容器范圍內(nèi)時(shí)觸發(fā)此事件
ondragover - 當(dāng)某被拖動(dòng)的對(duì)象在另一對(duì)象容器范圍內(nèi)拖動(dòng)時(shí)觸發(fā)此事件
ondragleave - 當(dāng)被鼠標(biāo)拖動(dòng)的對(duì)象離開其容器范圍內(nèi)時(shí)觸發(fā)此事件
ondrop - 在一個(gè)拖動(dòng)過程中,釋放鼠標(biāo)鍵時(shí)觸發(fā)此事件

1匿又,該死的拖拽居然是350毫秒才執(zhí)行一次方灾?!requestanimationframe 60毫秒執(zhí)行一次才能感覺到流暢好不碌更。這個(gè)說真的還不如用setTimeout來模擬了裕偿。但是用mouseevent來模擬拖拽事件也確實(shí)太麻煩了,而且項(xiàng)目里面還有用到mouseevent的地方针贬。不過350毫秒的設(shè)計(jì)我想了一下击费,跟接下來的槽點(diǎn)估計(jì)有點(diǎn)關(guān)系。

這個(gè)果然是用來節(jié)流的桦他,用mouseMove來模擬拖拽的時(shí)候要節(jié)流蔫巩。不過我還是覺得這個(gè)要是能自己設(shè)置才最好。

2快压,drag事件沒有方向性可言圆仔。這意味著在猜測(cè)鼠標(biāo)移動(dòng)的方向上要排除一些手滑的噪點(diǎn),最好的方法是用線性回歸的方法去掉那些出問題的點(diǎn)蔫劣,這個(gè)方法有點(diǎn)難寫坪郭,回頭研究python的時(shí)候打算研究下。目前還是用去掉特別奇葩點(diǎn)的方法來猜測(cè)方向的脉幢。用的是兩次位置的差值來看趨勢(shì)的方法歪沃。(這里我覺得用350毫秒就是給我們確定方向才設(shè)計(jì)這么長時(shí)間的)

3嗦锐,最奇葩的點(diǎn)有哪些呢?首先是ondrag事件的最后一幀鼠標(biāo)位置要回到原點(diǎn)...這個(gè)事件還發(fā)生在ondragend的事情之前沪曙。也對(duì)奕污,ondrag事件執(zhí)行完了才執(zhí)行ondragend,但是這樣ondragend里面就拿不到最后的坐標(biāo)位置了液走。解決的思路有兩個(gè)碳默,第一種就是采用事件循環(huán),將ondrag最后一幀送進(jìn)setTimeout里面去讓它一萬年后再發(fā)生缘眶。第二種是發(fā)生鼠標(biāo)位置為(0,0)的時(shí)候就無視嘱根。后面這種方法要好一些。還有一個(gè)奇葩的點(diǎn)是在第一幀的時(shí)候巷懈,計(jì)算出來的鼠標(biāo)位置和實(shí)際的位置差了一點(diǎn)该抒。這個(gè)是控制對(duì)象的實(shí)際位置和鼠標(biāo)有一定的差距,一下子調(diào)整不到鼠標(biāo)的位置上來砸喻。我解決的方式是加個(gè)次數(shù)控制器柔逼,在大于3的時(shí)候,就是基本對(duì)象跟著鼠標(biāo)開始跑了以后才讓對(duì)象移動(dòng)割岛。一頭一尾,兩個(gè)最氣人的地方犯助。

4癣漆,最坑的地方。拖拽的時(shí)候會(huì)很貼心的給你把拖拽的對(duì)象轉(zhuǎn)成圖片跟著鼠標(biāo)走剂买。但是這個(gè)圖片默認(rèn)會(huì)加個(gè)透明度惠爽!這個(gè)透明度是無法去掉的,給了個(gè)API可以將這個(gè)圖片換走瞬哼,但是換走的圖片還是會(huì)加透明度婚肆。仔細(xì)的翻過全部的API了沒有辦法去掉這個(gè)透明,想要去掉透明度怎么辦坐慰?方法還是有的较性,用兩個(gè)對(duì)象,一個(gè)對(duì)象是透明的就是用來拖拽的结胀,另一個(gè)對(duì)象就是用來展示用的赞咙,兩個(gè)對(duì)象一起跟著對(duì)象跑。就是在我們展示的DOM結(jié)構(gòu)上貼上一個(gè)透明的拖拽層糟港。

5攀操,這些都是在react封裝的ondrag的方法上得出的結(jié)果,我覺得還是有必要在原生的情況下實(shí)驗(yàn)下秸抚,不能相信react封裝的方法和js原生的方法100%一樣速和。還是那個(gè)思路歹垫,框架來用的,不能盡信颠放。

最后提醒下自己:
沒事就不要在沒有redux的情況下玩什么兄弟之間的傳參排惨。坑到死慈迈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末若贮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痒留,更是在濱河造成了極大的恐慌谴麦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伸头,死亡現(xiàn)場(chǎng)離奇詭異匾效,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恤磷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門面哼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扫步,你說我怎么就攤上這事魔策。” “怎么了河胎?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵闯袒,是天一觀的道長。 經(jīng)常有香客問我游岳,道長政敢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任胚迫,我火速辦了婚禮喷户,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘访锻。我一直安慰自己褪尝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布朗若。 她就那樣靜靜地躺著恼五,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哭懈。 梳的紋絲不亂的頭發(fā)上灾馒,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音遣总,去河邊找鬼睬罗。 笑死轨功,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的容达。 我是一名探鬼主播古涧,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼花盐!你這毒婦竟也來了羡滑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤算芯,失蹤者是張志新(化名)和其女友劉穎柒昏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熙揍,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡职祷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了届囚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片有梆。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖意系,靈堂內(nèi)的尸體忽然破棺而出泥耀,到底是詐尸還是另有隱情,我是刑警寧澤蛔添,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布爆袍,位于F島的核電站,受9級(jí)特大地震影響作郭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弦疮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一夹攒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胁塞,春花似錦咏尝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扰才,卻和暖如春允懂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衩匣。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工蕾总, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粥航,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓生百,卻偏偏與公主長得像递雀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚀浆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的市俊。 ??事件杨凑,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,474評(píng)論 1 11
  • 因?yàn)橐鲆粋€(gè)地圖操作的項(xiàng)目,需要用到這個(gè)地圖庫秕衙,但是查詢官方API麻煩蠢甲,而且這個(gè)地圖框架的API做的用起來確實(shí)太麻...
    虛幻的銹色閱讀 33,835評(píng)論 1 15
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,336評(píng)論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 晚上,家嫂和鄰居熱火朝天的對(duì)比“生完寶寶后誰的腰更粗”据忘,我默默的看了下自己鹦牛,最小號(hào)的褲子,腰頭快能放半個(gè)拳頭勇吊。 當(dāng)...
    漁歌子珊閱讀 195評(píng)論 0 0