Documents

介紹NatureFace物件的使用方法及我們為HTML MAP元素定義所擴充的相關標籤及屬性方法。

NatureFace類別,利用new方法來創建一個NatureFace物件,創建時可帶入一個theme,當然可以利用prefix來指定theme存放位置, 我們提供了相關的參數來設定如全螢幕、物件大小,甚至是可自行定義NatureFace容器的div container。

建構參數:

參數描述
theme佈景主題的第一個載入點頁面名稱
fullscreen布林值,是否為全螢幕, 如為true, 則 top, left, width及height四個參數失效
prefix佈景主題存放位置路徑
firsttarget第一個要切換的target, 內定為theme參數值
touchscreen強制指定是否為觸控(未指定將自動判斷, 有些紅外線觸控可能判斷錯誤)
top定位點 top
left定位點 left
width定位點 width(與height同時存在方能生效)
height定位點 height(與width同時存在方能生效)
rootdiv指定的 div element名稱
html直接填入的HTML檔內容, prefix及theme、pages參數, 以及*.js即無效
pages使用陣列定義欲載入的page, 使用此可取代page tag, 使用此參數theme則失效
disablejs是否載入js(避免console出現不必要的js載入錯誤, default:true)
transparent所有的元件皆為透明(純定位系統, 不使用背影圖按鈕化)

範例:

//jquery用法,當文件載入完成後執行	
$(document).ready(function() { 
    //建立400x800大小的NatureFace物件
    //載入template/START.html佈景主題,第一個要顯示的層(layer)為HOME層。
    var demo = new NatureFace({
        theme : "START", 
        fullscreen : false, 
        prefix : "template/",
        left : 0,
        top : 0,
        width : 480,
        height : 800,
        firsttarget : "HOME"
    });
});

這裡列出NatureFace可用的方法(函式), 及一些典型的範例程式片斷。


方法(Method):

方法描述
target(layer)跳至指定layer層(完成後將觸發 [target] event, 並回傳event, natureface, layer)
layer()取得目前layer名稱
hide()隱藏整個NatureFace
show() 顯示整個NatureFace
refresh()重繪NatureFace,必須為fullscreen此函式才有效果,重繪後會觸發 refresh event.
listener(key, function(data))[過期]新增一個listener, key為NatureFace支援的事件,目前只有“target“可用,當target被觸發時,將執行該listener
removeListener(key, function(data))[過期]移除一個listener, key為NatureFace支援的事件,目前只有“target“可用
autofill()執行autofill 字型自動縮放功能,將所有div[autofill]元件下的div進行字型resize動作,注意div必須設為position: absolute;, 此funcion也是$.fn,所以也應用在任何div元件上。
jsonTable(group, data, subupdate(item, dataitem, currentpage, allpage), subclear(item, dataitem, currentpage, allpage), page)將json資料填入group表格中, 並於subupdate中進行item內容的顯示處理,subclear為空item使處理, page為顯示的頁面,沒設定為最後頁。
jsonListing(group, data, subupdate(item, dataitem))將json資料填入group表格中(scrollbar呈現)

事件(Event):

事件描述
target(event, natureface, layer)切換頁面時,target將被觸發(與postEnter意義相同)
preEnter(event, natureface, layer)進入頁面前觸發的動作(頁面元素未顯示前)
postEnter(event, natureface, layer)進入頁面(頁面元素已顯示)
preExit(event, natureface, layer)離開頁面前(頁面元素尚未消失前,可利用natureface.eventValue=true|false取消切換)
postExit(event, natureface, layer)離開頁面後(元素已消失)
refresh(event, natureface, layer)呼叫refresh()後,觸發此元件,供外部進行resize處理

範例:

//demo為NatureFace物件
//以下程式碼將NatureFace layer切換至HELLO層
demo.target("HELLO");

//取得頁面切換動作
$(document).bind("preExit postExit preEnter postEnter target", function(event, natureface, layer){
	console.info("event %o : %o" , event.type, layer);
	natureface.eventValue = true; //for preExit
});
	
//當切換至HELLO時,將json資料放於order表格中
$(document).bind("target", function(event, natureface, layer){
	if (layer == "HELLO"){
		natureface.jsonTable("order", 
			[
				{"id":"0001", "name":"可口可樂"}, 
				{"id":"0002", "name":"咖啡"},
				{"id":"0003", "name":"沙士1"},
				{"id":"0004", "name":"沙士2"},
				{"id":"0005", "name":"沙士3"},
				{"id":"0006", "name":"沙士4"},
				{"id":"0007", "name":"沙士5"},
				{"id":"0008", "name":"沙士6"},
				{"id":"0009", "name":"沙士7"},
				{"id":"0010", "name":"沙士8"}
			],
			function(box, item, page, allpage){
				//重要,要設定autofill必須為position:absolute有效
				box.html('<div style="position: absolute;">' + item.id + " " + item.name+"</div>");
				$(box).autofill();
			},
			function(box, item, page, allpage){ //此box己被執行$(box).empty()
			},
			1 
		);
	}
}); 

一個佈景主題通常包含了圖檔、元素定義檔、甚至是javascript檔,在此說明這些檔案彼此關係,我們習慣把一個佈景主題存放在同一個目錄。


說明

一般來說一個頁面由三個實體檔案所組成,NatureFace載入後再利用其元素定義檔內容進行互動及流程邏輯處理,接下來章節將為你介紹細部特性。

定義UI控制元素的產生,我們利用HTML Map來定義NatureFace的元素,主要利用其「定位」的特色,最大的好處是其這類的編輯器隨處可取得,另外,就我們的經驗, 經過我們的加工(加上一些擴充屬性)後,這些工具還是可以相容運作的好好的。


HTML MAP編輯器介紹:

工具描述
Dreamweaver 付費軟體,一個強大的網頁編輯器,對於編輯Map功能強大,且實作豐富元素的操作功能,如大小設定、元素對齊、複製貼上功能等等...。
www.image-maps.com 線上免費工具,透過上傳圖檔進行編輯定位,快速好用,但注意取得code時,應去除多餘的url及標籤。
KImageMapEditor 免費工具,一個Linux版的HTML MAP編輯器,如果你是使用Linux作業系統,這個工具是不錯的選擇。

你應利用以上工具產生類似如下「純MAP」的HTML檔案:

<!DOCTYPE html>
<html>
<body>
<img src="HELLO.png" border="0" usemap="#Map" width="480" height="800"/>
<map name="Map" id="Map">
<area shape="rect" href="txtMessage" coords="120,82,396,272"/>
<area shape="rect" href="btnHI" coords="46,286,222,376"/>
<area shape="rect" href="btnBack" coords="267,286,439,377"/>
</map>
</body>
</html>

以下為NatureFace新增或重新定義之屬性用途:

標籤及屬性描述
<area>定義一個新的元素
href不重覆的物件名稱id, 無設定時, 系統會自動加入一個隨機id,建議養成良好命名規則
shape限「rect」值,目前NatureFace只支援rect形狀(方形)
class物件類別, 目前支援的有 button(內定值), label, input(輸入框)。
vt指定top定位(可使用px,%,vh,vw,vmax,vmin), 設定後coords中coords[0]將忽略。
vl指定left定位(可使用px,%,vh,vw,vmax,vmin), 設定後coords中coords[1]將忽略。
vw指定寬度(可使用px,%,vh,vw,vmax,vmin), 設定後coords中coords[2]將忽略。
vh指定高度(可使用px,%,vh,vw,vmax,vmin), 設定後coords中coords[3]將忽略。
value給予文字初值
target流程控管, 按下元素時, 將跳至此層(layer)
layer物件層次, 以逗號區隔, 空白表示永遠顯示
layerdisable物件層次, 是否可操作(可看到但不能操作)
align文字對齊方式:topcenter、topleft、topright、middlecenter、middleleft、middleright、bottoncenter、bottomleft、bottomright,
常搭配以下效果:style='white-space:nowrap;font-family:微軟正黑體,標楷體;font-size:20px; color:white; text-shadow: black 0.1em 0.1em 0.2em'
autofill文字自動填滿,如未設定font-size, 則由40px開始縮小,最小為4px。
coords元素座標位置,左上角座標,右下角座標, 如:25,20,75,82
size文字字型大小, 內定為14(過時, 請改用標準css用法)
font文字字型(過時, 請改用標準css用法)
color文字字型顏色, 內定為黑色(過時, 請改用標準css用法)
opacity透明度,分別代表 mousedown, mousemove, mouseup時的透明度, 為0~1之間的值,如 : 1,0.7,0.5
style為添加元素原生的HTML擴充性,我們保留style屬性
group表格產生器,與rows,cols搭配使用, 可配合jsonTable()、binding()或listing()使用(此部份尚無文件, 可來信索取支援)
rows指定表格列數
cols指定表格行數(listing, jsonListing不支援)
binding挷定表格上下頁按鈕,語法為binding="{group}.left"或binding="{group}.left"
其他屬性除了常用的style外,其實其他不在我們定義之外的屬性將完整被保留,例:為class=input, 加入placeholder屬性等等...
<page>載入一個新的元素定義檔
src元素定義檔名稱
prefix元素定義檔存取路徑
<layer>area未指定時layer值時, 可利用此標籤定義layer及target, 簡化設定過程
default此頁面內定的layer值
target此頁面內定的target值
<debug>開啟除錯功能模式,會在每個元素加上一個外框以利識別
valuetrue 或 false

利用元素的id(href屬性)我們就可輕易的操控這些元素,例如元素點擊時要進行何種動作或要加入style,其實與一般撰寫jquery一模一樣, 以下示範一些常用的操作,詳細可自行研究jquery的使用, 當然也可利用純javascript來操作。


以下做一些常用的示範


改變文字(text):

//改變元素的文字內容						
$("#lblID").text("ChangeText");

放置圖片(html):

//元素內放入image						
$("#lblID").html('<img src="img/product.png">'); 

點擊元素(click):

//於ID為btnID元素上點擊,並改變lblID的文字內容	
$("#btnID").bind("click", function(){
	$("#lblID").html("ChangeText");//你可以放置任何html碼至lblID div容器裡
});

我們為了讓每個頁面模組化,做到更好的抽換,你可以在每個元素定義檔都可以撰寫專用的javascript脚本,NatureFace即可自動於載入時執行。


作法:

你只要在你的元素定義檔同層目錄中建立一個同名的.js檔即可,注意使用時建議其元素命名不要有所重覆,以免造成不當的影响。


範例:

  root/
  ├── template/
  │   ├── START.png
  │   ├── START.html
  │   ├── START.js (元素定義檔脚本)
  │   ├── HOME.png
  │   ├── HOME.html
  │   ├── HOME.js (元素定義檔脚本)
  │   ├── HELLO.png
  │   ├── HELLO.html
  │   └── HELLO.js (元素定義檔脚本)
  ├── js/
  │   ├── jquery.1.8.2.min.js
  │   └── jquery.NatureFace.js
  └── index.html

為了方便require js使用者也能快樂使用 NatureFace(限v2.12版本以上), 請參考以下作法


作法:

請參考requirejs的shim設定,只要deps jquery即可使用


範例:

var require = {
	shim: {
	    natureface: {
	     	deps: ['jquery']
	    }
	},
	paths: {
		jquery: '3party/jquery/dist/jquery',
		natureface: 'jquery.NatureFace'
	}
};

//即可使用natureface模組
define(["jquery", "natureface"], function($, natureface){
	//do something;
});