探討形式美的法則,是所有設計學科共通的課題,那么,它的意義何在呢?在日常生活中,美是每一個人追求的精神享受。當你接觸任何一件有存在價值的事物時,它必定具備合乎邏輯的內容和形式。在現實生活中,由于人們所處經濟地位、文化素質、思想習俗、生活理想、價值觀念等不同而具有不同的審美觀念。然而單從形式條件來評價某一事物或某一視覺形象時,對于美或丑的感覺在大多數人中間存在著一種基本相通的共識。這種共識是從人們長期生產、生活實踐中積累的,它的依據就是客觀存在的美的形式法則,我們稱之為形式美法則。在我們的視覺經驗中,高大的杉樹、聳立的高樓大廈、巍峨的山巒尖峰等,它們的結構輪廓都是高聳的垂直線,因而垂直線在視覺形式上給人以上升、高大、威嚴等感受;而水平線則使人聯系到地平線、一望無際的平原、風平浪靜的大海等,因而產生開闊、徐緩、平靜等感受…… 這些源于生活積累的共識,使我們逐漸發現了形式美的基本法則。在西方自古希臘時代就有一些學者與藝術家提出了美的形式法則的理論,時至今日,形式美法則已經成為現代設計的理論基礎知識。在設計構圖的實踐上,更具有它的重要性。形式美法則主要有以下幾條:
和諧
對比與統一
對稱
均衡
比例
視覺重心
節奏與韻律
聯想與意境
和諧
宇宙萬物,盡管形態千變萬化,但它們都各按照一定的規律而存在,大到日月運行、星球活動,小到原子結構的組成和運動,都有各自的規律。愛因斯坦指出:宇宙本身就是和諧的。和諧的廣義解釋是:判斷兩種以上的要素,或部分與部分的相互關系時,各部分所給我們的感受和意識是一種整體協調的關系。和諧的狹義解釋是統一與對比兩者之間不是乏味單調或雜亂無章。單獨的一種顏色、單獨的一根線條無所謂和諧,幾種要素具有基本的共通性和溶合性才稱為和諧。比如一組協調的色塊,一些排列有序的近似圖形等。和諧的組合也保持部分的差異性,但當差異性表現為強烈和顯著時,和諧的格局就向對比的格局轉化。
對比與統一
對比又稱對照,把反差很大的兩個視覺要素成功地配列于一起,雖然使人感受到鮮明強烈的感觸而仍具有統一感的現象稱為對比,它能使主題更加鮮明,視覺效果更加活躍。對比關系主要通過視覺形象色調的明暗、冷暖,色彩的飽和與不飽和,色相的迥異,形狀的大小、粗細、長短、曲直、高矮、凹凸、寬窄、厚薄,方向的垂直、水平、傾斜,數量的多少,排列的疏密,位置的上下、左右、高低、遠近,形態的虛實、黑白、輕重、動靜、隱現、軟硬、干濕等多方面的對立因素來達到的。它體現了哲學上矛盾統一的世界觀。對比法則廣泛應用在現代設計當中,具有很大的實用效果。
對稱
自然界中到處可見對稱的形式,如鳥類的羽翼、花木的葉子等。所以,對稱的形態在視覺上有自然、安定、均勻、協調、整齊、典雅、莊重、完美的樸素美感,符合人們的視覺習慣。平面構圖中的對稱可分為點對稱和軸對稱。假定在某一圖形的中央設一條直線,將圖形劃分為相等的兩部分,如果兩部分的形狀完全相等,這個圖形就是軸對稱的圖形,這條直線稱為對稱軸。假定針對某一圖形,存在一個中心點,以此點為中心通過旋轉得到相同的圖形,即稱為點對稱。點對稱又有向心的“求心對稱”,離心的“發射對稱”,旋轉式的“旋轉對稱”,逆向組合的“逆對稱”,以及自圓心逐層擴大的“同心圓對稱”等等。在平面構圖中運用對稱法則要避免由于過分的絕對對稱而產生單調、呆板的感覺,有的時候,在整體對稱的格局中加入一些不對稱的因素,反而能增加構圖版面的生動性和美感,避免了單調和呆板。
均衡
在衡器上兩端承受的重量由一個支點支持,當雙方獲得力學上的平衡狀態時,稱為平衡。在平面構成設計上的平衡并非實際重量×力矩的均等關系,而是根據形象的大小、輕重、色彩及其他視覺要素的分布作用于視覺判斷的平衡。平面構圖上通常以視覺中心(視覺沖擊最強的地方的中點)為支點,各構成要素以此支點保持視覺意義上的力度平衡(如圖。在實際生活中,平衡是動態的特征,如人體運動、鳥的飛翔、野獸的奔馳、風吹草動、流水激浪等都是平衡的形式,因而平衡的構成具有動態。r
比例
比例是部分與部分或部分與全體之間的數量關系。它是精確詳密的比率概念。人們在長期的生產實踐和生活活動中一直運用著比例關系,并以人體自身的尺度為中心,根據自身活動的方便總結出各種尺度標準,體現于衣食住行的器用和工具的制造中。比如早在古希臘就已被發現的至今為止全世界公認的黃金分割比1:1. 618正是人眼的高寬視域之比。恰當的比例則有一種諧調的美感,成為形式美法則的重要內容。美的比例是平面構圖中一切視覺單位的大小,以及各單位間編排組合的重要因素。
視覺重心
重心在物理學上是指物體內部各部分所受重力的合力的作用點,對一般物體求重心的常用方法是:用線懸掛物體,平衡時,重心一定在懸掛線或懸掛線的延長線上;然后握懸掛線的另一點,平衡后,重心也必定在新懸掛線或新懸掛線的延長線上,前后兩線的交點即物體的重心位置。在平面構圖中,任何形體的重心位置都和視覺的安定有緊密的關系。人的視覺安定與造形的形式美的關系比較復雜,人的視線接觸畫面,視線常常迅速由左上角到左下角,再通過中心部分至右上角經右下角,然后回到以畫面最吸引視線的中心視圈停留下來,這個中心點就是視覺的重心。但畫面輪廓的變化,圖形的聚散,色彩或明暗的分布等都可對視覺重心產生影響。因此,畫面重心的處理是平面構圖探討的一個重要的方面。在平面廣告設計中,一幅廣告所要表達的主題或重要的內容信息往往不應偏離視覺重心太遠。
節奏與韻律
節奏本是指音樂中音響節拍輕重緩急的變化和重復。節奏這個具有時間感的用語在構成設計上是指以同一視覺要素連續重復時所產生的運動感。
韻律原指音樂(詩歌)的聲韻和節奏。詩歌中音的高低、輕重、長短的組合,勻稱的間歇或停頓,一定地位上相同音色的反復及句末、行末利用同韻同調的音相加以加強詩歌的音樂性和節奏感,就是韻律的運用。平面構成中單純的單元組合重復易于單調,由有規則變化的形象或色群間以數比、等比處理排列,使之產生音樂、詩歌的旋律感,稱為韻律。有韻律的構成具有積極的生氣,有加強魅力的能量。
聯想與意境
平面構圖的畫面通過視覺傳達而產生聯想,達到某種意境。聯想是思維的延伸,它由一種事物延伸到另外一種事物上。例如圖形的色彩:紅色使人感到溫暖、熱情、喜慶等;綠色則使人聯想到大自然、生命、春天,從而使人產生平靜感、生機感、春意等等。各種視覺形象及其要素都會產生不同的聯想與意境,由此而產生的圖形的象征意義作為一種視覺語義的表達方法被廣泛地運用在平面設計構圖中。
隨著科技文化的發展,對美的形式法則的認識將不斷深化。形式美法則不是僵死的教條,要靈活體會,靈活運用。
posted @
2007-01-25 13:53 Q系列類、方法、變量…… 閱讀(611) |
評論 (0) |
編輯 收藏
為了使界面設計有步奏,流程清晰明了. 所以對界面按系統設計劃分層次. 界面設計時可分以下三個設計層次.
1 結構設計層:
產品的整體架構, 紙上完成的低保真原型.它主要是用來確定軟件的結構,如:控件如何布局,窗體閑的如何切換。由設計師在紙上或一些工具上實現的不帶數據流的簡單界面原型.
2 視覺設計層:
根據結構層, 在原型的基礎上,對影響用戶視覺的界面元素層(負責顯示信息,圖片的層)以人機交互機制為依據進行進一步的設計.如:界面顏色,信息顯示方式, 圖標使用,字體大小顏色設定等.
3 交互設計層:
對屆面中與影響用戶操作的元素, 如操作反饋, 語言用法等,根據機制進行的設計。
為了設計者有規可循,根據用戶界面設計的目標 ,制定了一些機制,可為開發人員的設計標準.
用戶界面設計要以用戶為中心,處處為用戶設想。所以必須以用戶為目標出發,從界面的元素,布局, 信息流,用戶操作環境及人的心理生理特點出發,設立以下的機制。
1.界面布局機制
軟件界面中人接觸最多的,也是界面的基礎。它與人的視覺, 記憶,手部操作都有關。
因此這機制的目標: 提高界面的可讀性,舒適性,使操作時間最短
2.信息輸出輸入機制
界面與用戶最基本的交流就是信息,因此需建立此機制。它與人的視覺, 記憶,手部操作都有關。
目標: 人性化,使用戶明白系統所輸入輸出的信息, 減輕人腦和手的負擔
3.防錯機制
是人都會有錯, 但是并不意味著讓錯誤發生,盡量減少錯誤的發生,至少也不要增加不必要的錯誤。
目標: 盡量防止因人為或系統原因而產生錯誤
4.窗體閑切換機制
界面最常發生的是窗體切換, 也要考慮到對人得影響。
目標:使窗體閑切換更合理和方便
5.系統幫助機制
軟件都少不了幫助系統, 因此也該考慮。
目標:減輕人腦和手的負擔, 使系統更易用
6.系統反饋機制
反饋是系統與用戶交互的基本元素之一, 也是常發生的 。所以也需為其定下機制。
目標:防止用戶因不了解系統當前狀態而犯錯, 不耐煩, 不能及時處理工作
7.冗余機制
根據第二定律所設下的機制。
目標: 減少系統干擾用戶, 加快執行速度
8.一致性機制
本來它是機制中的一個原則, 但是它卻存在于各個機制中, 因此需另外提出以視強調~
posted @
2007-01-25 13:50 Q系列類、方法、變量…… 閱讀(188) |
評論 (0) |
編輯 收藏
1. oncontextmenu="window.event.returnvalue=false" 將徹底屏蔽鼠標右鍵
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消選取、防止復制
3. onpaste="return false" 不準粘貼
4. oncopy="return false;" oncut="return false;" 防止復制
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址欄前換成自己的圖標
6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夾中顯示出你的圖標
7. <input style="ime-mode:disabled"> 關閉輸入法
8. 永遠都會帶著框架
<script language="javascript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm為框架網頁
// --></script>
9. 防止被人frame
<SCRIPT LANGUAGE=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
10. <noscript><iframe src=*.html></iframe></noscript> 網頁將不能被另存為
11. <input type=button value=查看網頁源代碼
onclick="window.location = 'view-source:'+ '
http://www.csdn.net/'">12. 怎樣通過asp的手段來檢查來訪者是否用了代理
<% if Request.ServerVariables("HTTP_X_FORWARDED_FOR")<>"" then
response.write "<font color=#FF0000>您通過了代理服務器,"& _
"真實的IP為"&Request.ServerVariables("HTTP_X_FORWARDED_FOR")
end if
%>
13. 取得控件的絕對位置
//javascript
<script language="javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"nleft="+l);
}
</script>
//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>
14. 光標是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
15. 判斷上一頁的來源
asp:
request.servervariables("HTTP_REFERER")
javascript:
document.referrer
16. 最小化、最大化、關閉窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" value="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=關閉 onclick=hh3.Click()>
本例適用于IE
17.
<%
'定義數據庫連接的一些常量
Const adOpenForwardOnly = 0 '游標只向前瀏覽記錄,不支持分頁、Recordset、BookMark
Const adOpenKeyset = 1 '鍵集游標,其他用戶對記錄說做的修改將反映到記錄集中,但其他用戶增加或刪除記錄不會反映到記錄集中。支持分頁、Recordset、BookMark
Const adOpenDynamic = 2 '動態游標功能最強,但耗資源也最多。用戶對記錄說做的修改,增加或刪除記錄都將反映到記錄集中。支持全功能瀏覽(ACCESS不支持)。
Const adOpenStatic = 3 '靜態游標,只是數據的一個快照,用戶對記錄說做的修改,增加或刪除記錄都不會反映到記錄集中。支持向前或向后移動
Const adLockReadOnly = 1 '鎖定類型,默認的,只讀,不能作任何修改
Const adLockPessimistic = 2 '當編輯時立即鎖定記錄,最安全的方式
Const adLockOptimistic = 3 '只有在調用update方法時才鎖定記錄集,而在此前的其他操作仍可對當前記錄進行更改、插入和刪除等
Const adLockBatchOptimistic = 4 '當編輯時記錄不會被鎖定,而更改、插入和刪除是在批處理方式下完成的
Const adCmdText = &H0001
Const adCmdTable = &H0002
%>
18. 網頁不會被緩存
HTM網頁
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">
ASP網頁
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = "no-cache"
PHP網頁
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
19. 檢查一段字符串是否全由數字組成
<script language="javascript"><!--
function checkNum(str){return str.match(/D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
20. 獲得一個窗口的大小
document.body.clientWidth,document.body.clientHeight
21. 怎么判斷是否是字符
if (/[^x00-xff]/g.test(s)) alert("含有漢字");
else alert("全是字符");
22.TEXTAREA自適應文字行數的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>
23. 日期減去天數等于第二個日期
<script language=javascript>
function cc(dd,dadd)
{
//可以加上錯誤處理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>
24. 選擇了哪一個Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>
25.獲得本頁url的request.servervariables("")集合
Response.Write "<TABLE border=1><!-- Table Header --><TR><TD><B>Variables</B></TD><TD><B>value</B></TD></TR>"
for each ob in Request.ServerVariables
Response.Write "<TR><TD>"&ob&"</TD><TD>"&Request.ServerVariables(ob)&"</TD></TR>"
next
Response.Write "</TABLE>"
26.
本機ip<%=request.servervariables("remote_addr")%>
服務器名<%=Request.ServerVariables("SERVER_NAME")%>
服務器IP<%=Request.ServerVariables("LOCAL_ADDR")%>
服務器端口<%=Request.ServerVariables("SERVER_PORT")%>
服務器時間<%=now%>
IIS版本<%=Request.ServerVariables"SERVER_SOFTWARE")%>
腳本超時時間<%=Server.ScriptTimeout%>
本文件路徑<%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%>
服務器CPU數量<%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%>
服務器解譯引擎<%=ScriptEngine & "/"& ScriptEngineMajorVersion &"."&ScriptEngineMinorVersion&"."& ScriptEngineBuildVersion %>
服務器操作系統<%=Request.ServerVariables("OS")%>
27.ENTER鍵可以讓光標移到下一個輸入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
28. 檢測某個網站的鏈接速度:
把如下代碼加入<body>區域中:
<script language=javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="
http://www.njcatv.net/"autourl[2]="javacool.3322.net"
autourl[3]="
http://www.sina.com.cn/"autourl[4]="
www.nuaa.edu.cn"autourl[5]="
http://www.cctv.com/"function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=測試中……> =》<input type=text name=url"+i+" size=40> =》<input type=button value=GO onclick=window.open(this.form.url"+i+".value)><br/>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="鏈接超時"}
else
{document.forms[0]["txt"+b].value="時間"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl[i]+"/"+Math.random()+" width=1 height=1 onerror=auto('
http://"/;;;;;+autourl[i]+"')>")}
run()</script>
29. 各種樣式的光標
auto :標準光標
default :標準箭頭
hand :手形光標
wait :等待光標
text :I形光標
vertical-text :水平I形光標
no-drop :不可拖動光標
not-allowed :無效光標
help :?幫助光標
all-scroll :三角方向標
move :移動標
crosshair :十字標
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize
1、 去掉IE的滾動條
有時候做好的網頁明明沒有超出窗口,可IE卻偏偏給加上滾動條,這樣看上去很不舒服,其實這也是可以通過一些小技巧避免的。具體如下:
<body style=”overflow-x:hidden”>…</body> //去掉X軸方向的滾動條
<body style=”overflow-y:hidden”>…</body> //去掉Y軸方向的滾動條
<body style=”overflow:hidden”>…</body> //去掉全部的滾動條
現在你看到的和你想像中的網頁應該一樣了吧,如果其中有什么不明白的地方可以參照注釋中的說明。
2、 使網頁中的復制無效
有方法防止網頁被保存了(參見《你別看我的源代碼》),可不可以也防止網頁內容被復制呢?答案是當然可以。看看下面的例子你就會明白的。
<html>
<head>
<script language=”javascript”>
function nocopy() {
alert(“對不起,你不能非法復制本站內容”);
event.returnvalue=false;
}
</script>
</head>
<body oncopy=”nocopy()”>copyright by commander.</body>
</html>
這其實中是利用了document的一個oncopy事件,也就是說當發生復制事件時,彈出警告框,同時事件(event)的返回值為false使oncopy事件失效,從而達到防止復制的目的。
3、 用腳本控制瀏覽器
看到標題是不是有點不相信,那么試試下面的這幾個例子吧!你一定會吃驚的。
在<body>和</body>之間加入如下代碼:
<button onclick=”document.execCommand('open')”>打開</button>
<button onclick=”document.execCommand('saveas')”>另存為…</button>
<button onclick=”document.execCommand('print')”>打印</button>
上面其實都是利用了document.execCommand()這個內置的函數,其參數為相應的瀏覽器命令,還有很多命令就留給大家自己發現吧!
4、 IFrame也可以編輯文字
有沒有想過除了表單(<form>)之外還有其它的網頁元素可以編輯文字呢?只要使用IFrame的隱藏的一個屬性就可以使IFrame成為一個文本編輯器。
<html>
<body onload=”editer.document.designMode='On'”>
<IFrame ID=”editer”></IFrame>
</body>
</html>
其中designMode屬性表示IFrame的設計模式的狀態(開/關),還在猶豫什么呢,快試試吧!
只要巧妙的利用這一特性就可以制作很多意想不到的效果。如果下面我們來做一個圖片編輯器。
<html>
<body onload=”imgEditer.document.designMode='On';imgEditer.document.write('<img src=圖片.gif>')”>
<IFrame id=”imgEditer”></IFrame>
</body>
</html>
用鼠標點擊圖片是不是有新的發現,其實大家只要利用自己的想象和充分利用這個屬性一定能做出更多的花樣來,別忘了到時候有什么新的東東,告訴我一聲呀!(Email:BluePBoy@yesky.com)
5、 打開硬盤
這是打開硬盤的另一種方法,把它寫出來只是想告訴大家,要達到同一個目的有很多種方法,這里就是利用了表單的Action屬性達到的,其實打開硬盤有很多種方法,只是這種不太被人們注意,所以這里就選擇了這種方法。
<form action=file ://c|><input type=”submit” value=”打開C盤”></form>
posted @
2007-01-25 13:48 Q系列類、方法、變量…… 閱讀(241) |
評論 (0) |
編輯 收藏
正度紙張:787×1092mm
開數(正度) 尺寸 單位(mm)
全開 781×1086
2開 530×760 3開 362×781
4開 390×543 6開 362×390
8開 271×390
16開 195×271
注:成品尺寸=紙張尺寸-修邊尺寸
大度紙張:850*1168mm
開數(正度) 尺寸 單位(mm)
全開 844×1162
2開 581×844 3開 387×844
4開 422×581 6開 387×422
8開 290×422
注:成品尺寸=紙張尺寸-修邊尺寸
常見開本尺寸(單位:mm)
開本尺寸:787 x 1092
對開:736 x 520
4開:520 x 368
8開:368 x 260
16開:260 x 184
32開:184 x 130
開本尺寸(大度):850 x 1168
對開:570 x 840
4開:420 x 570
8開:285 x 420
16開:210 x 285
32開:203 x 140
正度紙張:787×1092mm
開數(正度) 尺寸 單位(mm)
全開 781×1086
2開 530×760
3開 362×781
4開 390×543
6開 362×390
8開 271×390
16開 195×271
注:成品尺寸=紙張尺寸-修邊尺寸
大度紙張:850*1168mm
開數(正度) 尺寸 單位(mm)
全開 844×1162
2開 581×844
3開 387×844
4開 422×581
6開 387×422
8開 290×422
注:成品尺寸=紙張尺寸-修邊尺寸
16開 大度:210×285 正度:185×260
8開 大度:285×420 正度:260×370
4開 大度:420×570 正度:370×540
2開 大度:570×840 正度:540×740
全開 大:889×1194 小:787×1092
名片
橫版:90*55mm<方角> 85*54mm<圓角>
豎版:50*90mm<方角> 54*85mm<圓角>
方版:90*90mm 90*95mm
IC卡 85x54MM
三折頁廣告
標準尺寸: (A4)210mm x 285mm
普通宣傳冊
標準尺寸: (A4)210mm x 285mm
文件封套
標準尺寸:220mm x 305mm
招貼畫:
標準尺寸:540mm x 380mm
掛旗
標準尺寸:8開 376mm x 265mm
4開 540mm x 380mm
手提袋:
標準尺寸:400mm x 285mm x 80mm
信紙 便條:
標準尺寸:185mm x 260mm 210mm x 285mm~
posted @
2007-01-25 13:47 Q系列類、方法、變量…… 閱讀(162) |
評論 (0) |
編輯 收藏
通過基本色調生成10種不同灰度的相同色,并且能生成png文件。
http://slayeroffice.com/tools/color_palette/4096 Color Wheel Version 2.1
非常漂亮的自然色抓取工具,用鼠標點取顏色,非常方便。
http://www.ficml.org/jemimap/style/color/wheel.htmltechnicolor
用鼠標拖動滑桿,再根據基色生成系統推薦的色調,最棒的是還能根據你選擇的顏色生成標準的css文件。
http://www.themaninblue.com/experiment/Technicolor/color scheme generator 2
這也許是至今為止最專業的調色板了。不但能根據選擇的基色生成相關的配色方案,還有根據顏色的飽和度,明亮度等等只有在photoshop里看見的調節功能,系統還提供推薦方案,有專門為色盲和色弱者推薦的顏色方案。
http://wellstyled.com/tools/colorscheme/index-en.htmlcolr.org
從網站Url就能看出這也是一個專業的color site。color.org最酷的就是應用了tag,你可以輸入forest(森林)這個詞,系統自動根據你給出的詞生成相關的顏色方案,輸入love 后我得到的大多是粉紅基色調,很準確吧!系統有11000多種顏色tag和20000種顏色方案、7000多個調色板。當然,這個tag。。這個tag不支持中文的...
http://colr.org/color blender
這個也是一個很有特色的調色板。輸入兩種截然不同的顏色,系統根據這兩種顏色生成漸變色帶。
http://www.meyerweb.com/eric/tools/color-blend/color schemer v2
這個是color scheme generator 2的另一個版本
http://www.colorschemer.com/online.htmlvisibone color lab
這是第一個根據網頁安全色制作的調色板,使用簡單,鼠標不停的點,直到碰上讓你感覺滿意的效果。
http://www.visibone.com/colorlab/RGB color charts
基于RGB原理的,不過系統生成的顏色很舒服。
http://lodestone.org/people/maria/design/colors.htmlfull screen picker
這是一個基于瀏覽器的顏色拾取器,想必下,這種工具還是使用客戶端的程序比較方便些。
http://milov.nl/iambald/24.htmlcolormixers
一邊拉滑桿,一邊看顏色的變化,相當方便。
http://colormixers.com/mixers/cmr/以下也是一些color tools的相關鏈接:
http://www.colormatch.dk/http://slayeroffice.com/tools/color_palette/http://kohaistyle.com/scripts/quickcolorhttp://www.easyrgb.com/harmonies.phphttp://www.stcsig.org/usability/topics/colorblind.htmlhttp://color.twysted.nethttp://www.coolhomepages.com/cda/colorhttp://www.masternewmedia.org/2003/04/30/http://dev.sessions.edu/ilu/ilu_1.htmlhttp://www.technetguru.com/designhttp://www.mundidesign.com/webcthttp://graphicdesign.about.com/library/color/blweb2.htmhttp://www.pourpre.com/chromograf/en/http://www.webwhirlers.com/colors/wizard.asphttp://www.colorcoordinator.com/colorCoordinator.php當前最熱門的十種顏色:
Moroccan blue :#081b55
Glazed ginger:#da4912
American beauty:#d31112
Ruby wine:#780e1a
Atmosphere:#c4a47b
Burnt olive:#565d10
Gloxinia:#530752
Rattan:#ffdc28
Moss:#a9a40c
Burnt orange:#fe690d
posted @
2007-01-24 15:01 Q系列類、方法、變量…… 閱讀(379) |
評論 (0) |
編輯 收藏
提高blog訪問量的秘技與非秘技提高blog訪問量的秘技與非秘技
注:這里的Blog主要指在Blog托管網站申請的個人Blog
1、盡早申請blog,早申請一天就多一天被點擊。比如LoveBNU的blog,除了量大以外,能高居前列最關鍵是申請得早......ft,呵呵
2、記住,"參數設置"是一個好東西,你可以在任何時候,不需要更新文章,改動一個參數,你的blog就會被列入首頁"最新更新"之中......半個小時或者一個小時以后,雖然你從最新更新表上落了下來,你可以將上面更改過的參數改回來。(不準砸我雞蛋,老婆說不讓我告訴大家的,嗚嗚,我可承受了壓力才說出來的,可以比得上315晚會揭黑批劣的英雄啊)
3、你的內容還是要好。但其實好是騙人的,不好照樣可以,那你得持續更新啊......比如不斷更新,告訴大家你是一個正正經經的blogger,blog是你的"生活方式",所以你需要每天叫嚷一下,"我更新了"。
4、好酒不怕巷子深,真的,如果你沒打算賣,只想留著自己喝。可是如果你打算兜售一下自己,而且有暴露癖好,那一定要去各大版面貼廣告。這是一個持續的行為,要把握一切機會,在bbs的各個版面隨時以各種方式提到自己的blog。方法如下:我的blog又更新了。大家看我的blog啊。其實你寫的這篇文章我在blog里面討論過了。......
5、把你的blog轉載到版面吧,真的,可以全部轉載,對于那些精彩的文章,這是為了打品牌。還有就是轉載一部分或者寫個簡介,提起大家的興趣,引誘大家點擊你的blog鏈接觀看。
6、你的簽名檔還沒有改成blog的廣告?ft,太落后了。我的個人說明檔和昵稱都是blog廣告了。還可以持續性的更換廣告詞。你看過精彩廣告詞嗎?比如說 "我blog,我暴露,我存在",或者"人類文明史上最好的blog"......
7、想讓你的文章變成"熱門話題"嗎?很簡單,發表blog以后立刻讓自己的好友去re文,插科打諢均可,如果不好意思麻煩別人,可以調動自己隱藏的若干馬甲re文,或者干脆用自己的id直接re好了。把一篇文章分三段寫進去,或者在寫完文章以后re文貼很多補充材料......哇哇哇,誰臉皮厚,誰自己 re文多,誰就能上熱門話題。當然,如果有人re了你的文章,你一定要很很很好客地再re才成......最好兩人在這聊天......
8、你還想上"點擊排行",哈哈,這個太容易了。在telnet方式下進入你的blog該篇文章,反復閱讀,你沒有心臟病吧,不要被瘋狂增長的數字嚇壞......
9、每隔半個小時自己點擊自己blog一次,積少成多。
10、你一定要串門,去人家blog里面看看,在別人的blog里面re文來做自己的廣告......對了,你一定要re他三四天前的文章,這樣不會幫助他增長他的"熱門話題"。
11、其實最好的辦法,是和windtear商量,讓他把他很大訪問量的網站里面的某些個內容直接鏈接到你的blog頁面上,光當,不要被訪問量打敗,要鎮定自若偷偷歡喜。不過,你可能需要報告他一次,那有何妨呢?反正,反正,訪問量第一嘛......
12、原創會比轉載讓你得到更多的尊重!但是,如果轉載一些黃色笑話,光當,或者轉載一些標題醒目的話題,比如,比如,"泡mm絕對有效的十大法則","瘦身九大法寶"......本人鄭重聲明,嚴禁轉載"提高blog訪問量的秘技與非秘技"一文!!!
13、貼圖吧,別老土了,都是看圖時代了。隨便貼幾張圖,ppmm效果最好,輕松超過那些寫字寫得累死的老土。
14、如果沒有人引用你的blog怎么辦?你可以去公眾網申請一個blog,反反復復引用你自己在smth的blog,呵呵,反正引用通告是通用的......誰砸我,我跟你沒完。
15、時不時地對blog發表一下看法,既然大家都在blog,所以都關心對blog的看法。如果你寫了一個"我最喜歡的幾個blog",肯定受人歡迎,而且你還可以將之分為上下篇,或者上中下,或者甲乙丙丁......
16、高級秘技:去各大黃色網站貼文,"保證噴鼻血的裸體mm",然后鏈接到你自己的blog......看吧,你終于認識到那些沒人說話或者說話很少的黃色網站究竟有多么大的閱讀量了。當你看到自己blog訪問量狂增以后,你也許就放棄blog,投身偉大的黃色事業......
17、選擇沒有人選擇的blog分類目錄,這樣會給你帶來意外的好處,因為你自己的文章就有機會出現在"分類主題"里面。
完了,大家都知道了,我就沒有可混的了,痛哭啊...
posted @
2007-01-24 12:59 Q系列類、方法、變量…… 閱讀(187) |
評論 (1) |
編輯 收藏
頁面美工設計需要注意的幾點
1、注意頁面的分塊,著手設計一個頁面的時候,你必須根據所掌握的內容,以及其風格,對頁面的整體進行分塊。分塊是一個非常必要且難以掌握的技巧。對于一般雜志來說,它們是有邊的,這意味著雜志美工設計師有邊可循,依靠邊來形成立體感,依靠邊來產生未盡的意韻;但是對于web頁面,邊的概念被淡化了,屏幕可以上下左右的拖動。所以此時分塊顯得非常必要,目的也就是產生邊的效果。
分塊可以用不同著色的色塊、框、細線、排列整齊的英文等等,還可以混合使用,但是注意不要過于醒目,因為頁面的重點在內容,而不在其他。
2、色彩的平衡與呼應。
1)色彩的平衡。色彩在頁面中可以形成很多的效果,通過強烈的對比,可以突出頁面的重點。還可以通過色彩調配,達到頁面穩重度的改變。一般的情況下,頁面上方的顏色總是很重,這樣才能壓住下面的顏色,如果不采取這種辦法,整個頁面將顯得很不穩重,底下的文字圖片,有飄出的意味。因此,要使整個頁面顯得很平衡,必須要有能鎮住其他顏色的色彩。
2)色彩的呼應。一種比較突出的色彩,如果很突兀地放在頁面中,無論你是突出重點也好,還是logo圖標,都給整個頁面帶來了副作用。為此,你必須在相對稱的位置加上該色系(對于頁面并不醒目)的色彩以呼應,這樣可以弱化這種視覺的沖擊。
3、精確到1個像素
如果你是一個成功的頁面設計者,你至少會在做出頁面前已經把整個頁面構思好了;如果你很寬容地對待圖片中1個像素的差別,那說明你還不是很合格。
posted @
2007-01-24 12:58 Q系列類、方法、變量…… 閱讀(187) |
評論 (0) |
編輯 收藏
您的電子商務每天都在變,您的通信地址會變,您的電話號碼會變,您的傳真、手機、BB機號碼會變,您的公司名稱也會變、您的雇員也會變。。。
唯有一樣東西不會變,您的網址!對于您的電子商務,您的網址是您最大的品牌。
用“有目共睹”來形容時下網站宣傳不過分。天上飄的,地下踩的,空氣中游的,到處彌漫著網址。現在連人們的聽覺都不放過,不信?如果您在上海的人民廣場地鐵車站,您就能聽到報站聲中也有網址。
人的觸覺、嗅覺不能感覺到網址。不然,網址可以溶解在水中沐浴您的皮膚,摻在空氣中讓您聞,調入飯菜里讓您嘗。
我們將所能見到的網站宣傳大致分類如下,您看看什么適合您,最大程度宣傳您的網址。
公眾出沒的地方:廣告牌、汽車外表、商店或公司招牌、街路橫幅、建筑物外墻、灌木與花草修剪圖案、路邊美化告示牌、招標牌、海報、集會向導牌、場館記分牌、地鐵站臺地面、商業街路面、游艇、氣球、空中飛機墜簾
媒體:電視臺、電臺、報紙、雜志、電影院廣告片、網絡本身
印刷品:黃頁、海報、實用小冊子、入場券、傳單、帳單、優惠券、郵局通知單、票據、價格表、時刻表、地圖、慈善事業發行物
公司對外聯絡:生意名片、公司信紙、信封、傳真抬頭、電子郵件、產品目錄、支票、傳單、公司或財務聲明、感謝信、競標書、文件夾、電話答錄機
產品附件:書簽、鼠標墊、坐墊、餐廳餐巾紙、紙杯、糖果包裹物、汽車垃圾袋、飲料杯、軟件banner廣告、瀏覽器收藏夾、屏保程序圖形、電子賀卡
禮品:購物袋、T恤衫,汗衫、帽子、領帶、雨傘、鑰匙圈、記事簿、筆、手提袋、粘貼小磁物、圖章、粘貼便條紙、畫板、臺歷、掛歷、拐杖、窗刷等清潔工具、牙刷剃須刀等工具
在合適的時間和場合,向合適的人宣傳您的網址,讓他人象背英語單詞一樣記住您的網址。
posted @
2007-01-24 12:58 Q系列類、方法、變量…… 閱讀(196) |
評論 (0) |
編輯 收藏
一. 什么是AJAX?
這個名字代表了異步JavaScript+ XMLHTTPRequest,并且意味著你可以在基于瀏覽器的JavaScript和服務器之間建立套接字通訊。其實AJAX并不是一種新技術,而是已經成功地用于現代瀏覽器中的若干成功技術的可能性組合。所有的AJAX應用程序實現了一種“豐富的”UI——這是通過JavaScript操作HTML文檔對象模型并且經由XMLHttpRequest實現的精確定位的數據檢索來實現的。典型的示例AJAX應用程序是Google Labs(
http://labs.google.com )的Google Maps和Google Suggest。這些應用程序現場監視用戶輸入并且提供實時的頁面更新。最重要的是,在用戶通過地圖導航或輸入一個查找字符串的同時,這些事件不需要刷新頁面。
事實上,支持這些令人感到驚訝的應用的技術已經出現一段時間了,盡管它們要求復雜的技能以及使用瀏覽器的技巧。一些專利產品就提供了相似的能力——如Macromedia Flash插件,Java Applets或.NET運行時——在達到實用上已經有一段時間了。把一種可與服務器通話的腳本組件引入到瀏覽器中的思想早在IE 5.0中就已經存在。Firefox和其它流行的瀏覽器也加入到瀏覽器大軍中并以一種內置對象形式支持XMLHTTPRequest。隨著跨平臺瀏覽器的出現,這些技術得到了認可并在2004年3月一家稱為Adaptive Path的公司中正式提出了AJAX。
簡而言之,由于來自于Google的支持和安裝了一點可用的瀏覽器技術,加上為了一種"更好的用戶體驗",每個人都在把客戶端技術添加到Web應用程序上。
二. AJAX與傳統應用程序的區別
一個傳統Web應用程序模型實際上是一種基本的事件——用戶被迫提交表單以實現頁面交換。也就是說,表單提交和頁面傳送無法得到保證:還有更壞的情形——用戶需要再次點擊。這與AJAX截然不同-——數據跨過線路而不是完整的HTML頁面傳輸。這種數據交換是經由特定的瀏覽器對象:XMLHttpRequest實現的;再由適當的邏輯來處理每個數據請求的結果,頁面的特定區域而不是完整的頁面被更新。結果是更快的速度,更少的擁擠和更好的信息傳送控制。
傳統型"click-refresh"Web應用程序強迫用戶中斷工作過程而等待頁面的重裝。通過引入AJAX技術,一個客戶端腳本能夠異步地與服務器通話,而用戶仍能保持輸入數據。除了對用戶透明之外,這樣的異步意味著服務器可以有更多時間來處理請求。
傳統Web應用程序把所有的處理代理到服務器并且強迫服務器進行狀態管理。AJAX允許靈活劃分應用程序邏輯以及客戶和服務器之間的狀態管理。這就消除了一種"click-refresh"依賴性并且提供更好的服務器可伸縮性。當該狀態存儲在客戶端,你就不必跨越服務器來維持會話或保存/結束狀態-其使用期限是由客戶端來定義的。
三. AJAX——分布式的MVC
盡管AJAX應用程序依靠JavaScript來實現描述層,然而處理能力和知識庫仍然存在于服務器上。此時,AJAX應用程序大量的與J2EE服務器通訊——把數據輸入/輸出Web服務和servlets。具有基于AJAX的描述層的J2EE應用程序和標準J2EE應用程序之間的區別首先在于,MVC是通過線路分布的。通過使用AJAX,視圖是本地的,而模型和控制器是分布式的——這使得開發者能夠靈活地決定哪些部件會是基于客戶端的。具體地說,本地視圖通過巧妙地操作HTML DOM而生成圖形;控制器局部地處理用戶輸入并且根據開發者的判斷擴展到服務器的處理——經由HTTP請求(Web服務,XML/RPC或其它)實現;模型的遠程部分是根據客戶端需要而下載的以達到實時更新客戶端頁面;并且狀態是在客戶端收集的。
在以后的AJAX文章中,我們將比較深入地討論這里的每一種組件并提供有關它們聯合在一起進行應用的示例。現在,先不多說,讓我們詳細地分析一個簡單的AJAX示例。
四. 郵政區號校驗和查詢
我們將創建一個包含三個INPUT字段(Zip,City和 State)的HTML頁面。我們將保證,只要用戶輸入郵政區號的前三個數字,該頁面上的字段就會用第一個匹配的狀態值填充。一旦用戶輸入了所有五位郵政區號數,我們將立即決定和填充相應的城市。如果郵政區號無效(在服務器的數據庫沒有找到),那么我們將把郵政區號的邊界設置為紅色。這樣的可視化線索有助于用戶并且在現代瀏覽器中已經成為一種標準(作為一實例,當Firefox找到一個HTML頁面中的匹配關鍵字時,它會高亮與你在瀏覽器查找域輸入的內容一致的部分)。
讓我們首先創建一個簡單的包含三個INPUT字段的 HTML:zip,city和state。請注意,一旦一個字符輸入進郵政區號字段域中,即調用方法zipChanged()。JavaScript函數 zipChanged()(見下)在當zip長度為3時調用函數updateState(),而在當zip長度為5時調用函數up-dateCity ()。而updateCity()和updateState()把大部分的工作代理到另一個函數ask()。
Zip:<input id="zipcode" type="text" maxlength="5" onKeyUp="zipChanged()"
style="width:60"/>
City: <input id="city" disabled maxlength="32" style="width:160"/>
State:<input id="state" disabled maxlength="2" style="width:30"/>
<script src="xmlhttp.js"></script>
<script>
var zipField = null;
function zipChanged(){
zipField = document.getElementById("zipcode")
var zip = zipField.value;
zip.length == 3?updateState(zip):zip.length == 5?updateCity(zip):"";
}
function updateState(zip) {
var stateField = document.getElementById("state");
ask("resolveZip.jsp?lookupType=state&zip="+zip, stateField, zipField);
}
function updateCity(zip) {
var cityField = document.getElementById("city");
ask("resolveZip.jsp? lookupType=city&zip="+zip, cityField, zipField);
}
</script>
? ?函數ask()與服務器進行通訊并分配一個回調函數來處理服務器的響應(見下列代碼)。后面,我們將分析具有雙重特點的resolveZip.jsp的內容-它根據zip字段中的字符數查找city或state信息。重要的是,ask()使用了具有異步特點的XmlHttpRequest,這樣填充 state和city字段或著色zip字段邊界就可以不必減慢數據入口而得以實現。首先,我們調用request.open()-它用服務器打開套接字頻道,使用一個HTTP動詞(GET或POST)作為第一個參數并且以數據提供者的URL作為第二個參數。request.open()的最后一個參數被設置為true-它指示該請求的異步特性。注意,該請求還沒有被提交。隨著對request.send()的調用,開始提交-這可以為POST提供任何必要的有效載荷。在使用異步請求時,我們必須使用request.onreadystatechanged屬性來分配請求的回調函數。(如果請求是同步的話,我們應該能夠在調用request.send之后立即處理結果,但是我們也有可能阻斷用戶,直到該請求完成為止。)
HTTPRequest = function () {
var xmlhttp=null;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (_e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (_E) { }
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
function ask(url, fieldToFill, lookupField) {
var http = new HTTPRequest();
http.open("GET", url, true);
http.onreadystatechange = function (){ handleHttpResponse(http, fieldToFill,lookupField)};
http.send(null);
}
function handleHttpResponse(http, fieldToFill, lookupField) {
if (http.readyState == 4) {
result = http.responseText;
if ( -1 != result.search("null") ) {
lookupField.style.borderColor = "red";
fieldToFill.value = "";
} else {
lookupField.style.borderColor = "";
fieldToFill.value = result;
}
}
}
為ask()所使用的HttpRequest()函數(見上)是一跨瀏覽器的XMLHTTPRequest的一個實例的構造器;稍后我們將分析它。到目前為止,請注意對于handleResponse()的調用是如何用一匿名函數包裝的-這個函數是function() {handleHttpResponse(http,fieldToFill, lookupField)}。
該函數的代碼是動態創建的并且在每次我們給http.onreadstatechange屬性賦值時被編譯。結果,JavaScript創建一個指向上下文(所有的變量都可以存取正在結束的方法-ask())的指針。這樣以來,匿名函數和handleResponse()就能夠被保證充分存取所有的上下文宿主的變量,直至到匿名函數的參考被垃圾回收站收集為止。換句話說,無論何時我們的匿名函數被調用,它都能無縫地參考request, fieldToFill和lookupField變量,就象它們是全局的一樣。而且,每次ask()調用都將創建環境的一個獨立拷貝,并且此時這些變量中保存有該函數將結束時的值。
現在,讓我們分析一下函數handleResponse()。既然它能夠在請求處理的不同狀態下激活,那么該函數將忽略所有的情形-除了該請求處理完成之外-這相應于request.readyState屬性等于4("Completed")。此時,該函數讀取服務器的響應文本。與它的名字所暗示的相反,XmlHttpRequest的輸入和輸出都不必限于XML格式。特別地,我們的resolveZip.jsp(見源碼中的列表1)返回普通文本。如果返回值為"unknown",那么該函數將假定郵政區號是無效的并且把查找字段(zip)邊界顏色置為紅色。否則,返回值被用于填充字段state或 city,并且zip的邊界被賦予一種缺省顏色。
XMLHttpRequest-傳輸對象
讓我們返回到我們的XMLHTTPRequest的跨瀏覽器實現。最后一個列表包含一個HttpRequest()函數-它向上兼容于IE5.0和 Mozilla 1.8/FireFox。為簡化起見,我們只創建一個微軟XMLHTTPRequest對象,而且如果創建失敗,我們假定它是 Firefox/Mozilla。
該函數的核心是XMLHTTPRequest-這是一個本機瀏覽器對象,它為包括HTTP協議的任何東西與服務器之間的通訊提供方便。它允許指定任何 HTTP動詞,頭部和有效載荷,并且能夠以異步或同步方式工作。不需要下載也不需要安裝任何插件-盡管在IE的情形下,XMLHTTPRequest是一個集成到瀏覽器內部的ActiveX。因而,"Run ActiveX Control and Plugins"默認IE權限應該正好適合使用它。
最重要的是,XMLHTTPRequest允許一個到服務器的RPC風格的編程查詢而不需要任何頁面刷新。它以一種可預測的,可控制的方式來實現此-提供了到HTTP協議的所有細節的完整存取-包括頭部和數據的任何定制格式。在以后的文章中,我們將向你展示其它一些業界協議-你可以在這些傳輸協議(如 Web服務和XML-RPC)之上運行-它們極大地簡化大規模應用程序的開發和維護。
五.服務器端邏輯
最后,服務器端的resolveZip.jsp被從函數ask()中調用(見所附源碼中的列表1)。這個resolveZip.jsp在兩種由當前的郵政區號長度所區分的獨立的場所下被調用(見zipChanged()函數)。請求參數lookupType的值或者是state或者是city。為簡化起見,我們將假定,兩個文件state.properties和city.properties都位于服務器中C驅動器的根目錄下。 resolveZip.jsp邏輯負責用適當的預裝載的文件返回查找值。
我們的支持AJAX的頁面現在已經準備好了。
六.遠程腳本技術-一種可選方法
一些更舊的AJAX實現是基于所謂的遠程腳本技術。這種思想是,用戶的行為導致經由IFRAME對服務器進行查詢,而服務器用JavaScript作出響應,該腳本一旦到達客戶端立即被執行。這與XMLHttpRequest方法相比存在較大的區別,在后者情況下,服務器響應數據而客戶端解釋數據。其好處是這種解決方案支持更舊的瀏覽器。
基于IFRAME示例的HTML部分(見所附源碼中的列表2)與我們在XMLHTTPRequest場合下所用的極相似,但是這次我們將引入另外一個IFRAME元素-controller:
Zip:<input id="zipcode" type="text" maxlength="5" onKeyUp="zipChanged()"
style="width:60" size="20"/>
City: <input id="city" disabled maxlength="32" style="width:160" size="20"/>
State:<input id="state" disabled maxlength="2" style="width:30" size="20"/>
<iframe id="controller" style="visibility:hidden;width:0;height:0"></iframe>
我們保持每次擊鍵都調用zipChanged()一次,但是這一次,從zipChanged()中被調用的函數ask()(見所附源碼中的列表3)負責設置IFRAME的src屬性,而不是調用一個XMLHTTPRequest:
function ask(url, fieldToFill, lookupField){
var controller = document.getElementById("controller");
controller.src= url+"&field="+fieldToFill.id+"&zip="+lookupField.id;
}
服務器端邏輯由一個粗略的resolveZip.jsp(見所附源碼中的列表4)所描述。它與它的XMLHTTPRequest對應物相區別-它返回 JavaScript語句,這些語句設置變量字段lookup和city的全局值,而且一旦它到達瀏覽器即從全局窗口的執行上下文中調用函數 response()。
函數response()是一修改版本的handleResponse()-這一函數可以免于處理未完成的請求(詳見本文所附源碼中的列表2)。
七. 難題
為簡化起見,讓我們"俯看"一下在我們的示例代碼中的一些重要的問題:
1.事實-XMLHTTPRequest對象實例和回調函數調用在被使用以后并沒被破壞-在每次調用后這有可能導致內存泄漏。適當編寫的代碼應該破壞或重用對象池中的這些實例。而且,客戶端必須使用與服務器軟件相同的對象管理技術。
2.在大多數情況下,錯誤往往得不到有效處理。例如,在方法ask()中對request.open()的調用可能引發一個異常,這是必須要捕獲和處理的,即使在瀏覽器中沒有設置JavaScript異常自動捕獲功能。而handleResponse()函數又是另外一個例子。它必須要為可能的服務器端和通訊錯誤而檢查headers和responseText值。在發生錯誤的情況下,它必須盡力恢復并/或者報告錯誤。正確開發的AJAX應用程序要盡可能避免"提交"松散的數據,因為往往存在線路斷開和其它低級通訊的問題-所以這些程序必須建立一個強壯的和自恢復的框架為此提供支持。
3.當前服務器端框架提供相當多的功能-它們可以與一種自由刷新方法和諧相處。例如,讓我們考慮一個定制的在指定時間內的服務器端認證的問題。在這種情況下,我們必須攔截到XMLHTTPRequest調用的安全系統響應,顯示登錄屏幕,然后在用戶被認證后重新發出請求。
所有的這些問題只是一些典型的用低級API工作的任何應用程序代碼,而且所有這些問題都能被解決。好消息是,解決這些問題所需要的技術十分相似于大多數Java開發技術,如Web服務,定制標簽和XML/XSLT。唯一的區別在于,現在這些技術以下列形式用于客戶端:
·Web服務-使用SOAP/REST/RPC等簡單通訊標準
·客戶端定制標簽-打包豐富的客戶端控件并集成AJAX功能
·數據操作-基于XML和基于XSLT技術
八. 小結
AJAX方法能夠向人們提供一種與桌面應用程序相同的豐富的互聯網體驗。但是,我們必須有選擇地使用AJAX技術,如當你仍在線購物時,你絕對不想讓你的信用卡通過后臺處理就悄悄地開始付款。AJAX會成為一種持續的動力嗎?我們當然希望這樣。在過去的五年時間內我們一直在努力開發AJAX應用程序并且能證明它是健全并且很有效的。然而,它要求一個開發者必須精通大量技術而不是在傳統的"click-refresh"Web應用程序中所使用的那些。
posted @
2007-01-24 12:56 Q系列類、方法、變量…… 閱讀(189) |
評論 (0) |
編輯 收藏
功能齊全的發送PHP郵件類
PHP--下面這個類的功能則很強大,不但能發html格式的郵件,還可以發附件
<?php
class Email {
//---設置全局變量
var $mailTo = ""; // 收件人
var $mailCC = ""; // 抄送
var $mailBCC = ""; // 秘密抄送
var $mailFrom = ""; // 發件人
var $mailSubject = ""; // 主題
var $mailText = ""; // 文本格式的信件主體
var $mailHTML = ""; // html格式的信件主體
var $mailAttachments = ""; // 附件
/* 函數setTo($inAddress) :用于處理郵件的地址 參數 $inAddress
為包涵一個或多個字串,email地址變量,使用逗號來分割多個郵件地址
默認返回值為true
**********************************************************/
function setTo($inAddress){
//--用explode()函數根據”,”對郵件地址進行分割
$addressArray = explode( ",",$inAddress);
//--通過循環對郵件地址的合法性進行檢查
for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; }
//--所有合法的email地址存入數組中
$this->mailTo = implode($addressArray, ",");
return true; }
/**************************************************
函數 setCC($inAddress) 設置抄送人郵件地址
參數 $inAddress 為包涵一個或多個郵件地址的字串,email地址變量,
使用逗號來分割多個郵件地址 默認返回值為true
**************************************************************/
function setCC($inAddress){
//--用explode()函數根據”,”對郵件地址進行分割
$addressArray = explode( ",",$inAddress);
//--通過循環對郵件地址的合法性進行檢查
for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; }
//--所有合法的email地址存入數組中
$this->mailCC = implode($addressArray, ",");
return true; }
/***************************************************
函數setBCC($inAddress) 設置秘密抄送地址 參數 $inAddress 為包涵一個或多
個郵件地址的字串,email地址變量,使用逗號來分割多個郵件地址 默認返回值為
true
******************************************/
function setBCC($inAddress){
//--用explode()函數根據”,”對郵件地址進行分割
$addressArray = explode( ",",$inAddress);
//--通過循環對郵件地址的合法性進行檢查
for($i=0;$i<count($addressArray);$i++)
{ if($this->checkEmail($addressArray[$i])==false)
return false;
}
//--所有合法的email地址存入數組中
$this->mailBCC = implode($addressArray, ",");
return true;
}
/*****************************************************************
函數setFrom($inAddress):設置發件人地址 參數 $inAddress 為包涵郵件
地址的字串默認返回值為true
***************************************/
function setFrom($inAddress){
if($this->checkEmail($inAddress)){
$this->mailFrom = $inAddress;
return true;
} return false; }
/**********************
函數 setSubject($inSubject) 用于設置郵件主題參數$inSubject為字串,
默認返回的是true
*******************************************/
function setSubject($inSubject){
if(strlen(trim($inSubject)) > 0){
$this->mailSubject = ereg_replace( "n", "",$inSubject);
return true; }
return false; }
/****************************************************
函數setText($inText) 設置文本格式的郵件主體參數 $inText 為文本內容默
認返回值為true
****************************************/
function setText($inText){
if(strlen(trim($inText)) > 0){
$this->mailText = $inText;
return true; }
return false;
}
/**********************************
函數setHTML($inHTML) 設置html格式的郵件主體參數$inHTML為html格式,
默認返回值為true
************************************/
function setHTML($inHTML){
if(strlen(trim($inHTML)) > 0){
$this->mailHTML = $inHTML;
return true; }
return false; }
/**********************
函數 setAttachments($inAttachments) 設置郵件的附件 參數$inAttachments
為一個包涵目錄的字串,也可以包涵多個文件用逗號進行分割 默認返回值為true
*******************************************/
function setAttachments($inAttachments){
if(strlen(trim($inAttachments)) > 0){
$this->mailAttachments = $inAttachments;
return true; }
return false; }
/*********************************
函數 checkEmail($inAddress) :這個函數我們前面已經調用過了,主要就是
用于檢查email地址的合法性
*****************************************/
function checkEmail($inAddress){
return (ereg( "^[^@ ]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));
}
/*************************************************
函數loadTemplate($inFileLocation,$inHash,$inFormat) 讀取臨時文件并且
替換無用的信息參數$inFileLocation用于定位文件的目錄
$inHash 由于存儲臨時的值 $inFormat 由于放置郵件主體
***********************************************************/
function loadTemplate($inFileLocation,$inHash,$inFormat){
/* 比如郵件內有如下內容: Dear ~!UserName~,
Your address is ~!UserAddress~ */
//--其中”~!”為起始標志”~”為結束標志
$templateDelim = "~";
$templateNameStart = "!";
//--找出這些地方并把他們替換掉
$templateLineOut = ""; //--打開臨時文件
if($templateFile = fopen($inFileLocation, "r")){
while(!feof($templateFile)){
$templateLine = fgets($templateFile,1000);
$templateLineArray = explode($templateDelim,$templateLine);
for( $i=0; $i<count($templateLineArray);$i++){
//--尋找起始位置
if(strcspn($templateLineArray[$i],$templateNameStart)==0){
//--替換相應的值
$hashName = substr($templateLineArray[$i],1);
//--替換相應的值
$templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);
}
}
//--輸出字符數組并疊加
$templateLineOut .= implode($templateLineArray, "");
} //--關閉文件fclose($templateFile);
//--設置主體格式(文本或html)
if( strtoupper($inFormat)== "TEXT" )
return($this->setText($templateLineOut));
else if( strtoupper($inFormat)== "HTML" )
return($this->setHTML($templateLineOut));
} return false;
}
/*****************************************
函數 getRandomBoundary($offset) 返回一個隨機的邊界值
參數 $offset 為整數 – 用于多管道的調用 返回一個md5()編碼的字串
****************************************/
function getRandomBoundary($offset = 0){
//--隨機數生成
srand(time()+$offset);
//--返回 md5 編碼的32位 字符長度的字串
return ( "----".(md5(rand()))); }
/********************************************
函數: getContentType($inFileName)用于判斷附件的類型
**********************************************/
function getContentType($inFileName){
//--去除路徑
$inFileName = basename($inFileName);
//--去除沒有擴展名的文件
if(strrchr($inFileName, ".") == false){
return "application/octet-stream";
}
//--提區擴展名并進行判斷
$extension = strrchr($inFileName, ".");
switch($extension){
case ".gif": return "image/gif";
case ".gz": return "application/x-gzip";
case ".htm": return "text/html";
case ".html": return "text/html";
case ".jpg": return "image/jpeg";
case ".tar": return "application/x-tar";
case ".txt": return "text/plain";
case ".zip": return "application/zip";
default: return "application/octet-stream";
}
return "application/octet-stream";
}
/**********************************************
函數formatTextHeader把文本內容加上text的文件頭
*****************************************************/
function formatTextHeader(){ $outTextHeader = "";
$outTextHeader .= "Content-Type: text/plain;
charset=us-asciin";
$outTextHeader .= "Content-Transfer-Encoding: 7bitnn";
$outTextHeader .= $this->mailText. "n";
return $outTextHeader;
} /************************************************
函數formatHTMLHeader()把郵件主體內容加上html的文件頭
******************************************/
function formatHTMLHeader(){
$outHTMLHeader = "";
$outHTMLHeader .= "Content-Type: text/html;
charset=us-asciin";
$outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn";
$outHTMLHeader .= $this->mailHTML. "n";
return $outHTMLHeader;
}
/**********************************
函數 formatAttachmentHeader($inFileLocation) 把郵件中的附件標識出來
********************************/
function formatAttachmentHeader($inFileLocation){
$outAttachmentHeader = "";
//--用上面的函數getContentType($inFileLocation)得出附件類型
$contentType = $this->getContentType($inFileLocation);
//--如果附件是文本型則用標準的7位編碼
if(ereg( "text",$contentType)){
$outAttachmentHeader .= "Content-Type: ".$contentType. ";n";
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'. "n";
$outAttachmentHeader .= "Content-Transfer-Encoding: 7bitn";
$outAttachmentHeader .= "Content-Disposition: attachment;n";
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'. "nn";
$textFile = fopen($inFileLocation, "r");
while(!feof($textFile)){
$outAttachmentHeader .= fgets($textFile,1000);
}
//--關閉文件 fclose($textFile);
$outAttachmentHeader .= "n";
}
//--非文本格式則用64位進行編碼
else{ $outAttachmentHeader .= "Content-Type: ".$contentType. ";n";
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'. "n";
$outAttachmentHeader .= "Content-Transfer-Encoding: base64n";
$outAttachmentHeader .= "Content-Disposition: attachment;n";
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'. "nn";
//--調用外部命令uuencode進行編碼
exec( "uuencode -m $inFileLocation nothing_out",$returnArray);
for ($i = 1; $i<(count($returnArray)); $i++){
$outAttachmentHeader .= $returnArray[$i]. "n";
}
} return $outAttachmentHeader;
}
/******************************
函數 send()用于發送郵件,發送成功返回值為true
************************************/
function send(){
//--設置郵件頭為空
$mailHeader = "";
//--添加抄送人
if($this->mailCC != "")
$mailHeader .= "CC: ".$this->mailCC. "n";
//--添加秘密抄送人
if($this->mailBCC != "")
$mailHeader .= "BCC: ".$this->mailBCC. "n";
//--添加發件人
if($this->mailFrom != "")
$mailHeader .= "FROM: ".$this->mailFrom. "n";
//---------------------------郵件格式------------------------------
//--文本格式
if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){
return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);
}
//--html或text格式
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){
$bodyBoundary = $this->getRandomBoundary();
$textHeader = $this->formatTextHeader();
$htmlHeader = $this->formatHTMLHeader();
//--設置 MIME-版本
$mailHeader .= "MIME-Version: 1.0n";
$mailHeader .= "Content-Type: multipart/alternative;n";
$mailHeader .= ' boundary="'.$bodyBoundary. '"';
$mailHeader .= "nnn";
//--添加郵件主體和邊界
$mailHeader .= "--".$bodyBoundary. "n";
$mailHeader .= $textHeader;
$mailHeader .= "--".$bodyBoundary. "n";
//--添加html標簽
$mailHeader .= $htmlHeader;
$mailHeader .= "n--".$bodyBoundary. "--";
//--發送郵件
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);
}
//--文本加html加附件
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){
$attachmentBoundary = $this->getRandomBoundary();
$mailHeader .= "Content-Type: multipart/mixed;n";
$mailHeader .= ' boundary="'.$attachmentBoundary. '"'. "nn";
$mailHeader .= "This is a multi-part message in MIME format.n";
$mailHeader .= "--".$attachmentBoundary. "n";
$bodyBoundary = $this->getRandomBoundary(1);
$textHeader = $this->formatTextHeader();
$htmlHeader = $this->formatHTMLHeader();
$mailHeader .= "MIME-Version: 1.0n";
$mailHeader .= "Content-Type: multipart/alternative;n";
$mailHeader .= ' boundary="'.$bodyBoundary. '"';
$mailHeader .= "nnn";
$mailHeader .= "--".$bodyBoundary. "n";
$mailHeader .= $textHeader;
$mailHeader .= "--".$bodyBoundary. "n";
$mailHeader .= $htmlHeader;
$mailHeader .= "n--".$bodyBoundary. "--";
//--獲取附件值
$attachmentArray = explode( ",",$this->mailAttachments);
//--根據附件的個數進行循環
for($i=0;$i<count($attachmentArray);$i++){
//--分割 $mailHeader .= "n--".$attachmentBoundary. "n";
//--附件信息
$mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]);
}
$mailHeader .= "--".$attachmentBoundary. "--";
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);
}
return false;
}
}
?>
使用方法:
<?
Include “email.class”
$mail->setTo("a@a.com"); //收件人
$mail-> setCC("b@b.com,c@c.com"); //抄送
$mail-> setCC("d@b.com,e@c.com"); //秘密抄送
$mail->setFrom(“f@f.com”);//發件人
$mail->setSubject(“主題”) ; //主題
$mail->setText(“文本格式”) ;//發送文本格式也可以是變量
$mail->setHTML(“html格式”) ;//發送html格式也可以是變量
$mail->setAttachments(“c:a.jpg”) ;//添加附件,需表明路徑
$mail->send(); //發送郵件
posted @
2007-01-24 12:56 Q系列類、方法、變量…… 閱讀(178) |
評論 (0) |
編輯 收藏