- 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 - 快速指南
script.aculo.us - 概述
什麼是 script.aculo.us?
script.aculo.us 是一個基於Prototype JavaScript 框架構建的 JavaScript 庫,它增強了 GUI 併為 Web 使用者提供了 Web 2.0 體驗。
script.aculo.us 由 Thomas Fuchs 開發,並於 2005 年 6 月首次公開發布。
script.aculo.us 透過文件物件模型 (DOM) 提供動態視覺效果和使用者介面元素。
Prototype JavaScript 框架是由 Sam Stephenson 建立的 JavaScript 框架,它提供了一個 Ajax 框架和其他實用程式。
如何安裝 script.aculo.us?
安裝 script.aculo.us 庫非常簡單。它可以透過三個簡單的步驟設定:
訪問下載頁面下載最新版本的便捷安裝包。
解壓下載的安裝包,您將找到以下資料夾:
lib - 包含 prototype.js 檔案。
src - 包含以下 8 個檔案:
- builder.js
- controls.js
- dragdrop.js
- effects.js
- scriptaculous.js
- slider.js
- sound.js
- unittest.js
test - 包含用於測試目的的檔案。
CHANGELOG - 包含所有更改歷史記錄的檔案。
MIT-LICENSE - 描述許可條款的檔案。
README - 描述安裝包(包括安裝說明)的檔案。
現在將以下檔案放入網站目錄中,例如 /javascript。
- builder.js
- controls.js
- dragdrop.js
- effects.js
- scriptaculous.js
- slider.js
- prototype.js
注意 - sound.js 和 unittest.js 檔案是可選的
如何使用 script.aculo.us 庫?
現在您可以按如下方式包含script.aculo.us指令碼:
<html>
<head>
<title>script.aculo.us examples</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js"></script >
</head>
<body>
........
</body>
</html>
預設情況下,scriptaculous.js 載入所有其他 JavaScript 檔案,這些檔案對於效果、拖放、滑塊以及所有其他 script.aculo.us 功能都是必需的。
如果您不需要所有功能,您可以透過以逗號分隔的列表指定它們來限制載入的附加指令碼,例如:
<html>
<head>
<title>script.aculo.us examples</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,dragdrop"></script>
</head>
<body>
........
</body>
</html>
可以指定的指令碼:
- effects
- dragdrop
- builder
- controls
- slider
注意 - 一些指令碼需要載入其他指令碼才能正常執行。
如何呼叫 script.aculo.us 庫函式?
要呼叫 script.aculo.us 庫函式,請使用如下所示的 HTML 指令碼標籤:
<html>
<head>
<title>script.aculo.us examples</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,dragdrop"></script>
<script type = "text/javascript" language = "javascript">
// <![CDATA[
function action(element){
new Effect.Highlight(element,
{ startcolor: "#ff0000", endcolor: "#0000ff", restorecolor: "#00ff00", duration: 8 });
}
// ]]>
</script>
</head>
<body>
<div id = "id" onclick = "action(this);">
Click on this and see how it change its color.
</div>
</body>
</html>
這裡我們使用 Effect 模組,並將Highlight效果應用於元素。
這將產生以下結果:
另一種簡單的方法是在事件處理程式中呼叫任何模組的函式,如下所示:
<html>
<head>
<title>script.aculo.us examples</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,dragdrop"></script>
</head>
<body>
<div onclick = "new Effect.BlindUp(this, {duration: 5})">
Click here if you want this to go slooooow.
</div>
</body>
</html>
這將產生以下結果:
script.aculo.us - 模組
script.aculo.us 分為多個模組,每個模組都有自己的 JavaScript 檔案。這些模組在此處解釋:
效果
效果模組包含超過 25 種視覺效果和 7 種過渡模式。
拖放
您將使用拖放模組使任何元素可拖動,將其變成一個放置區域,甚至使整個一系列元素可排序,以便您可以透過拖放來重新排列它們。
滑塊
滑塊是一種小型軌道或滑軌,您可以沿著它滑動滑塊。它轉換為數值。使用 script.aculo.us,您可以建立具有大量控制功能的滑塊。
自動完成
自動完成控制元件允許 Google-Suggest 風格的、本地和伺服器驅動的自動完成文字輸入欄位。
原地編輯
您可以透過簡單地單擊來使任何文字或專案集合原地可編輯。
構建器
用於在 JavaScript 中構建 DOM 片段的輔助工具。這是一個開發者工具,可以大大簡化 DOM 建立。
聲音
1.7.1 版引入了聲音系統,使您可以輕鬆播放聲音、將它們排隊、使用多個軌道等等。
script.aculo.us - 視覺化效果
script.aculo.us 效果分為兩組:
核心效果
以下六種核心效果是 script.aculo.us 視覺化效果 JavaScript 庫的基礎。
所有核心效果都支援各種常用引數以及特定於效果的引數,並且這些效果名稱區分大小寫。
本教程中討論了所有特定於效果的常用引數以及效果。
組合效果
所有組合效果都基於五個核心效果,並被認為是允許您編寫自己的效果的示例。
通常,這些效果依賴於其他效果的並行、同步執行。這種執行很容易實現,因此建立您自己的組合效果非常容易。以下是組合效果列表:
此外,還有一個Effect.toggle實用程式方法,用於您希望使用 Appear/Fade、Slide 或 Blind 動畫暫時顯示的元素。
效果所需的庫檔案
要使用 script.aculo.us 的效果功能,您需要載入 effects 模組。因此,您的 script.aculo.us 最小載入將如下所示
<html>
<head>
<title>script.aculo.us effects</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/"effects.j"></script>
</head>
<body>
...
</body>
</html>
呼叫效果函式
啟動核心效果的正確方法通常是使用new運算子。根據您的喜好,您可以使用兩種語法之一:
語法
new Effect.EffectName(element [, requiredArgs ] [ , options ] )
OR
element.visualEffect('EffectName' [, requiredArgs ] [,options])
這兩種語法在技術上是等效的。兩者之間的選擇主要取決於您個人的程式碼美感。
示例
這裡有兩個等效的呼叫,您可以看到語法是如何相關的,它們是完全可以互換的:
new Effect.Scale('title', 200, { scaleY: false, scaleContent: false });
OR
$('title' ).visualEffect('Scale', 200, { scaleY:false, scaleContent:false });
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 類的可拖動元素。 | |
| 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>
這將產生以下結果:
script.aculo.us - 元素排序
很多時候,您需要為使用者提供透過拖拽重新排序元素(例如列表中的專案)的功能。
如果沒有拖放功能,重新排序將成為噩夢,但是script.aculo.us透過Sortable類提供了開箱即用的擴充套件重新排序支援。要使其成為Sortable的元素,需要將其傳遞到Sortable名稱空間中的create()方法。
Sortable由容器元素中的專案元素組成。當您建立一個新的Sortable時,它會負責建立相應的Draggables和Droppables。
要使用script.aculo.us的Sortable功能,您需要載入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>
Sortable語法
以下是建立可排序專案的create()方法的語法。create()方法採用容器元素的id,並根據傳遞的選項對其進行排序。
Sortable.create('id_of_container',[options]);
使用Sortable.destroy完全刪除由Sortable.create建立的Sortable的所有事件處理程式和引用。
注意 - 如果引用的元素已經是Sortable,則呼叫Sortable.create會隱式呼叫Sortable.destroy。以下是呼叫destroy函式的簡單語法。
Sortable.destroy( element );
Sortable選項
在建立Sortable物件時,您可以使用以下一個或多個選項。
| 序號 | 選項及說明 |
|---|---|
| 1 |
tag 指定可排序容器內可透過拖放進行排序的元素的型別。預設為'li'。 |
| 2 |
only 指定一個CSS類名或類名陣列,可拖動專案必須擁有該類名才能被放置目標接受。這類似於Draggable的accept選項。預設情況下,不應用任何類名約束。 |
| 3 |
overlap false、horizontal或vertical之一。控制觸發重新排序的點。預設為vertical。 |
| 4 |
constraint false、horizontal或vertical之一。約束拖動可排序元素的移動。預設為vertical。 |
| 5 |
containment 啟用在Sortables之間拖放。接受元素或元素ID的陣列。重要提示:為了確保可以在容器之間進行雙向拖動,請在容器元素之後放置所有Sortable.create呼叫。 |
| 6 |
handle 與同名的Draggable選項相同,指定用於啟動拖動操作的元素。預設情況下,每個元素都是它自己的控制代碼。 |
| 7 |
hoverclass 指定一個CSS類名,當拖動元素經過非拖動可排序元素時應用於這些元素。預設情況下,不應用任何CSS類名。 |
| 8 |
ghosting 與同名的Draggable選項類似,如果為true,此選項會導致拖動操作的原始元素保持原位,而元素的半透明副本則隨滑鼠指標一起移動。預設為false。此選項不適用於IE。 |
| 9 | dropOnEmpty 如果為true,則允許將可排序元素放置到空列表中。預設為false。 |
| 10 |
scroll 如果由於設定了CSS overflow屬性而使可排序容器擁有捲軸,則此選項啟用超出可見元素的列表自動滾動。預設為false。 |
| 12 |
scrollSensitivity 啟用滾動時,它會調整觸發滾動的點。預設為20。 |
| 13 |
scrollSpeed 啟用滾動時,它會調整滾動速度。預設為15。 |
| 14 |
tree 如果為true,則啟用對可排序元素內的子元素進行排序。預設為false。 |
| 15 |
treeTag 如果啟用了tree選項,則指定其子元素參與可排序行為的容器元素型別。預設為'ul'。 |
您可以在options引數中提供以下回調函式:
| 序號 | 選項及說明 |
|---|---|
| 1 |
onChange 拖動時排序順序發生變化時呼叫的函式。從一個Sortable拖動到另一個Sortable時,將在每個Sortable上呼叫一次回撥函式。將受影響的元素作為其引數。 |
| 2 |
onUpdate 導致元素順序發生變化的拖動操作終止時呼叫的函式。 |
排序示例
此演示已驗證可在IE 6.0中執行。它也適用於最新版本的Firefox。
<html>
<head>
<title>Sorting 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() {
Sortable.create('namelist',{tag:'li'});
}
</script>
<style type = "text/css">
li { cursor: move; }
</style>
</head>
<body>
<p>Drag and drop list items to sort them out</p>
<ul id = "namelist">
<li>Physics</li>
<li>Chemistry</li>
<li>Maths</li>
<li>Botany</li>
<li>Sociology</li>
<li>English</li>
<li>Hindi</li>
<li>Sanskrit</li>
</ul>
</body>
</html>
使用我們的線上編譯器,更好地理解上面表格中討論的不同選項的程式碼。
這將產生以下結果:
注意tag:'li'的使用。類似地,您可以對<div>中提供的以下影像列表進行排序:
<html>
<head>
<title>Sorting 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() {
Sortable.create('imagelist',{tag:'div'});
}
</script>
<style type = "text/css">
div { cursor: move; }
img { border: 1px solid red; margin:5px; }
</style>
</head>
<body>
<p>Drag and drop list images to re-arrange them</p>
<div id = "imagelist">
<div><img src = "/images/wml_logo.gif" alt="WML Logo" /></div>
<div><img src = "/images/javascript.gif" alt="JS" /></div>
<div><img src = "/images/html.gif" alt="HTML" /></div>
<div><img src = "/images/css.gif" alt="CSS" /></div>
</div>
</body>
</html>
這將產生以下結果:
序列化可排序元素
Sortable物件還提供了一個函式Sortable.serialize(),用於將Sortable序列化為適合HTTP GET或POST請求的格式。這可以用於透過Ajax呼叫提交Sortable的順序。
語法
Sortable.serialize(element, options);
選項
在建立Sortable物件時,您可以使用以下一個或多個選項。
| 序號 | 選項及說明 |
|---|---|
| 1 | tag 設定將要序列化的標籤型別。這將類似於Sortable.create中使用的型別。 |
| 2 |
name 設定用於建立鍵/值對以在HTTP GET/POST格式中進行序列化的鍵的名稱。因此,如果name為xyz,則查詢字串將如下所示: xyz[]=value1 & xyz[]=value2 & xyz[]=value3 其中值來自子元素,其順序與其在容器中的顯示順序相同。 |
序列化示例
在此示例中,序列化的輸出將只給出列表項ID中下劃線後的數字。
要嘗試,請將列表保持其原始順序,按按鈕檢視列表的序列化結果。現在,重新排序一些元素,然後再次單擊按鈕。
<html>
<head>
<title>Sorting 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() {
Sortable.create('namelist',{tag:'li'});
}
function serialize(container, name){
$('display').innerHTML = 'Serialization of ' +
$(container).id +
' is: <br/><pre>' +
Sortable.serialize( container,{ name:name} ) +
'</pre>';
}
</script>
<style type = "text/css">
li { cursor: move; }
</style>
</head>
<body>
<p>Drag and drop list items to sort them out properly</p>
<ul id = "namelist">
<li id = "list1_1">Physics</li>
<li id = "list1_2">Chemistry</li>
<li id = "list1_3">Maths</li>
<li id = "list1_4">Botany</li>
<li id = "list1_5">Sociology</li>
<li id = "list1_6">English</li>
</ul>
<p>Click following button to see serialized list which can be
passed to backend script, like PHP, AJAX or CGI</p>
<button type = "button" value = "Click Me"
onclick = "serialize('namelist', 'list')"> Serialize
</button>
<div id = "display" style = "clear:both;padding-top:32px"></div>
</body>
</html>
這將產生以下結果:
在Sortables之間移動專案
以下示例顯示如何將專案從一個列表移動到另一個列表。
<html>
<head>
<title>Sorting 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() {
Sortable.create('List1', {containment: ['List1','List2'], dropOnEmpty: true});
Sortable.create('List2', {containment: ['List1','List2'], dropOnEmpty: true});
}
</script>
<style type = "text/css">
li { cursor: move; }
ul {
width: 88px;
border: 1px solid blue;
padding: 3px 3px 3px 20px;
}
</style>
</head>
<body>
<p>Drag and drop list items from one list to another list</p>
<div style = "float:left">
<ul id = "List1">
<li>Physics</li>
<li>Chemistry</li>
<li>Botany</li>
</ul>
</div>
<div style = "float:left;margin-left:32px">
<ul id = "List2">
<li>Arts</li>
<li>Politics</li>
<li>Economics</li>
<li>History</li>
<li>Sociology</li>
</ul>
</div>
</body>
</html>
請注意,每個容器的containment選項都將兩個容器列為包含元素。透過這樣做,我們使子元素能夠在其父級的上下文中進行排序;它還使它們能夠在這兩個容器之間移動。
我們為兩個列表都將dropOnEmpty設定為true。要檢視此選項對該列表的影響,請將所有元素從一個列表移動到另一個列表,以便一個列表為空。您會發現它允許將元素放置到空列表中。
這將產生以下結果:
繫結到Ajax
當然,onUpdate是觸發對伺服器的Ajax通知的主要候選者,例如,當用戶重新排序待辦事項列表或其他一些資料集時。結合Ajax.Request和Sortable.serialize使即時永續性足夠簡單:
<html>
<head>
<title>Sorting 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() {
Sortable.create('List' ,
{
onUpdate: function() {
new Ajax.Request('file.php',
{
method: "post",
parameters: {data:Sortable.serialize('List')}
}
);
}
}
);
}
</script>
<style type = "text/css">
li { cursor: move; }
ul {
width: 88px;
border: 1px solid blue;
padding: 3px 3px 3px 20px;
}
</style>
</head>
<body>
<p>When you will change the order, AJAX Request
will be made automatically.</p>
<div style = "float:left">
<ul id = "List">
<li id = "List_1">Physics</li>
<li id = "List_2">Chemistry</li>
<li id = "List_3">Maths</li>
<li id = "List_4">Botany</li>
</ul>
</div>
</body>
</html>
Sortable.serialize建立類似這樣的字串:List[] = 1 & List[] = 2 & List[] = 3 &List[] = 4,其中數字是列表元素ID在下劃線後的識別符號部分。
現在我們需要編寫file.php程式碼,它將解析釋出的資料為parse_str($_POST['data']);,您可以對這些排序後的資料執行任何操作。
要了解有關AJAX的更多資訊,請參閱我們簡單的Ajax教程。
script.aculo.us - 建立滑塊
滑塊是細長的軌道,上面有一個或多個可以沿軌道拖動的控制代碼。
滑塊的目標是提供一種替代的輸入方法來定義數值;滑塊表示一個範圍,沿軌道滑動控制代碼定義此範圍內的值。
滑塊可以是水平方向或垂直方向。水平方向時,軌道的左端通常表示最小值,而垂直方向時,滑塊的底部通常表示最小值。
要使用script.aculo.us的滑塊功能,您需要載入slider.js模組和prototype.js模組。因此,您載入script.aculo.us的最小程式碼如下所示:
<script type = "text/javascript" src = "/javascript/prototype.js"></script> <script type = "text/javascript" src = "/javascript/scriptaculous.js?load=slider">< /script>
建立滑塊控制元件
建立滑塊通常是透過在頁面DOM中的一些現有元素上構造自定義物件來實現的。您在這裡需要兩個元素,一個用於控制代碼,一個用於軌道,如下所示:
new Control.Slider(handle, track [ , options ] );
軌道元素通常是<div>,控制代碼元素是軌道元素內的<div>或<span>。通常情況下,兩者都可以透過其id=或直接DOM引用來傳遞。
滑塊選項
在建立Slider物件時,您可以使用以下一個或多個選項。
| 序號 | 選項及說明 |
|---|---|
| 1 |
Axis 將控制元件的方向定義為horizontal或vertical。預設方向為horizontal。 |
| 2 |
Range 將滑塊值的範圍定義為Prototype ObjectRange例項。預設為0到1。 |
| 3 |
Values 定義滑塊可以獲取的離散值集。如果省略,則可以設定範圍內的所有值。 |
| 4 |
sliderValue 設定滑塊的初始值。如果省略,則由滑塊最左邊(或最頂部)邊緣表示的值為初始值。 |
| 5 |
Disabled 如果為true,則建立一個最初停用的滑塊。顯然預設為false。 |
| 6 |
setValue 將更新滑塊的值,從而將滑塊控制代碼移動到適當的位置。 |
| 7 |
setDisabled 將滑塊設定為停用狀態(disabled = true)。 |
| 8 |
setEnabled 將滑塊設定為啟用狀態(disabled = false)。 |
您可以在options引數中提供以下回調函式:
| 序號 | 選項及說明 |
|---|---|
| 1 |
onSlide 拖動移動滑塊時呼叫。呼叫的函式將滑塊值作為其引數。 |
| 2 |
onChange 滑塊完成移動或其值已透過setSlider Value函式更改時呼叫。呼叫的函式將滑塊值作為其引數。 |
滑塊示例
<html>
<head>
<title>Sliders Example</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = slider" ></script>
<script type = "text/javascript">
window.onload = function() {
new Control.Slider('handle1' , 'track1',{
range: $R(1,100), values: [1,25,50,75,100], sliderValue: 1, onChange: function(v){
$('changed').innerHTML = 'Changed Value : '+v;
},
onSlide: function(v) {
$('sliding').innerHTML = 'Sliding Value: '+v;
}
});
new Control.Slider('handle2' , 'track2', {
range: $R(1,100),
axis:'vertical',
sliderValue: 1,
onChange: function(v){
$('changed').innerHTML = 'Changed Value : '+v;
}
onSlide: function(v) {
$('sliding').innerHTML = 'Sliding Value: '+v;
}
});
}
</script>
<style type = "text/css">
h1{ font-size: 1.5em; }
.track {
background-color: #aaa;
position: relative;
height: 0.5em; width: 10em;
cursor: pointer; z-index: 0;
}
.handle {
background-color: red;
position: absolute;
height: 1em; width: 0.25em; top: -0.25em;
cursor: move; z-index: 2;
}
.track.vertical {
width: 0.5em; height: 10em;
}
.track.vertical .handle {
width: 1em; height: 0.25em; top: 0; left: -0.25em;
}
</style>
</head>
<body>
<h1>Simple sliders</h1>
<div id = "track1" class = "track" style = "width: 20em;" >
<div id = "handle1" class = "handle" style = "width: 0.5em;" ></div>
</div>
<p id = "sliding" ></p>
<p id = "changed" ></p>
<div id = "track2" class = "track vertical" style = "position: absolute; left: 25em; top: 3em;" >
<div id = "handle2" class = "handle" style = "height: 0.5em;" ></div>
</div>
</body>
</html>
需要注意的幾點:
您可以使用CSS更改任何滑塊的滑塊影像。使用CSS屬性background-image: url(track.gif)和background-repeat: no-repeat設定滑塊影像。
可以使用$R(minValue, MaxValue)指定範圍值。例如,$R(1, 100)。
可以使用特定值指定範圍值。例如values: [1,25,50,75,100]。在這種情況下,滑塊只能在移動控制代碼時獲得列出的離散值。
在任何時候,都可以透過呼叫滑塊例項的setValue()方法以程式設計方式設定滑塊的值,例如:sliderInstance.setValue(50);
這將產生以下結果:
script.aculo.us - 自動完成
開箱即用,script.aculo.us支援兩種自動完成源:
- 遠端源(透過Ajax獲取),
- 本地源(網頁尾本中的字串陣列)。
根據您計劃使用的源,您將分別例項化Ajax.Autocompleter或Autocompleter.Local。儘管配備了特定選項,但這兩種物件共享大量功能並提供統一的使用者體驗。
構建這些物件時,您始終需要傳遞四件事:
您要使其自動完成的文字欄位。通常,您可以傳遞欄位本身或其id=屬性的值。
自動完成選項的容器,最終將包含一個<ul></li>選項列表供選擇。同樣,直接傳遞元素或其id=。此元素通常是一個簡單的<div>。
資料來源,根據源型別,將表示為JavaScript字串陣列或遠端源的URL。
最後是選項。與往常一樣,它們作為某種雜湊提供,並且兩個自動完成物件都可以使用沒有自定義選項;所有內容都有合適的預設值。
要使用script.aculo.us的自動完成功能,您需要載入controls.js和effects.js模組以及prototype.js模組。因此,您載入script.aculo.us的最小程式碼如下所示:
<script type = "text/javascript" src = "/javascript/prototype.js"></script> <script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,controls"></script>
建立Ajax自動完成器
構造語法如下:
new Ajax.Autocompleter(element, container, url [ , options ] )
Ajax.Autocompleter 建構函式接受四個引數:
需要填充資料選擇的文字欄位的元素名稱或引用。
用作控制元件選項選單的 <div> 元素的元素名稱或引用。
提供選擇的伺服器端資源的 URL。
常用的選項雜湊表。
選項
建立 Ajax.Autocompleter 物件時,您可以使用以下一個或多個選項。
| 序號 | 選項及說明 |
|---|---|
| 1 |
paramName 包含釋出到伺服器端資源的文字欄位內容的查詢引數名稱。預設為文字欄位的名稱。 |
| 2 |
minChars 必須輸入的字元數,才能觸發對選擇的伺服器端請求。預設為 1。 |
| 3 | Frequency 內部檢查是否應將請求釋出到伺服器端資源的間隔(秒)。預設為 0.4。 |
| 4 |
Indicator 在進行對選擇的伺服器端請求期間要顯示的元素的 ID 或引用。如果省略,則不顯示任何元素。 |
| 5 |
Parameters 包含要傳遞到伺服器端資源的額外查詢引數的文字字串。 |
| 6 |
updateElement 當用戶選擇從伺服器返回的選項之一時觸發的回撥函式,它替換更新文字欄位中所選值的內部函式。 |
| 7 |
afterUpdateElement 在執行 updateElement 函式後觸發的回撥函式。 |
| 8 |
Tokens 單個文字字串或文字字串陣列,指示用作分隔符的標記,以允許將多個元素輸入文字欄位,每個元素都可以單獨自動完成。 |
示例
<html>
<head>
<title>Simple Ajax Auto-completer Example</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,controls"></script>
<script type = "text/javascript">
window.onload = function() {
new Ajax.Autocompleter(
'autoCompleteTextField',
'autoCompleteMenu',
'/script.aculo.us/serverSideScript.php', {}
);
}
</script>
</head>
<body>
<p>Type something in this box and then select suggested option from the list </p>
<div>
<label>Text field:</label>
<input type = "text" id = "autoCompleteTextField"/>
<div id = "autoCompleteMenu"></div>
</div>
</body>
</html>
現在,我們需要一個伺服器端來訪問此頁面並提供資料來源 URL (serverSideScript.php)。您需要在此指令碼中保留完整的邏輯來顯示建議。
例如,我們在 serverSideScript.php 中保留一個簡單的 HTML 文字。您可以使用 CGI、PHP、Ruby 或任何其他伺服器端指令碼編寫指令碼,以選擇合適的建議並將其格式化為 <ul><li>…</li></ul> 的形式,並將它們傳遞迴呼叫程式。
<ul> <li>One</li> <li>Two</li> <li>Three</li> <li>Four</li> <li>Five</li> <li>Six</li> </ul>
這將產生以下結果:
使用上表中討論的不同選項。
建立本地自動完成器
建立本地自動完成器幾乎與我們在上一節中討論的建立 Ajax 自動完成器相同。
主要區別在於如何向控制元件標識用於自動完成的後備資料集。
對於 Ajax 自動完成器,我們提供了伺服器端資源的 URL,該資源將在給出使用者輸入的情況下執行必要的篩選,並僅返回匹配的資料元素。對於本地自動完成器,我們改為提供完整的資料元素列表,作為 JavaScript 字串陣列,控制元件本身在其自己的客戶端程式碼中執行篩選操作。
整個構造語法實際上如下所示:
new Autocompleter.Local(field, container, dataSource [ , options ] );
Autocompleter.Local 的建構函式接受四個引數:
需要填充資料選擇的文字欄位的元素名稱或引用。
用作控制元件選項選單的 <div> 元素的元素名稱或引用。
對於第三個引數,我們不使用伺服器輔助自動完成器中的 URL,而是提供一個小的字串陣列,其中包含所有可能的值。
常用的選項雜湊表。
選項
建立 Autocompleter.Local 物件時,您可以使用以下一個或多個選項。
| 序號 | 選項及說明 |
|---|---|
| 1 |
Choices 要顯示的選擇數。預設為 10。 |
| 2 | partialSearch 啟用匹配嵌入在完成字串中的單詞的開頭。預設為 true。 |
| 3 |
fullSearch 啟用匹配完成字串中的任何位置。預設為 false。 |
| 4 |
partialChars 定義在嘗試任何部分匹配之前必須鍵入的字元數。預設為 2。 |
| 5 |
ignoreCase 匹配時忽略大小寫。預設為 true。 |
示例
<html>
<head>
<title>Simple Ajax Auto-completer Example</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,controls"></script>
<script type = "text/javascript">
window.onload = function() {
new Autocompleter.Local(
'autoCompleteTextField',
'autoCompleteMenu',
['abcdef','abcdeg','xyzabcefg', 'tybabdefg','acdefg'],
{ignoreCase:false}
);
}
</script>
</head>
<body>
<p>Type something in this box and then select suggested option from the list </p>
<div>
<label>Text field:</label>
<input type = "text" id = "autoCompleteTextField"/>
<div id = "autoCompleteMenu"></div>
</div>
</body>
</html>
顯示後,在文字框中鍵入字元“a”後,它會顯示所有匹配的選項。
使用我們的線上編譯器,更好地理解上面表格中討論的不同選項的程式碼。
這將產生以下結果:
script.aculo.us - 原地編輯
就地編輯是 Web 2.0 風格應用程式的標誌之一。
就地編輯是指獲取不可編輯的內容(例如 <p>、<h1> 或 <div>),並讓使用者只需單擊即可編輯其內容。
這會將靜態元素轉換為可編輯區域(單行或多行),並彈出提交和取消按鈕(或連結,具體取決於您的選項),供使用者提交或回滾修改。
然後,它透過 Ajax 同步伺服器端的編輯,並再次使元素不可編輯。
要使用 script.aculo.us 的就地編輯功能,您需要載入 controls.js 和 effects.js 模組以及 prototype.js 模組。因此,script.aculo.us 的最小載入如下所示:
<script type = "text/javascript" src = "/javascript/prototype.js"></script> <script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,controls"></script>
建立就地文字編輯器
整個構造語法如下所示:
new Ajax.InPlaceEditor(element, url [ , options ] )
Ajax.InPlaceEditor 的建構函式接受三個引數:
目標元素可以是元素本身的引用,也可以是目標元素的 ID。
Ajax.InPlaceEditor 的第二個引數指定完成編輯值時聯絡的伺服器端指令碼的 URL。
常用的選項雜湊表。
選項
建立 Ajax.InPlaceEditor 物件時,您可以使用以下一個或多個選項。
| 序號 | 選項及說明 |
|---|---|
| 1 |
okButton 一個布林值,指示是否顯示“確定”按鈕。預設為 true。 |
| 2 |
okText 要放在“確定”按鈕上的文字。預設為“確定”。 |
| 3 |
cancelLink 一個布林值,指示是否顯示取消連結。預設為 true。 |
| 4 |
cancelText 取消連結的文字。預設為“取消”。 |
| 5 |
savingText 在儲存操作(單擊“確定”按鈕啟動的請求)處理期間顯示為控制元件值的文字字串。預設為“正在儲存”。 |
| 6 | 滑鼠懸停時顯示為控制元件“工具提示”的文字字串。 clickToEditText |
| 7 |
rows 編輯控制元件處於活動狀態時顯示的行數。任何大於 1 的數字都會導致使用文字區域元素而不是文字欄位元素。預設為 1。 |
| 8 |
cols 活動模式下的列數。如果省略,則不施加列限制。 |
| 9 |
size 與 cols 相同,但僅在 rows 為 1 時適用。 |
| 10 |
highlightcolor 滑鼠懸停時應用於文字元素背景的顏色。預設為淡黃色。 |
| 11 |
highlightendcolor 高亮顏色作為效果淡出的顏色。 注意 - 一些瀏覽器中的支援似乎參差不齊。 |
| 12 |
loadingText 載入操作期間要在控制元件內顯示的文字。預設為“正在載入”。 |
| 13 |
loadTextURL 指定要聯絡的伺服器端資源的 URL,以便在編輯器進入活動模式時載入編輯器的初始值。預設情況下,不會進行後端載入操作,初始值是目標元素的文字。 |
| 14 |
externalControl 用作“外部控制元件”的元素,用於觸發將編輯器置於活動模式。如果您希望另一個按鈕或其他元素觸發編輯控制元件,這將非常有用。 |
| 15 |
ajaxOptions 將傳遞給底層 Prototype Ajax 物件的雜湊物件,用作其選項雜湊表。 |
回撥選項
此外,您可以在 options 引數中使用以下任何回撥函式
| 序號 | 函式和說明 |
|---|---|
| 1 |
onComplete 在成功完成儲存請求後呼叫的 JavaScript 函式。預設情況下,會對編輯器應用高亮效果。 |
| 2 |
onFailure 在儲存請求失敗時呼叫的 JavaScript 函式。預設情況下,會發出顯示失敗訊息的警報。 |
| 3 |
callback 在提交儲存請求之前呼叫的 JavaScript 函式,以便獲取要傳送到請求的查詢字串。預設函式返回將查詢引數“value”等同於文字控制元件中的值的查詢字串。 |
CSS 樣式和 DOM ID 選項
您還可以使用以下選項之一來控制就地編輯器的行為:
| 序號 | 選項及說明 |
|---|---|
| 1 |
savingClassName 儲存操作正在進行時應用於元素的 CSS 類名。在向儲存 URL 發出請求時應用此類,並在返回響應時將其刪除。預設值為“inplaceeditor-saving”。 |
| 2 |
formClassName 應用於建立的包含編輯器元素的表單的 CSS 類名。預設為“inplaceeditor-form”。 |
| 3 |
formId 應用於建立的包含編輯器元素的表單的 ID。 |
示例
<html>
<head>
<title>Simple Ajax Auto-completer Example</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,controls"></script>
<script type = "text/javascript">
window.onload = function() {
new Ajax.InPlaceEditor(
'theElement',
'/script.aculo.us/transform.php',
{
formId: 'whatever',
okText: 'Upper me!',
cancelText: 'Never mind'
}
);
}
</script>
</head>
<body>
<p>Click over the "Click me!" text and then change text and click OK.</p>
<p>Try this example with different options.</p>
<div id = "theElement">
Click me!
</div>
</body>
</html>
顯示後,單擊並編輯文字。這個相當簡單的 PHP 指令碼將鍵為“value”的查詢引數的值轉換為其大寫等效項,並將結果寫回響應。
以下是 transform.php 指令碼的內容。
<?php
if( isset($_REQUEST["value"]) ) {
$str = $_REQUEST["value"];
$str = strtoupper($str);
echo "$str";
}
?>
這將產生以下結果:
就地集合編輯器選項
還有一個名為 Ajax.InPlaceCollectionEditor 的物件,它支援就地編輯,並允許您從給定的選項中選擇一個值。
整個構造語法如下所示:
new Ajax.InPlaceCollectionEditor(element, url [ , options ] )
Ajax.InPlaceCollectionEditor 的建構函式接受三個引數:
目標元素可以是元素本身的引用,也可以是目標元素的 ID。
Ajax.InPlaceEditor 的第二個引數指定完成編輯值時聯絡的伺服器端指令碼的 URL。
常用的選項雜湊表。
選項
除了新增集合選項外,就地集合編輯器的選項列表是從就地文字編輯器繼承的選項的子集。
| 序號 | 選項及說明 |
|---|---|
| 1 |
okButton 一個布林值,指示是否顯示“確定”按鈕。預設為 true。 |
| 2 |
okText 要放在“確定”按鈕上的文字。預設為“確定”。 |
| 3 |
cancelLink 一個布林值,指示是否顯示取消連結。預設為 true。 |
| 4 |
cancelText 取消連結的文字。預設為“取消”。 |
| 5 |
savingText 在儲存操作(單擊“確定”按鈕啟動的請求)處理期間顯示為控制元件值的文字字串。預設為“正在儲存”。 |
| 6 |
滑鼠懸停時顯示為控制元件“工具提示”的文字字串。 clickToEditText |
| 7 |
Highlightcolor 滑鼠懸停時應用於文字元素背景的顏色。預設為淡黃色。 |
| 8 |
Highlightendcolor 高亮顏色作為效果淡出的顏色。 注意 - 一些瀏覽器中的支援似乎參差不齊。 |
| 9 |
Collection 要用於填充選擇元素選項的專案陣列。 |
| 10 |
loadTextUrl 指定要聯絡的伺服器端資源的 URL,以便在編輯器進入活動模式時載入編輯器的初始值。預設情況下,不會進行後端載入操作,初始值是目標元素的文字。為了使此選項有意義,它必須返回集合選項中提供的專案之一,以將其設定為選擇元素的初始值。 |
| 11 |
externalControl 用作“外部控制元件”的元素,用於觸發將編輯器置於活動模式。如果您希望另一個按鈕或其他元素觸發編輯控制元件,這將非常有用。 |
| 12 |
ajaxOptions 將傳遞給底層 Prototype Ajax 物件的雜湊物件,用作其選項雜湊表。 |
回撥選項
此外,您可以在 options 引數中使用以下任何回撥函式:
| 序號 | 函式和說明 |
|---|---|
| 1 |
onComplete 在成功完成儲存請求後呼叫的 JavaScript 函式。預設情況下,會對編輯器應用高亮效果。 |
| 2 |
onFailure 在儲存請求失敗時呼叫的 JavaScript 函式。預設情況下,會發出顯示失敗訊息的警報。 |
CSS 樣式和 DOM ID 選項
您還可以使用以下選項之一來控制就地編輯器的行為:
| 序號 | 選項及說明 |
|---|---|
| 1 |
savingClassName 儲存操作正在進行時應用於元素的 CSS 類名。在向儲存 URL 發出請求時應用此類,並在返回響應時將其刪除。預設值為“inplaceeditor-saving”。 |
| 2 |
formClassName 應用於建立的包含編輯器元素的表單的 CSS 類名。預設為“inplaceeditor-form”。 |
| 3 |
formId 應用於建立的包含編輯器元素的表單的 ID。 |
示例
<html>
<head>
<title>Simple Ajax Auto-completer Example</title>
<script type = "text/javascript" src = "/javascript/prototype.js"></script>
<script type = "text/javascript" src = "/javascript/scriptaculous.js?load = effects,controls"></script>
<script type = "text/javascript">
window.onload = function() {
new Ajax.InPlaceCollectionEditor(
'theElement',
'/script.aculo.us/transform.php',
{
formId: 'whatever',
okText: 'Upper me!',
cancelText: 'Never mind',
collection: ['one','two','three','four','five']
}
);
}
</script>
</head>
<body>
<p>Click over the "Click me!" text and then change text and click OK.</p>
<p>Try this example with different options.</p>
<div id = "theElement">
Click me!
</div>
</body>
</html>
以下是 transform.php 指令碼的內容。
<?php
if( isset($_REQUEST["value"]) ) {
$str = $_REQUEST["value"];
$str = strtoupper($str);
echo "$str";
}
?>
顯示後,單擊並選擇顯示的選項之一。這個相當簡單的 PHP 指令碼將鍵為“value”的查詢引數的值轉換為其大寫等效項,並將結果寫回響應。
使用我們的線上編譯器,更好地理解上面表格中討論的不同選項的程式碼。
這將產生以下結果: