狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美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视频
亚洲素人一区二区| 国产伦精品一区二区三区在线观看| 欧美一二区视频| 久久高清免费观看| 老汉av免费一区二区三区| 午夜精品福利一区二区蜜股av| 国产精品电影院| 欧美成人猛片aaaaaaa| 香蕉久久夜色精品国产| 影音先锋久久久| 国产精品vip| 91视频在线看| 一区二区亚洲精品| 欧美巨乳波霸| 国产一区二区精品在线观看| 蜜桃久久久久久久| 日韩av不卡一区二区| 亚洲一区二区不卡免费| 日韩欧美中文字幕精品| 69堂成人精品免费视频| 精品污污网站免费看| 色悠悠久久综合| 欧美日韩不卡一区二区| 色婷婷av一区二区三区之一色屋| 国产日韩久久| 国产精品婷婷| 亚洲欧美日韩精品久久久| 国产一级精品aaaaa看| 雨宫琴音一区二区在线| 国产字幕视频一区二区| 亚洲电影自拍| 国产精品欧美日韩一区| 另类图片国产| 色呦呦国产精品| 欧美色网一区二区| 777久久久精品| 欧美性猛片xxxx免费看久爱| 欧美日韩在线播| 91精品国产一区二区三区| 欧美日韩一级黄| 在线电影欧美成精品| 日韩精品一区二区三区在线观看 | 精品99视频| 日韩午夜精品| 久久国产日韩| 欧美日韩成人在线| 日韩欧美一二区| 欧美韩国日本不卡| 久久久天堂av| 亚洲乱码中文字幕综合| 首页国产欧美日韩丝袜| 午夜欧美视频在线观看| 国产一区二区伦理片| 国产91色综合久久免费分享| 欧美天天视频| 99亚洲精品| 久久久久欧美| 日韩精品一区二区三区视频| 中文字幕永久在线不卡| 亚洲第四色夜色| 国产精一区二区三区| 色综合久久综合网97色综合| 亚洲综合欧美日韩| 欧美日韩免费一区二区三区视频| 日韩欧美电影一区| 午夜久久久影院| 成人一区在线看| 在线一区二区视频| 亚洲女人的天堂| 99精品国产热久久91蜜凸| 色屁屁一区二区| 日韩毛片精品高清免费| 99视频精品全部免费在线| 欧美亚洲综合在线| 亚洲制服丝袜在线| 红桃视频欧美| www欧美成人18+| 国产精品中文字幕欧美| 91福利国产成人精品照片| 在线亚洲美日韩| 国内外成人在线| 日韩欧美亚洲一区二区| 色综合婷婷久久| 高清不卡一二三区| 亚洲国产免费看| 欧美国产一区视频在线观看| 粉嫩嫩av羞羞动漫久久久| 欧美日韩国产123区| 亚洲bt欧美bt精品| 国内成人在线| 中文字幕欧美三区| 成人av电影免费在线播放| 欧美日韩视频一区二区| 日韩电影一区二区三区| 国产模特精品视频久久久久| 伊人性伊人情综合网| 在线观看日韩av电影| 国产精品久久免费看| 欧美一区网站| 国产精品视频免费| 欧美日本一区二区视频在线观看| 欧美大白屁股肥臀xxxxxx| 国产真实乱偷精品视频免| 欧美日韩国产一二三| 日韩制服丝袜先锋影音| 韩国三级中文字幕hd久久精品| 亚洲va在线va天堂| 久久99精品国产.久久久久久| 老牛嫩草一区二区三区日本| 日韩福利视频网| 欧美日韩国产系列| 国产福利一区二区| 欧美精品一区二区三区蜜桃视频| 99久久亚洲一区二区三区青草 | 亚洲一区二区成人在线观看| 免费在线亚洲| 久久成人久久鬼色| 欧美妇女性影城| 豆国产96在线|亚洲| 久久亚洲春色中文字幕久久久| 色综合久久中文综合久久牛| 国产日韩欧美不卡在线| 国产在线欧美日韩| 亚洲sss视频在线视频| 欧美在线一区二区| 国产91精品一区二区| 国产精品网曝门| 久久av一区二区| 国产精品69毛片高清亚洲| 亚洲成人动漫av| 色婷婷精品久久二区二区蜜臀av| 精油按摩中文字幕久久| 337p粉嫩大胆噜噜噜噜噜91av | 久久久国际精品| 亚洲人成免费| 麻豆精品一区二区| 久久久欧美精品sm网站| 99国产精品视频免费观看一公开| 日韩精品1区2区3区| 欧美成人精品高清在线播放 | 国产欧美一区二区精品仙草咪| 亚洲一级影院| 麻豆一区二区在线| 国产拍揄自揄精品视频麻豆| 国产欧美一区二区三区国产幕精品| 免费亚洲电影在线| 久久久久国产免费免费| 美女精品网站| 91丨porny丨最新| 爽好多水快深点欧美视频| 欧美xxxxx裸体时装秀| 亚洲国产婷婷| 国产99久久久国产精品潘金网站| 亚洲人精品午夜| 欧美一区二区三区免费观看视频| 国产一区欧美| 久久99久久久久| 亚洲视频一区二区在线| 日韩欧美国产高清| 久久国产精品高清| 午夜久久资源| 狠狠狠色丁香婷婷综合久久五月| 中文字幕中文字幕一区二区| 欧美性色欧美a在线播放| 亚洲国产精品视频一区| 成人av在线播放网站| 日本女人一区二区三区| 18成人在线视频| 欧美mv日韩mv国产网站| 91黄色免费看| 99亚洲一区二区| 欧美激情第六页| 国产成人在线视频网站| 日韩国产精品久久久| 亚洲天堂2014| 中文字幕电影一区| 日韩欧美一级二级三级久久久| 色香蕉久久蜜桃| 亚洲三级视频| 欧美+日本+国产+在线a∨观看| 精品一区二区三区在线播放 | 男女性色大片免费观看一区二区| 亚洲美女视频在线| 久久久.com| 欧美成人精品福利| 欧美日韩免费观看一区二区三区 | 国产精品久久久久影院色老大| 日韩一区二区免费在线电影| 欧洲精品视频在线观看| 久久精品三级| 一本色道久久综合亚洲精品婷婷| 欧美系列一区| 欧美国产激情| 欧美在线播放一区二区| 成人午夜又粗又硬又大| 国产大陆亚洲精品国产| 精品一区二区三区视频在线观看| 天堂va蜜桃一区二区三区| 亚洲国产一区二区a毛片| 亚洲永久免费视频|