国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

MooTools教程(12):Drag.Move來實(shí)現(xiàn)拖放

2024-07-21 02:04:24
字體:
供稿:網(wǎng)友

今天我們開始第十二講,今天我們將仔細(xì)看一下drag.move——一個(gè)很強(qiáng)大的mootools類,它可以讓你給你的web應(yīng)用添加拖放功能。它的使用和我們見過的其他的插件類似:首先你使用“new”關(guān)鍵字來創(chuàng)建一個(gè)drag.move對象并賦值給一個(gè)變量,然后你再定義你的選項(xiàng)和事件。這就是全部要做的事情,不過你一定要注意一下下面的例子中描述的ie的css怪異現(xiàn)象。

基本用法

drag.move

創(chuàng)建你自己的拖動對象非常的容易。稍微看一下下面的例子就行了。注意一下我們是怎么把我們的drag.move對象的選項(xiàng)和事件從我們的drag選項(xiàng)和事件中分離出來的。drag.move類擴(kuò)展了drag類,因此它可以接受drag類的選項(xiàng)和事件。今天我們并不打算特別地講一講drag類,不過我們還是要研究一下一些有用的選項(xiàng)和事件。看一下下面的代碼,然后學(xué)習(xí)一下其中的細(xì)節(jié)。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. var mydrag = new drag.move(dragelement, {
  2.     // drag.move的選項(xiàng)
  3.     droppables: dropelement,
  4.     container: dragcontainer,
  5.     // drag的選項(xiàng)
  6.     handle: draghandle,
  7.     // drag.move 的事件
  8.     // drag.move事件會傳遞拖動的元素, 
  9.     // 還有可接納拖動元素的元素(droppable)
  10.     ondrop: function(el, dr) {
  11.         // 顯示拖動到可接納元素的元素的id
  12.         alert(dr.get('id'));
  13.     },
  14.     // drag事件
  15.     // drag事件傳遞拖動的元素
  16.     oncomplete: function(el) {
  17.         alert(el.get('id'));
  18.     }
  19. });

在這里我們稍微打斷一下……

drag.move選項(xiàng)

drag.move選項(xiàng)有兩個(gè)很重要的元素:

  • droppables——設(shè)置可接納的(droppable)元素的選擇器(這個(gè)元素將會注冊拖動相關(guān)的事件)
  • container——設(shè)置拖動元素的容器(可以保證元素一直在容器內(nèi))

設(shè)置這個(gè)選項(xiàng)非常的容易:

參考代碼: [復(fù)制代碼] [保存代碼]
  1. // 這里我們通過id定義了一個(gè)元素
  2. var dragelement = $('drag_element');
  3. // 這里我們通過class定義了一組元素
  4. var dropelements = $$('.drag_element');
  5.  
  6. var dragcontainer = $('drag_container');
  7. // 現(xiàn)在創(chuàng)建我們的drag.move對象
  8. var mydrag = new drag.move(dragelement , {
  9.     // drag.move選項(xiàng)
  10.     // 把我們上面定義的droppable賦值給droppables
  11.     droppables: dropelements ,
  12.     // 把我們的容器元素變量賦值給容器
  13.     container: dragcontainer 
  14. });

現(xiàn)在你的可接受拖動元素的元素就包含進(jìn)來了,你就有了一個(gè)可以接受拖放元素的類。

drag.move事件

這個(gè)事件可以讓你在不同的點(diǎn)去觸發(fā)一個(gè)函數(shù),比如當(dāng)你開始拖動一個(gè)對象或者你準(zhǔn)備放下它。每一個(gè)drag.move事件都將傳遞拖動元素和接受拖動元素的元素(我們一直叫做droppable)作為參數(shù)。

  • ondrop——這個(gè)事件將在一個(gè)可拖動的元素放到一個(gè)接受拖動元素的元素里面時(shí)觸發(fā)。
  • onleave——這個(gè)事件將在一個(gè)可拖動的元素離開一個(gè)接受拖動元素的元素時(shí)觸發(fā)。
  • onenter——這這個(gè)事件將在一個(gè)可拖動的元素進(jìn)入一個(gè)接受拖動元素的元素時(shí)觸發(fā)。

這些事件中的每一個(gè)事件都將調(diào)用一個(gè)函數(shù),每個(gè)函數(shù)都將在相應(yīng)的事件觸發(fā)時(shí)調(diào)用。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. var dragcontainer = $('drag_container');
  2.  
  3. var mydrag = new drag.move(dragelement , {
  4.     // drag.move選項(xiàng)
  5.     droppables: dropelements ,
  6.     container: dragcontainer ,
  7.     // drag.move事件
  8.     // drag.move函數(shù)將傳遞可拖動的元素(這個(gè)例子中是'el')
  9.     // 還有接受拖動元素的元素(這個(gè)例子中是'dr')
  10.     ondrop: function(el, dr) {
  11.         // 下面這句的意思大概是:
  12.         // 如果你拖動的元素不是到了可以接受拖動元素的元素的范圍內(nèi)
  13.         if (!dr) { 
  14.             // 什么都不做
  15.         }
  16.         // 否則(從邏輯上講,
  17.         // 如果你拖動的那個(gè)的元素到了可接受拖動元素的元素范圍內(nèi))
  18.         // 做這一件事件
  19.         else {
  20.             // 在這里做一些事情
  21.         };
  22.     },
  23.     onleave: function(el, dr) {
  24.         // 這個(gè)事件將在拖動的元素離開可接受拖動對象的元素時(shí)觸發(fā)
  25.     },
  26.     onenter: function(el, dr) {
  27.         // 這個(gè)事件將在拖動的元素進(jìn)入可接受拖動對象的元素時(shí)觸發(fā)
  28.     }
  29. });

一些drag事件和選項(xiàng)

對于drag,有許多選項(xiàng)和事件,不過這里我們只看一小部分。

snap——選項(xiàng)

snap選項(xiàng)可以讓你設(shè)置用戶的鼠標(biāo)至少移動多少個(gè)像素后開始拖動。默認(rèn)是6,你額可以設(shè)置為任何數(shù)字或者值為數(shù)字的變量。很明顯,這里有一些合理的限制(比如設(shè)置snap為1000將毫無用處),但是這在定制你的用戶體驗(yàn)時(shí)將會派上用場。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. var mydrag = new drag.move(dragelement , {
  2.     // drag選項(xiàng)
  3.     snap: 10 
  4. });

handle——選項(xiàng)

handle可以給你的拖動元素添加一個(gè)控制對象。這個(gè)控制對象將成為唯一的可以接受“抓取”(拖動)的元素,從而允許你使用其他的元素做一些其他的事情。要設(shè)置一個(gè)控制對象,只需調(diào)用這個(gè)元素就可以了。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. // 這里我們使用了一個(gè)類選擇器建立了一個(gè)數(shù)組
  2. // 這將使得我們很輕易地添加多個(gè)控制對象,如果我們決定要有多個(gè)可接受拖動元素的元素
  3. var draghandle = $('drag_handle');
  4. var mydrag = new drag.move(dragelement , {
  5.     // drag選項(xiàng)
  6.     handle: draghandle 
  7. });

onstart——事件

onstart和它名字一樣,當(dāng)開始拖動時(shí)觸發(fā)這個(gè)事件。如果你設(shè)置了一個(gè)很大的snap,這個(gè)事件將不會觸發(fā)直到鼠標(biāo)離開元素有指定的snap值那么遠(yuǎn)。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. var mydrag = new drag.move(dragelement , {
  2.     // drag選項(xiàng)
  3.     // drag選項(xiàng)將把拖動的元素作為參數(shù)傳遞
  4.     onstart: function(el) {
  5.         // 在這里放置開始拖動時(shí)你要做的任何事情
  6.     }
  7. });

ondarg——事件

這個(gè)ondrag事件,將會在你拖動一個(gè)元素時(shí)連續(xù)地觸發(fā)。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. var mydrag = new drag.move(dragelement , {
  2.     // drag選項(xiàng)
  3.     // drag選項(xiàng)將把拖動的元素作為參數(shù)傳遞
  4.     ondrag: function(el) {
  5.         // 在這里放置開始拖動時(shí)你要做的任何事情
  6.     }
  7. });

oncomplete——事件

最后是oncomplete事件,將在你放下一個(gè)拖動元素時(shí)觸發(fā),而不管你是不是把它放到了一個(gè)可以接受拖動元素的元素內(nèi)部。

參考代碼: [復(fù)制代碼] [保存代碼]
  1. var mydrag = new drag.move(dragelement , {
  2.     // drag選項(xiàng)
  3.     // drag選項(xiàng)將把拖動的元素作為參數(shù)傳遞
  4.     oncomplete: function(el) {
  5.         // 在這里放置開始拖動時(shí)你要做的任何事情
  6.     }
  7. });

代碼示例

讓我們把剛才的這些代碼以一種方式組合起來,當(dāng)不同的事件觸發(fā)時(shí),我們突出顯示不同的內(nèi)容,并且我們使用上面我們看到的選項(xiàng)來配置我們的drag.move對象:

參考代碼: [復(fù)制代碼] [保存代碼]
  1. window.addevent('domready'function() {
  2.     var dragelement = $('drag_me');
  3.     var dragcontainer = $('drag_cont');
  4.     var draghandle = $('drag_me_handle');
  5.     var dropelement = $$('.draggable');
  6.     var startel = $('start');
  7.     var completeel = $('complete');
  8.     var dragindicatorel = $('drag_ind');
  9.     var enterdrop = $('enter');
  10.     var leavedrop = $('leave');
  11.     var dropdrop = $('drop_in_droppable'); 
  12.  
  13.     var mydrag = new drag.move(dragelement, {
  14.     // drag.move選項(xiàng)
  15.     droppables: dropelement,
  16.     container: dragcontainer,
  17.     // drag選項(xiàng)
  18.     handle: draghandle,
  19.     // drag.move事件
  20.     ondrop: function(el, dr) {
  21.         if (!dr) { }
  22.  
  23.         else {
  24.             dropdrop.highlight('#fb911c'); //橙色閃爍
  25.             el.highlight('#fff'); //白色閃爍
  26.             dr.highlight('#667c4a'); //綠色閃爍
  27.         };
  28.     },
  29.     onleave: function(el, dr) {
  30.         leavedrop.highlight('#fb911c'); //橙色閃爍
  31.     },
  32.     onenter: function(el, dr) {
  33.         enterdrop.highlight('#fb911c'); //橙色閃爍
  34.     },
  35.     // drag事件
  36.     onstart: function(el) {
  37.         startel.highlight('#fb911c'); //橙色閃爍
  38.     },
  39.     ondrag: function(el) {
  40.         dragindicatorel.highlight('#fb911c'); //橙色閃爍
  41.     },
  42.     oncomplete: function(el) {
  43.         completeel.highlight('#fb911c'); //橙色閃爍
  44.     }
  45.     });
  46. });

注意一下css:在ie中,為了能夠適合地注冊drag.move的容器,你需要在下面的css中明確地指出它的位置。最重要的一點(diǎn)是你需要記住設(shè)置容器的位置為“position: relative”,而設(shè)置可拖動的元素的位置為“position: absolute”,然后一定要設(shè)置可拖動元素的left和top屬性。現(xiàn)在,如果你正在為其他瀏覽器構(gòu)建并且遵循此規(guī)則,你可以忽略這一部分:

參考代碼: [復(fù)制代碼] [保存代碼]
  1. /* 下面這個(gè)定義通常是不錯(cuò)的主意 */
  2. body {
  3.     margin0
  4.     padding0
  5. }
  6.  
  7. /* 確保可拖動的元素有"position: absolute" */
  8. /* 并設(shè)置開始時(shí)的left和top屬性 */
  9. #drag_me {
  10.     width100px
  11.     height100px
  12.     background-color: #333
  13.     positionabsolute
  14.     top0
  15.     left0
  16. }
  17.  
  18.  
  19. #drop_here {
  20.     width200px
  21.     height200px
  22.     background-color: #eee
  23. }
  24.  
  25. /* 確保拖動的容器有“position:relative” */
  26. #drag_cont {
  27.     background-color: #ccc  
  28.     height600px 
  29.     width500px
  30.     positionrelative
  31.     margin-top100px
  32.     margin-left100px
  33.  
  34. #drag_me_handle {
  35.     width100%
  36.     heightauto
  37.     background-color: #666
  38. }
  39.  
  40. #drag_me_handle span {
  41.     displayblock
  42.     padding5px
  43. }
  44.  
  45.  
  46. .indicator {
  47.     width100%
  48.     heightauto
  49.     background-color: #0066ff
  50.     border-bottom1px solid #eee
  51. }
  52.  
  53. .indicator span {
  54.     padding10px
  55.     displayblock
  56. }
  57.  
  58. .draggable {
  59.     width200px
  60.     height200px
  61.     background-color: blue
  62. }

現(xiàn)在我們再建立我們的html:

參考代碼: [復(fù)制代碼] [保存代碼]
  1. <div id="drag_cont">
  2.     <div id="start" class="indicator"><span>拖動開始</span></div>
  3.     <div id="drag_ind" class="indicator"><span>拖動中</span></div>
  4.     <div id="complete" class="indicator"><span>拖動結(jié)束</span></div>
  5.     <div id="enter" class="indicator"><span>進(jìn)入了droppable元素</span></div>
  6.     <div id="leave" class="indicator"><span>離開了droppable元素</span></div>
  7.     <div id="drop_in_droppable" class="indicator"><span>放進(jìn)了droppable元素</span></div>
  8.     <div id="drag_me">
  9.     <div id="drag_me_handle"><span>控制對象</span></div>
  10.     </div>
  11.  
  12.     <div id="drop_here" class="draggable"> </div>
  13. </div>

拖動開始
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 望都县| 罗田县| 栾川县| 阳山县| 基隆市| 个旧市| 南充市| 滁州市| 仁化县| 清远市| 甘南县| 桃江县| 贵溪市| 东台市| 名山县| 密山市| 景泰县| 咸阳市| 察隅县| 宜兰县| 阿拉善左旗| 凤冈县| 绥中县| 潜山县| 都江堰市| 民丰县| 青川县| 渝北区| 娄烦县| 尼勒克县| 栾川县| 县级市| 临潭县| 玛曲县| 独山县| 望江县| 雷州市| 隆子县| 梅河口市| 铜梁县| 漠河县|