DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> WEB網站前端 >> WEB前端代碼 >> 前端托牽效果
前端托牽效果
編輯:WEB前端代碼     

上文說到,想將移動端的拖拽說一說,那現在趁有時間,就將這個福利文帶來了,哈哈!

在我還不知道怎麼做移動端的手勢操作的時候,我覺得這TM實在是太難了,這是多麼高深的學問啊,手勢操作耶,上滑下滑左滑右滑的,手機怎麼知道我是怎麼滑的,我要怎麼告訴手機,我用手滑了一下,於是我就默默的找資料看看,

到底是什麼樣的原理可以實現這一點,於是,我找到了移動端手勢操作原生事件:

touchstart:     //手指放到屏幕上時觸發

touchmove:      //手指在屏幕上滑動式觸發

touchend:    //手指離開屏幕時觸發

touchcancel:     //系統取消touch事件的時候觸發,這個好像比較少用

每個觸摸事件被觸發後,會生成一個event對象,event對象裡額外包括以下三個觸摸列表:

touches:     //當前屏幕上所有手指的列表

targetTouches:      //當前dom元素上手指的列表,盡量使用這個代替touches

changedTouches:     //涉及當前事件的手指的列表,盡量使用這個代替touches

 

看到他們,我簡直心生喜悅啊,簡直了,這不就是我苦苦尋覓的東西嗎?手機再也不用擔心我的手指在干什麼了!

有了上面的這些原始事件,我們能做什麼事情呢?

1、通過touches,我們可以知道屏幕上有幾根手指,那就可以自定義一根手指做什麼,兩根手指做什麼,三根手指又做什麼;

2、我們可以通過手指在屏幕接觸的時間,來自定義輕觸,模擬點擊,長按,雙擊等等效果,當然這就比較高級了;

3、可以自定義上滑下滑左滑右滑等手勢效果;

4、可以模擬滾動條效果;

5、可以實現手指拖拽效果;

。。。。。。

等等,可以實現很多你想要實現的效果,只要你敢想,當然今天要講解的並不是移動端手勢操作這麼大的話題,今天就從手指拖拽效果這一個小點開始,以後慢慢介紹移動端的那些事。

 

回歸正題,上回我們將了一下PC端的拖拽效果,不熟悉的同學可以看這裡查看,移動端的拖拽思想跟pc端很像,區別只是寫法不一樣,具體的實現原理我就不說了,不理解的請看PC端的介紹,PC端沒有用到綁定事件,其實也是可以用綁定事件來綁定的,

移動端需要用綁定事件來觸發,具體代碼如下:

       /*     參數說明:     元素絕對定位,父級相對定位,如果父級為window,則可以不用     傳一個參數,表示父級為window,物體相對於window范圍拖動     傳2個參數,則父級為第二個參數,物體相對於父級范圍拖動     參數為id值 */ function drag(obj,parentNode){     var obj = document.getElementById(obj);     if(arguments.length == 1){         var parentNode = window.self;           var pWidth = parentNode.innerWidth,pHeight = parentNode.innerHeight;        }else{         var parentNode = document.getElementById(parentNode);         var pWidth = parentNode.clientWidth,pHeight = parentNode.clientHeight;     }     obj.addEventListener('touchstart',function(event){         //當只有一個手指時              .         if(event.touches.length == 1){             //禁止浏覽器默認事             event.preventDefault();         };         var touch = event.targetTouches[0];         var disX = touch.clientX - obj.offsetLeft,disY = touch.clientY - obj.offsetTop;         var oWidth = obj.offsetWidth,oHeight = obj.offsetHeight;           obj.addEventListener('touchmove',function(event){             var touch = event.targetTouches[0];             obj.style.left = touch.clientX - disX  + 'px';             obj.style.top = touch.clientY - disY + 'px';             //左側             if(obj.offsetLeft <=0){                 obj.style.left = 0;             };             //右側             if(obj.offsetLeft >= pWidth -oWidth){                 obj.style.left =  pWidth - oWidth + 'px';               };             //上面             if(obj.offsetTop <= 0){                 obj.style.top = 0;              };             //下面             if(obj.offsetTop >= pHeight - oHeight){                 obj.style.top =  pHeight - oHeight + 'px';              };                          });         obj.addEventListener('touchend',function(event){             obj.removeEventListener('touchmove');             obj.removeEventListener('touchend');         })     }); }

這裡我也設置了2個參數,如果只填一個參數,表示相對父級為window,物體在window內拖動,如果填2個參數,第一個參數為拖拽對象,第二個參數為相對父級,跟pc差不多,有點不同的是,pc鼠標移動和彈起時,我們作用的對象是document,是為什麼防止鼠標拖動物體外面所帶來的bug,現在是作用於obj對象上,這是為什麼呢?

原因是在移動端上,如果有一個拖拽對象相對於window,一個拖拽對象相對於自己的相對父級,現在我們是綁定事件,如果拖動後面這個拖拽對象,因為2個都是執行的,我們把拖拽事件綁定到window,就會一起觸發前面的拖拽,如果是綁定在拖拽物體上就可以避免

事件的污染問題,因為都在自身嘛!

我相信實現拖拽的方法不只這個,還有很多的方法可以實現,我也相信我寫的這個代碼並不是最優的,只能說可以用用,所以,如果哪位大神有更好的實現方法,或者是代碼有什麼錯誤的地方,萬望指正!不勝感謝!

才疏學淺,先就到這裡!後續有時間,我們在一起聊一聊移動端前端的那些事!哈哈~

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved