中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

再次談論React.js實現原生js拖拽效果引起的一系列問題
來源:易賢網 閱讀:957 次 日期:2016-07-08 15:44:36
溫馨提示:易賢網小編為您整理了“再次談論React.js實現原生js拖拽效果引起的一系列問題”,方便廣大網友查閱!

React 起源于 Facebook 的內部項目,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設 Instagram 的網站。做出來以后,發現這套東西很好用,就在2013年5月開源了。由于 React 的設計思想極其獨特,屬于革命性創新,性能出眾,代碼邏輯卻非常簡單。所以,越來越多的人開始關注和使用,認為它可能是將來 Web 開發的主流工具。

前幾天寫的那個拖拽,自己留下的疑問。。。這次在熱心博友的提示下又修正了一些小小的bug,也加了拖拽的邊緣檢測部分。。。就再聊聊拖拽吧

一、不要直接操作dom元素

react中使用了虛擬dom的概念,目地就是要盡量避免直接操作dom元素,所以我們在對dom元素進行操作的時候需要注意,我之前為了獲取form的參數就直接用了var dragBox=document.getElementById('form')去找dom,但是其實記錄from的初始位置,可以在其子組件更新父組件參數的時候調用。即在MyFrom組件中獲取,如下代碼:

onChildChanged:function(newState){

/*以下為修改處*/

var computedStyle=document.defaultView.getComputedStyle(ReactDOM.findDOMNode(this.refs.dragBox),null);

newState.left=computedStyle.left;

newState.top=computedStyle.top;

/*以上為修改處*/

this.setState(newState);

},

這樣就可以直接在父組件中操作自己,而不是在子組件中調用。

二、onmousemove和onmouseup事件應該綁定到document上

拖拽事件中,當鼠標在DragArea中按下后,就應該檢測鼠標在document中移動的距離及何時彈起。否則直接綁定在form的話會有一個不雅的地方,就是拖動條拖動邊緣附近的時候,如果鼠標速度快一點會失效,鼠標再回來拖動條會自動吸上鼠標。因此利用react初始化階段的componentDidMount函數,這個函數是組件被裝載后才會被調用,也就是說調用這個方法的時候,組件已經被渲染到了頁面上,這個時候可以修改DOM。也就是說此時把相應事件再綁定到document上面,如下代碼:

componentDidMount:function(){

document.addEventListener('mousemove',(e)=>{this.move(e);},false);/*ES6新特性,箭頭函數,需要依賴jsx編譯工具才能正確運行*/

document.addEventListener('mouseup',(e)=>{this.endDrag(e);},false);

},

這樣就可以消除那個小小的bug啦!

三、增加邊緣檢測

一般情況下的拖拽,我們都是不希望能夠拖出可視窗口之外的,因此這就需要檢測。檢測四個方向上的位置,即上、下、左、右。顯然,上的距離top和左邊left的距離必須要大于等于0,下邊和右的距離必須要小于視口大小減去from本身的元素寬高。

具體代碼:

move:function(event){

var e = event ? event : window.event;

var dBox=ReactDOM.findDOMNode(this.refs.dragBox);

if (this.state.flag) {

var nowX = e.clientX, nowY = e.clientY;

var disX = nowX - this.state.currentX, disY = nowY - this.state.currentY;

/*增加拖拽范圍檢測*/

var currentLeft=parseInt(this.state.left) + disX;

var currentTop=parseInt(this.state.top) + disY;

var docX=document.documentElement.clientWidth||document.body.clientWidth;

var docY=document.documentElement.clientHeight||document.body.clientHeight;

if(currentLeft<=250){//檢測屏幕左邊,因為我這里的初始居中是利用了負1/2的盒子寬度的margin,所以用250px判斷邊界

dBox.style.left=250+"px";

}else if(currentLeft>=(docX-dBox.offsetWidth+250)){ //檢測右邊

dBox.style.left=(docX-this.state.offsetX)+"px";

}else{

dBox.style.left =currentLeft+ "px";

}

if(currentTop<=200){ //檢測屏幕上邊,因為我這里的初始居中是利用了負1/2的盒子高度的margin,所以用200px判斷邊界 <br> dBox.style.top=200+"px"; <br> }else if(currentTop>=(docY-dBox.offsetHeight+200)){ //檢測下邊<br> dBox.style.top=(docY-this.state.offsetY)+"px";<br> }else{<br> dBox.style.top = currentTop + "px"; <br> }<br> }

PS:新的代碼已經更新在我的github上面,大家可以研究一下。

ReactJS的背景和原理

在Web開發中,我們總需要將變化的數據實時反應到UI上,這時就需要對DOM進行操作。而復雜或頻繁的DOM操作通常是性能瓶頸產生的原因(如何進行高性能的復雜DOM操作通常是衡量一個前端開發人員技能的重要指標)。React為此引入了虛擬DOM(Virtual DOM)的機制:在瀏覽器端用Javascript實現了一套DOM API。基于React進行開發時所有的DOM構造都是通過虛擬DOM進行,每當數據變化時,React都會重新構建整個DOM樹,然后React將當前整個DOM樹和上一次的DOM樹進行對比,得到DOM結構的區別,然后僅僅將需要變化的部分進行實際的瀏覽器DOM更新。而且React能夠批處理虛擬DOM的刷新,在一個事件循環(Event Loop)內的兩次數據變化會被合并,例如你連續的先將節點內容從A變成B,然后又從B變成A,React會認為UI不發生任何變化,而如果通過手動控制,這種邏輯通常是極其復雜的。盡管每一次都需要構造完整的虛擬DOM樹,但是因為虛擬DOM是內存數據,性能是極高的,而對實際DOM進行操作的僅僅是Diff部分,因而能達到提高性能的目的。這樣,在保證性能的同時,開發者將不再需要關注某個數據的變化如何更新到一個或多個具體的DOM元素,而只需要關心在任意一個數據狀態下,整個界面是如何Render的。

如果你像在90年代那樣寫過服務器端Render的純Web頁面那么應該知道,服務器端所要做的就是根據數據Render出HTML送到瀏覽器端。如果這時因為用戶的一個點擊需要改變某個狀態文字,那么也是通過刷新整個頁面來完成的。服務器端并不需要知道是哪一小段HTML發生了變化,而只需要根據數據刷新整個頁面。換句話說,任何UI的變化都是通過整體刷新來完成的。而React將這種開發模式以高性能的方式帶到了前端,每做一點界面的更新,你都可以認為刷新了整個頁面。至于如何進行局部更新以保證性能,則是React框架要完成的事情。

借用Facebook介紹React的視頻中聊天應用的例子,當一條新的消息過來時,傳統開發的思路如上圖,你的開發過程需要知道哪條數據過來了,如何將新的DOM結點添加到當前DOM樹上;而基于React的開發思路如下圖,你永遠只需要關心數據整體,兩次數據之間的UI如何變化,則完全交給框架去做。可以看到,使用React大大降低了邏輯復雜性,意味著開發難度降低,可能產生Bug的機會也更少。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲人成网站影音先锋播放| 国产日韩欧美黄色| 亚洲男人av电影| 久久经典综合| 免费亚洲网站| 国产欧美日韩综合一区在线播放| 一区二区三区在线看| 一本色道88久久加勒比精品| 欧美在线综合视频| 欧美日韩国产123区| 国产一区二区三区在线观看视频| 99精品免费网| 女同一区二区| 国产在线精品自拍| 亚洲欧美日韩国产精品| 欧美日韩a区| 亚洲国产日韩欧美在线动漫| 久久精品国产精品| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲人屁股眼子交8| 久久伊人精品天天| 国产亚洲一二三区| 欧美一区永久视频免费观看| 国产精品久久久久久久免费软件| 亚洲精品一区二区三区在线观看| 久久久久久9999| 国产日韩欧美综合| 午夜在线精品偷拍| 国产精品久久久久久久久久三级 | 亚洲在线视频网站| 欧美激情综合五月色丁香小说| 在线日韩av永久免费观看| 久久久久国产精品麻豆ai换脸| 国产精品美女久久久浪潮软件| 国产精品99久久99久久久二8| 欧美裸体一区二区三区| 亚洲美女av在线播放| 欧美日本精品| 99热这里只有成人精品国产| 亚洲视频精品在线| 91久久午夜| 正在播放日韩| 亚洲黑丝在线| 欧美高清影院| 亚洲欧美一区二区三区极速播放| 国产精品自拍在线| 久久精品一区二区三区中文字幕 | 你懂的视频一区二区| 欧美色欧美亚洲另类二区 | 亚洲国产一区二区三区a毛片| 狠狠噜噜久久| 一本色道久久精品| 国产日韩欧美黄色| 99国产精品一区| 亚洲精品小视频| 欧美成人第一页| 99精品视频一区| 国产精品综合久久久| 午夜精品视频在线| 韩国福利一区| 男女激情久久| 亚洲午夜免费视频| 国产午夜亚洲精品羞羞网站| 免费在线看成人av| 99伊人成综合| 国内外成人免费激情在线视频网站| 免费在线一区二区| 亚洲永久视频| 亚洲另类春色国产| 精品二区视频| 国产精品久久婷婷六月丁香| 久久久人成影片一区二区三区观看| 亚洲欧洲精品一区二区精品久久久| 欧美视频不卡| 久久免费99精品久久久久久| 日韩香蕉视频| 狠狠干成人综合网| 国产精品―色哟哟| 欧美成人综合在线| 久久精品99无色码中文字幕| 亚洲无线一线二线三线区别av| 在线成人亚洲| 国产亚洲一区二区在线观看| 欧美日韩精品综合| 欧美成人综合在线| 久久久另类综合| 性欧美超级视频| 一区二区三区蜜桃网| 激情视频亚洲| 国产欧美va欧美不卡在线| 欧美日韩中文字幕综合视频 | 欧美成人免费大片| 久久午夜激情| 久久久之久亚州精品露出| 午夜精品久久久久久久99黑人| 91久久国产精品91久久性色| 尤物在线观看一区| 精品91久久久久| 国内成人精品2018免费看| 国产欧美精品日韩| 国产精品亚洲欧美| 国产精品亚洲成人| 国产麻豆综合| 国产午夜久久| 影音先锋日韩资源| 亚洲国产美女精品久久久久∴| 亚洲国产99精品国自产| …久久精品99久久香蕉国产| 精久久久久久| 亚洲电影中文字幕| 91久久精品国产91性色tv| 亚洲日本成人网| 99热这里只有精品8| 99riav1国产精品视频| 日韩亚洲欧美在线观看| 99视频精品全部免费在线| 一本色道久久88亚洲综合88| 亚洲无限av看| 久久久国产亚洲精品| 久久午夜精品一区二区| 欧美久久成人| 国产农村妇女精品一区二区| 国产亚洲一区二区三区在线观看| 精品99一区二区三区| 亚洲精品小视频| 午夜精品久久久久久久久久久久| 午夜精品国产精品大乳美女| 久久精品官网| 欧美韩国一区| 国产日韩欧美| 亚洲日本激情| 亚洲欧美在线播放| 老**午夜毛片一区二区三区| 欧美喷水视频| 激情欧美一区二区三区| 99热这里只有精品8| 久久久精品五月天| 欧美日韩亚洲一区二区| 国产精品久久久99| 91久久精品美女| 亚洲一区二区综合| 欧美国产精品一区| 韩国av一区| 亚洲欧美中文日韩v在线观看| 欧美α欧美αv大片| 国产女优一区| 亚洲理伦在线| 久热精品视频在线观看一区| 国产精品www.| 亚洲第一主播视频| 欧美一级淫片aaaaaaa视频| 欧美日韩成人一区| 亚洲国产成人久久| 欧美在线视频观看| 国产精品视频99| 在线视频亚洲欧美| 欧美激情精品久久久久| 在线播放国产一区中文字幕剧情欧美 | 久久嫩草精品久久久久| 国产精品毛片| 亚洲美女免费视频| 久久综合伊人77777| 国产午夜一区二区三区| 亚洲综合三区| 国产精品久久久久毛片大屁完整版| 亚洲黄网站在线观看| 蜜臀av一级做a爰片久久| 国产日韩欧美黄色| 性欧美8khd高清极品| 国产精品高潮视频| 亚洲在线一区二区三区| 欧美日韩视频在线第一区| 亚洲精品久久在线| 欧美美女喷水视频| 在线综合亚洲欧美在线视频| 欧美精品尤物在线| 99国产精品| 国产精品v欧美精品v日本精品动漫 | 欧美成人情趣视频| 影音先锋在线一区| 久久中文精品| 亚洲精品美女| 欧美系列亚洲系列| 亚洲一区美女视频在线观看免费| 欧美三级在线视频| 亚洲女人天堂av| 国产日韩精品一区二区三区在线 | 国产一区二区0| 久久久久久久一区二区| 在线观看欧美精品| 欧美精品三级| 亚洲综合电影一区二区三区| 国产精品自拍网站| 久久野战av| 日韩视频亚洲视频| 国产免费观看久久黄| 久久久夜色精品亚洲| 亚洲精品日韩激情在线电影| 欧美手机在线| 久久久综合视频|