
- script.aculo.us 教程
- script.aculo.us - 首頁
- script.aculo.us - 概述
- script.aculo.us - 模組
- script.aculo.us - 視覺效果
- script.aculo.us - 拖放
- script.aculo.us - 排序元素
- script.aculo.us - 建立滑塊
- script.aculo.us - 自動完成
- script.aculo.us - 原地編輯
- script.aculo.us 資源
- script.aculo.us - 快速指南
- script.aculo.us - 資源
- script.aculo.us - 討論
script.aculo.us - 拖放
Web 2.0 介面最受歡迎的功能是拖放功能。幸運的是,script.aculo.us 具有內在的能力來支援拖放。
要使用 script.aculo.us 的拖動功能,您需要載入dragdrop模組,該模組還需要effects模組。因此,您對 script.aculo.us 的最小載入將如下所示
<script type = "text/javascript" src = "/javascript/prototype.js"></script> <script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,dragdrop"></script>
四處拖動物品
使用 script.aculo.us 使專案可拖動非常簡單。它需要建立Draggable類的例項,並識別要使其可拖動的元素。
Draggable 語法
new Draggable( element, options );
建構函式的第一個引數標識要使其可拖動的元素,可以是元素的id,也可以是元素的引用。第二個引數指定有關可拖動元素行為方式的可選資訊。
Draggable 選項
在建立可拖動物件時,您可以使用以下一個或多個選項。
選項 | 描述 | 示例 |
---|---|---|
revert | 如果設定為true,則元素在拖動結束時返回到其原始位置。還指定當拖動操作停止時是否會呼叫reverteffect回撥。預設為false。 | |
snap | 用於使可拖動物件捕捉到網格或約束其移動。如果為 false(預設值),則不會發生捕捉或約束。
|
|
zindex | 指定在拖動操作期間要應用於元素的 CSS z-index。預設情況下,元素的 z-index 在拖動時設定為 1000。 | |
ghosting | 布林值,確定是否應克隆可拖動物件以進行拖動,並在克隆物件被放下之前將其原件保留在原位。預設為false。 | |
constraint | 用於限制可拖動方向的字串,可以是horizontal或vertical。預設為null,表示自由移動。 | |
handle | 指定用作啟動拖動操作的控制代碼的元素。預設情況下,元素本身就是其自己的控制代碼。 | |
starteffect | 拖動開始時在元素上呼叫的效果。預設情況下,它在 0.2 秒內將元素的不透明度更改為 0.2。 | |
reverteffect | 拖動恢復時在元素上呼叫的效果。預設為平滑滑動到元素的原始位置。僅當revert為 true 時呼叫。 | |
endeffect | 拖動結束時在元素上呼叫的效果。預設情況下,它在 0.2 秒內將元素的不透明度更改為 1.0。 |
回撥選項
此外,您可以在 options 引數中使用以下任何回撥函式 -
函式 | 描述 | 示例 |
---|---|---|
onStart | 在啟動拖動時呼叫。 | |
onDrag | 當滑鼠移動時重複呼叫,如果滑鼠位置與上一次呼叫不同。 | |
change | 與 onDrag 一樣呼叫(這是首選回撥)。 | |
onEnd | 在拖動結束時呼叫。 |
除了“change”回撥之外,這些回撥中的每一個都接受兩個引數:Draggable 物件和滑鼠事件物件。
Draggable 示例
在這裡,我們定義了 5 個可拖動的元素:三個<div>元素、一個<img>元素和一個<span>元素。三個不同的<div>元素的目的是證明,無論元素最初是否具有靜態(預設)、相對或絕對的定位規則,拖動行為都不會受到影響。
<html> <head> <title>Draggables Elements</title> <script type = "text/javascript" src = "/javascript/prototype.js"></script> <script type = "text/javascript" src = "/javascript/scriptaculous.js"></script> <script type = "text/javascript"> // Take all the elements whatever you want to make Draggable. var elements = ['normaldiv', 'relativediv', 'absolutediv', 'image', 'span']; // Make all the items drag able by creating Draggable objects window.onload = function() { elements.each(function(item) { new Draggable(item, {});}); } </script> </head> <body> <div id = "normaldiv"> This is a normal div and this is dragable. </div> <div id = "relativediv" style="position: relative;"> This is a relative div and this is dragable. </div> <div id = "absolutediv" style="position: absolute;"> This is an absolute div and this dragable. </div> <br /> <img id = "image" src = "/images/scriptaculous.gif"/> <p>Let part <span id = "span" style = "color: blue;"> This is middle part</span> Yes, only middle part is dragable.</p> </body> </html>
這將產生以下結果 -
放下拖動的物品
透過在名為Droppables的名稱空間中呼叫add()方法,將元素轉換為放置目標。
Droppables 名稱空間有兩個重要的方法:add()用於建立放置目標,remove()用於刪除放置目標。
語法
以下是用於建立放置目標的 add() 方法的語法。add() 方法使用作為第二個引數傳遞的雜湊中的選項,從作為其第一個引數傳遞的元素中建立放置目標。
Droppables.add( element, options );
remove() 的語法更簡單。remove() 方法從傳遞的元素中刪除放置目標行為。
Droppables.remove(element);
選項
在建立可拖動物件時,您可以使用以下一個或多個選項。
選項 | 描述 | 示例 |
---|---|---|
Hoverclass | 放置目標處於活動狀態(有可接受的可拖動物件懸停在其上)時將新增到元素的 CSS 類名稱。預設為 null。 | |
Accept | 描述 CSS 類的字串或字串陣列。放置目標僅接受具有這些 CSS 類之一或更多 CSS 類的可拖動物件。 | |
Containment | 指定一個元素或元素陣列,該元素或元素陣列必須是可拖動專案的父級,才能被放置目標接受。預設情況下,不會應用任何包含約束。 | |
Overlap | 如果設定為“horizontal”或“vertical”,則放置目標僅對可拖動物件做出反應,如果其在給定方向上的重疊超過 50%。由 Sortables 使用,在下一章中討論。 | |
greedy | 如果為 true(預設值),則它會停止懸停其他放置目標,可拖動物件下方的放置目標將不會被搜尋。 |
回撥選項
此外,您可以在 options 引數中使用以下任何回撥函式 -
函式 | 描述 | 示例 |
---|---|---|
onHover | 指定當合適可拖動專案懸停在放置目標上時啟用的回撥函式。由 Sortables 使用,在下一章中討論。 | |
onDrop | 指定當合適可拖動元素被放置到放置目標上時呼叫的回撥函式。 |
示例
在這裡,此示例的第一部分與我們之前的示例類似,除了我們使用了 Prototype 的便捷 $A() 函式將 id 為 draggables 的元素中所有 <img> 元素的節點列表轉換為陣列。
<html> <head> <title>Drag and Drop Example</title> <script type = "text/javascript" src = "/javascript/prototype.js"></script> <script type = "text/javascript" src = "/javascript/scriptaculous.js"></script> <script type = "text/javascript"> window.onload = function() { // Make all the images draggables from draggables division. $A($('draggables').getElementsByTagName('img')).each(function(item) { new Draggable(item, {revert: true, ghosting: true}); }); Droppables.add('droparea', {hoverclass: 'hoverActive', onDrop: moveItem}); // Set drop area by default non cleared. $('droparea').cleared = false; } // The target drop area contains a snippet of instructional // text that we want to remove when the first item // is dropped into it. function moveItem( draggable,droparea){ if (!droparea.cleared) { droparea.innerHTML = ''; droparea.cleared = true; } draggable.parentNode.removeChild(draggable); droparea.appendChild(draggable); } </script> <style type = "text/css"> #draggables { width: 172px; border: 3px ridge blue; float: left; padding: 9px; } #droparea { float: left; margin-left: 16px; width: 172px; border: 3px ridge maroon; text-align: center; font-size: 24px; padding: 9px; float: left; } .hoverActive { background-color: #ffffcc; } #draggables img, #droparea img { margin: 4px; border:1px solid red; } </style> </head> <body> <div id = "draggables"> <img src = "/images/html.gif"/> <img src = "/images/css.gif"/> <img src = "/images/xhtml.gif"/> <img src = "/images/wml_logo.gif"/> <img src = "/images/javascript.gif"/> </div> <div id = "droparea"> Drag and Drop Your Images in this area </div> </body> </html>
這將產生以下結果 -