狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

開(kāi)發(fā)基于Web的CSS設(shè)計(jì)器.代碼參考

開(kāi)發(fā)基于Web的CSS設(shè)計(jì)器.代碼參考

更新時(shí)間:2024-04-09 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

這里對(duì)前面文章講的CSS設(shè)計(jì)器系統(tǒng)關(guān)鍵代碼作一些小結(jié),如果沒(méi)有看過(guò)前面文章的請(qǐng)先參看"開(kāi)發(fā)基于Web的CSS設(shè)計(jì)器"


解析CSS樣式文件

這段代碼主要作用是把CSS文件分解為多個(gè)樣式類,并按名稱/文本屬性生成ClassItem對(duì)象,并保存在一個(gè)ArrayList(cssList)中(C#代碼)

//讀取文件
FileInfo theSource= new FileInfo (@m_filePath);
StreamReader reader = theSource.OpenText();
//將文件流轉(zhuǎn)化為文本
m_cssText = reader.ReadToEnd();
reader.Close();
//定義CSS文本分割符
char[] delimiters = new char[] { '{','}'};
int iCheck = 1;
string className = null;
//將文本轉(zhuǎn)化為ArrayList
foreach ( string substring in m_cssText.Split(delimiters))
{
if (iCheck%2==0)
//當(dāng)iCHeck為偶數(shù)時(shí),字符串為樣式屬性內(nèi)容
//將解析的樣式名和屬性作為ClassItem對(duì)象存入cssList
cssList.Add( new ClassItem ( className, substring.Trim() ) );
else
//當(dāng)iCHeck為奇數(shù)時(shí),字符串為樣式名,暫存
className = substring.Trim();
iCheck++;
}




交互界面構(gòu)建

交互界面由Javascript通過(guò)XmlDocument讀取Xml文件動(dòng)態(tài)生成。

首先要讀取XML文件,然后遍歷整個(gè)XML文件,先遍歷樣式分類,再對(duì)每個(gè)分類遍歷其下的所有樣式屬性。比較關(guān)鍵的代碼是對(duì)XML的遍歷,下面是對(duì)樣式分類的遍歷代碼。


//LoadXML是XML文件讀取函數(shù)
var dom = LoadXML("css.xml");
//通過(guò)XPath和selectNodes方法返回一個(gè)XMLDOMNodeList對(duì)象
var oNode = dom.selectNodes("//Category/Name");
//獲取該對(duì)象長(zhǎng)度,即XML文檔中該路徑節(jié)點(diǎn)的數(shù)量
var intCategory = oNodes.length;
for (i=0; i<intCategory; i++)
{
//獲取集合中的節(jié)點(diǎn)
oNode = oNodes.nextNode;
if (oNode != null)
{
//樣式分類界面構(gòu)建代碼-略
……
}
}




樣式輸入控件構(gòu)建函數(shù),該函數(shù)作用是根據(jù)XPath路徑查詢XML定義,生成交互控件


function BuildInput ( path )
{
var str="";
var aNode=null;
var attValue=null;
//通過(guò)selectSingleNode返回符合條件的第一個(gè)節(jié)點(diǎn)
var actNode = dom.selectSingleNode(path+"ActionType");
var nameNode = dom.selectSingleNode(path+"CssName");
//如果屬性為選擇輸入,則讀取SelectItems,并構(gòu)建select控件
if (actNode.text=="select")
{
str += "<select id='"+nameNode.text+"' name='"+nameNode.text+"' class='eSelect'>\n";

//查詢?cè)擁?xiàng)的所有選擇列表項(xiàng)
var itemsNodes = dom.selectNodes (path+"SelectItems/Item");
str += "<option value='-1'>未設(shè)置</option>\n";
for (ii=0;ii<itemsNodes.length;ii++)
{
aNode = dom.selectSingleNode (path+"SelectItems/Item["+ii+"]");

//如果該項(xiàng)含有Name屬性則在列表中顯示Name屬性值
attValue = aNode.getAttribute("Name")
var txtNode = dom.selectSingleNode (path+"SelectItems/Item["+ii+"]");

if (attValue==null)
str += "<option value='"+txtNode.text+"'>"+txtNode.text+"</option>\n";
else
str += "<option value='"+txtNode.text+"'>"+attValue+"</option>\n";
}

str += "</select>";
}
else

//如果屬性為其他模式,則構(gòu)建input輸入,設(shè)置class屬性為ActionType
{
str = "<input name='"+nameNode.text+"' id='"+nameNode.text+"' class='"+actNode.text+"'>\n";
}

return(str);
}





設(shè)計(jì)器初始化

Js腳本讀取解析樣式元素的style屬性值,然后為設(shè)計(jì)器中構(gòu)建的控件賦值


//設(shè)計(jì)器初始化
function Init()
{
//獲得由服務(wù)器端賦值的樣式屬性值
var txt=document.all("DemoShow").style.cssText;
if (txt.length>0)
{
var strClassName;

//解析字符串
var aryClass = txt.split(/[:;]/);
for( i in aryClass)
{
var str = aryClass[i].replace(/(^\s*)|(\s*$)/g, "");
if(!(i%2==1))
{
//當(dāng)i為奇數(shù)時(shí),解析的字符串應(yīng)該為樣式屬性名稱
strClassName=str;
}
else
{
//當(dāng)i為偶數(shù)時(shí),獲得屬性值
//屬性名稱即控件ID
//判斷該屬性對(duì)應(yīng)的控件是輸入框還是選擇列表
if(document.all(strClassName).type=="select-one")
{

//如果是選擇列表通過(guò)setIndexOfValue函數(shù)設(shè)定選擇項(xiàng)
setIndexOfValue(strClassName,str);

}
else
{
document.all(strClassName).value=str;
}
}
i++;
}
}
}





界面交互

在XML中一共定義了select/input_ColorSelect/input_SizeSelect/input_BorderSelect(后3種為顏色/大小/邊框輸入模式)共4種輸入模式,除select為直接選擇外,其他在對(duì)應(yīng)控件初始化的時(shí)候作為class屬性賦值到控件中,類似class代碼如下


/* 顏色輸入模式input框的樣式類 */
.input_ColorSelect{
width:100px;
font-family:Tahoma;
behavior:url(htc/effColorSelect.htc);
}




通過(guò)behavior屬性,把該輸入控件和相應(yīng)的組件相關(guān)聯(lián),該組件effColorSelect.htc代碼如下


<PUBLIC:ATTACH EVENT="onfocus" ONEVENT="getShow()"/>
<PUBLIC:METHOD NAME="getChange"/>
<SCRIPT LANGUAGE="JScript">
function getShow()
{
element.blur();

//記錄當(dāng)前交互控件的ID
effElement=element.id;
//在頁(yè)面中加載輸入控件
ShowControl ("SelectColor");
}

function getChange()
{
//當(dāng)值發(fā)生變化時(shí),對(duì)可視化樣式元素賦值
SetAttribute(element.id,element.value);
}
</SCRIPT>






其他

設(shè)計(jì)器中的值輸入模式框只是頁(yè)面中的幾個(gè)層,通過(guò)上面的htc組件觸發(fā)顯示出來(lái),輸入后再把值傳入到樣式屬性控件中,同時(shí)也會(huì)設(shè)置可視化樣式元素。

另外還需要注意的是,XML文檔是可以自行擴(kuò)展或縮減的,但是在實(shí)際應(yīng)用中,不能完全依據(jù)CSS標(biāo)準(zhǔn)來(lái)定義,因?yàn)榭梢暬氐膕tyle屬性會(huì)自動(dòng)格式化。例如如果你在XML中定義border-bottom-width屬性,在將值取出時(shí)會(huì)自動(dòng)格式化為border-bottom,這樣會(huì)造成設(shè)計(jì)器中控件不能匹配。我在MSDN沒(méi)有查到相關(guān)文檔,所以只有經(jīng)過(guò)實(shí)際測(cè)試來(lái)驗(yàn)證。


OK,比較關(guān)鍵的代碼已經(jīng)差不多了……希望能對(duì)大家有所幫助。


參考

另外再列出部分技術(shù)參考,如果大家對(duì)其中的技術(shù)細(xì)節(jié)如HTC和XmlDom等有所疑問(wèn),可以再詳細(xì)研究一下,也歡迎大家來(lái)和我交流 linnchord@tom.com 。

MSDN關(guān)于JS操作XmlDom的文檔
這是英文文檔,網(wǎng)上沒(méi)有看到比較詳細(xì)的中文文檔,好在不復(fù)雜,大家將就一下吧 :)
(最近MSDN不知道什么毛病,經(jīng)常訪問(wèn)有問(wèn)題,如果無(wú)法訪問(wèn),請(qǐng)先登錄msdn,再輸入地址瀏覽)

藍(lán)色理想的HTC教程
網(wǎng)上也沒(méi)看見(jiàn)比較全面的講述,這個(gè)簡(jiǎn)單易學(xué),基本概念清楚了。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
国产伦精品一区二区三区照片91| 亚洲无毛电影| 国产在线看一区| 日韩欧美成人一区二区| 舔着乳尖日韩一区| 国产福利精品一区| 欧美一区影院| 欧美一级一区二区| 一区二区三区在线不卡| 老色鬼精品视频在线观看播放| 99精品久久久久久| 精品视频一区二区三区免费| 久久人人超碰精品| 免费黄网站欧美| av中文字幕一区| 久久久777| 欧美一区二区成人6969| 国产精品88av| 欧美性videosxxxxx| 欧美一卡二卡三卡| 在线观看不卡一区| 亚洲在线视频免费观看| 欧美人伦禁忌dvd放荡欲情| 国产一区二区在线观看免费播放| 亚洲黄色天堂| 麻豆中文一区二区| 日韩精品在线看片z| 欧美日韩一区不卡| 在线看国产一区二区| 在线精品亚洲一区二区不卡| 在线亚洲欧美| 麻豆国产精品一区二区三区| 亚洲一区二区综合| 午夜伦欧美伦电影理论片| 亚洲免费在线视频一区 二区| 一区二区三区成人精品| 日本丶国产丶欧美色综合| 婷婷综合在线观看| 91免费版在线看| 97精品久久久午夜一区二区三区 | 尤妮丝一区二区裸体视频| 91浏览器打开| 日韩欧美三级在线| 国产剧情一区二区三区| 亚洲国产日韩美| 亚洲国产精品av| 久久这里只精品最新地址| 老妇喷水一区二区三区| 国产一区二区在线免费观看| 国产精品视频一二三区| 欧美在线短视频| 26uuu另类欧美| 亚洲丝袜自拍清纯另类| 在线日韩一区二区| 日韩欧美国产一区二区在线播放| 欧美激情中文字幕| 青青草视频一区| 91免费观看在线| 91九色最新地址| 国产精品国产三级国产普通话99| 欧美日韩在线不卡一区| 亚洲欧美视频在线观看视频| 国产精品理论在线观看| 久久66热偷产精品| 国产精品毛片久久久久久久| 国产成人精品免费网站| 国产精品久久精品日日| 91精品午夜视频| 久久99精品网久久| 伊人蜜桃色噜噜激情综合| 亚洲电影自拍| 亚洲欧洲精品一区二区| 久久狠狠婷婷| 久久人人97超碰com| 国产精品久久一卡二卡| 国产一区免费电影| 欧亚洲嫩模精品一区三区| 亚洲日本欧美天堂| 亚洲色图欧美偷拍| 激情亚洲网站| 国产婷婷色一区二区三区在线| 风间由美一区二区三区在线观看 | 国产成人在线影院| 亚洲美女一区| 欧美日韩在线一区二区| 欧美精品丝袜中出| 欧美影视一区在线| 日本成人超碰在线观看| 国产精品全国免费观看高清| 不卡在线观看av| a亚洲天堂av| 日韩综合小视频| 日韩欧美一二三区| 在线视频观看日韩| 国产一级精品在线| 中文字幕一区二区三区在线不卡 | 91浏览器在线视频| 久久综合九色| 精品少妇一区二区三区视频免付费 | 成人性生交大合| 国产专区一区| 在线观看日韩电影| 国产一区二区三区四区在线观看| 国产亚洲精久久久久久| 亚洲丝袜另类动漫二区| 国产精品女同互慰在线看| 韩日视频一区| 久久久久久免费| 亚洲午夜91| 亚洲电影一级片| 在线综合视频播放| 国产一区二区美女| 亚洲高清久久久| 欧美一区二区黄| 欧美日韩精品免费观看视频完整| 国产喂奶挤奶一区二区三区| 国产精品免费区二区三区观看| 国产精品一区二区在线看| 中文字幕日韩一区二区| 亚洲精品乱码| 亚洲天堂成人| 日韩黄色一级片| 日韩欧美www| 国产精品免费区二区三区观看| 美女视频网站久久| 日韩欧美一二三四区| 欧美日韩视频在线一区二区观看视频| 成人免费黄色大片| 免费美女久久99| 久久综合久久综合亚洲| 国产精品毛片一区二区三区| 亚洲动漫第一页| 五月婷婷综合在线| 午夜视频久久久久久| 视频一区欧美日韩| 欧美精品一区二区三区蜜桃| 国产一区日韩一区| 日日噜噜夜夜狠狠视频欧美人| 中文字幕乱码久久午夜不卡| 欧美视频你懂的| 久久人人97超碰人人澡爱香蕉| 国内成人免费视频| 五月天一区二区| 日本不卡免费在线视频| 成人小视频在线| 国产成人精品免费视频网站| 久久不见久久见免费视频7| 亚洲第一成人在线| 日产国产高清一区二区三区| 亚洲一本大道在线| 午夜国产精品影院在线观看| 99re免费视频精品全部| 欧美日韩国产一区精品一区| 成人黄页在线观看| 91网址在线看| 婷婷成人综合网| 国内成人自拍视频| 亚洲永久字幕| 欧美韩国日本不卡| 美女网站一区二区| 国精品**一区二区三区在线蜜桃| 午夜精品久久久| 国产高清亚洲一区| 亚洲国产精品一区在线观看不卡| 亚洲欧美国产不卡| 欧美视频一区二区在线观看| 精品精品国产高清a毛片牛牛 | 在线看片一区| 欧美性色黄大片| 一区二区三区小说| 亚洲综合色噜噜狠狠| 一区二区高清视频在线观看| 亚洲激情五月婷婷| 狠狠色丁香久久婷婷综| 国产视频一区三区| 在线观看亚洲成人| 亚洲人成网站影音先锋播放| 国产伦精品一区二区三区免费| av一区二区三区| 亚洲激情亚洲| 亚洲伦伦在线| 日韩欧美国产成人一区二区| 久久久综合激的五月天| 国产精品进线69影院| 欧美日韩系列| 亚洲精品成人悠悠色影视| 亚洲小说春色综合另类电影| 91色porny蝌蚪| 一区二区国产精品| 一区二区三区在线视频免费观看| 国产一区二区高清| 日韩欧美高清dvd碟片| 日日摸夜夜添夜夜添精品视频| 美腿丝袜亚洲一区| 香蕉久久夜色精品国产| 国产精品麻豆视频| 亚洲国产一区在线观看| 欧美性感一类影片在线播放| 国内精品嫩模私拍在线| 国产精品普通话对白|