国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

基于React.js實現原生js拖拽效果引發的思考_javascript技巧

來源:懂視網 責編:小采 時間:2020-11-27 20:52:42
文檔

基于React.js實現原生js拖拽效果引發的思考_javascript技巧

基于React.js實現原生js拖拽效果引發的思考_javascript技巧:一、起因&思路 一直想寫一個原生js拖拽效果,又加上近來學react學得比較嗨。所以就用react來實現這個拖拽效果。 首先,其實拖拽效果的思路是很簡單的。主要就是三個步驟: 1.onmousedown的時候,啟動可拖拽事件,記錄被拖拽元素的原始坐標參數。 2.onm
推薦度:
導讀基于React.js實現原生js拖拽效果引發的思考_javascript技巧:一、起因&思路 一直想寫一個原生js拖拽效果,又加上近來學react學得比較嗨。所以就用react來實現這個拖拽效果。 首先,其實拖拽效果的思路是很簡單的。主要就是三個步驟: 1.onmousedown的時候,啟動可拖拽事件,記錄被拖拽元素的原始坐標參數。 2.onm
一、起因&思路

一直想寫一個原生js拖拽效果,又加上近來學react學得比較嗨。所以就用react來實現這個拖拽效果。

首先,其實拖拽效果的思路是很簡單的。主要就是三個步驟:

1.onmousedown的時候,啟動可拖拽事件,記錄被拖拽元素的原始坐標參數。

2.onmousemove的時候,實時記錄鼠標移動的距離,結合被拖拽元素第一階段的坐標參數,計算并設置新的坐標值。

3.onmouseup的時候,關閉可拖拽事件,記錄新的坐標值。

注意:這里主要是通過絕對定位的top和left來確定元素的位置的,因此被拖拽元素的css一定要設置絕對定位。

二、輔助工具

輔助工具主要就是是開發過程變得高效,而且酷炫的。在這個demo中,要給大家推薦一個gulp+browser-sync的開發工具,gulp有很多功能,在這個demo中gulp的作用主要是可以設置實時編譯react中的jsx文件,當然如果你寫css用的是sass,也可以設置實時編譯sass。用browser-sync這個呢,主要就是可以自動實時刷新頁面,我們平時做頁面,看效果的時候,通常都是通過F5來刷新瀏覽器,然后看到頁面的。但是用了這個插件,你寫完代碼的時候,只要按下,ctrl+s保存,新的效果就會自動在瀏覽器中刷新,然后看得到了。

用法詳解:

安裝:

1.在node的環境下,安裝gulp,這里就不詳說了,具體過程可參考我的博文《react.js入門必須知道的那些事》

2.安裝gulp-livereload,在命令行或者git bash ,輸入npm install --save-dev gulp-livereload

3.安裝gulp-watch,在命令行或者git bash ,輸入npm install --save-dev gulp-watch

4.安裝browser-sync,在命令行或者git bash ,輸入npm install --save-dev browser-sync

配置及解釋如圖:

三、定義組件構建頁面

備注:這里的代碼說明均在react相關模塊安裝好的情況下,安裝過程見我的博文《react.js入門必須知道的那些事》.

效果圖:

組件拆分思路:

我當時覺得組件拆分得細一點好,所以我把input、button分別做成了一個組件:

由于input有很多都是需要指定的,這種情況下,如果像我這樣定義需要傳太多參數,而且其實登陸的input大多都是固定且沒必要復用的,所以這樣其實不大好。這里的input直接寫比較好。

寫好之后的父組件:

備注:因為demo中需要獲取真實的dom節點,所以定義了ref。

再加上css樣式,頁面就完成啦!最后,重點來啦!!!

四、父子組件間通信實現拖拽

說明:由于我要實現的效果是,鼠標按住子組件DragArea的時候,拖動的是整個form,所以啟動拖拽的是DragArea,而響應的是form。所以,一開始必須把父組件的一些狀態屬性傳給子組件,然后鼠標在DragArea按下的的時候,必須通過子組件DragArea找到父組件的原始坐標參數,然后更新父組件里面的狀態屬性,并且告訴父組件可以進行拖拽了。父組件給子組件傳參就是直接傳遞的。而子組件給父組件傳參需要通過事件。所以在父組件中定義這么一個函數:

而子組件需要綁定這個函數,如上面的代碼:callbackParent={this.onChildChanged}

在子組件中,響應的函數為:

這樣,在子組件中就啟動了拖拽開關,并且已經更新了from的相關參數,from的兩外兩個事件,move和endDrag分別為:

至此,拖拽實現!

五、反思回顧

1.理論上來說,拖拽效果可以在任意元素中實現,拖拽的思路都是一致的,所以理論上來說,拖拽各個過程的函數可以抽離出來,做成一個Mixin,然后可以反復調用。我一開始的思路就是這樣,但是在傳參、響應、綁定元素上面總是出錯。查找了一下資料,沒找到react與拖拽的簡單寫法資料,只有一些react的專用插件,而且是用ES6的寫法,由于現在的水平還沒能看懂。所以暫時放棄了這種寫法。希望有相關想法的大神們和我交流一下。

2.文中子組件獲取from的參數時,用了var dragBox=document.getElementById('form');去找dom,這樣好像違反了react的一些理念。但是我還不是很熟悉該怎么從子組件獲取父組件的dom。我試過在父組件定義refs=this.refs.dragBox。然后傳給子組件,但是不知道為什么瀏覽器一直報錯說這個不是dom節點。求大神指教。

3.拖拽事件的一般寫法,是在document上面定義mousemove和mouseup事件,但是這兩個事件都關聯到from的參數,這樣的話,如果我在react中定義在document,就跟蹤不了相關參數。所以我就定義在了from上面。是不是有更好的方法呢?求分享!

4.革命尚未成功,同志仍需努力!

本demo已上傳至:https://github.com/LuckyWinty/dragDemo

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

基于React.js實現原生js拖拽效果引發的思考_javascript技巧

基于React.js實現原生js拖拽效果引發的思考_javascript技巧:一、起因&思路 一直想寫一個原生js拖拽效果,又加上近來學react學得比較嗨。所以就用react來實現這個拖拽效果。 首先,其實拖拽效果的思路是很簡單的。主要就是三個步驟: 1.onmousedown的時候,啟動可拖拽事件,記錄被拖拽元素的原始坐標參數。 2.onm
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产69久久精品成人看小说 | 特级全黄一级毛片视频 | 成人毛片免费免费 | 亚洲久热 | 2021精品国内一区视频自线 | 全免费a级毛片免费看不卡 日本二区在线观看 | 精品69久久久久久99 | 国产最新进精品视频 | 精品在线观看国产 | 欧美国产在线视频 | 久久亚洲欧美综合激情一区 | 欧美亚洲一区二区三区 | 永久免费观看的毛片的网站下载 | 国产日韩欧美一区二区三区视频 | 国产女同一区二区三区五区 | 欧美色亚洲 | 国产96在线 | 成人亚洲欧美日韩在线 | 欧美日本韩国一区二区 | 日本成人一区 | 亚洲国产精品嫩草影院久久 | 亚洲综合欧美日本另类激情 | 视频一区久久 | 欧美国产精品 | 日韩小视频在线 | 久久久久久91香蕉国产 | 欧美在线一区视频 | 精品一区二区在线观看 | 日本免费一级视频 | 销魂美女一区二区 | 国产91精品对白露脸全集观看 | 91一区二区三区 | 在线免费观看国产视频 | 中国亲与子乱αy | 成人亚洲国产综合精品91 | 国产精品久久久久久永久牛牛 | 欧美日韩福利 | 国产精品亚洲欧美 | 久久久久国产成人精品亚洲午夜 | 一级大黄毛片 | 日韩毛毛片 |