成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

html5樹(shù)形,漂亮html5樹(shù)形結(jié)構(gòu)

HTML5元素

h5元素大致的分為下面幾大類:

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),龍泉企業(yè)網(wǎng)站建設(shè),龍泉品牌網(wǎng)站建設(shè),網(wǎng)站定制,龍泉網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,龍泉網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1.內(nèi)嵌------在文檔中添加其他類型的內(nèi)容,如audio,video,canvas,iframe等

2.流------在文檔和應(yīng)用的body中使用的元素,如form,h1,small等

3.標(biāo)題------段落標(biāo)題,如h1,h2,hgroup等

4.交互------與用戶交互的內(nèi)容,如音頻和視頻的空間,button,textarea等

5.元數(shù)據(jù)------通常出現(xiàn)在頁(yè)面的head中,設(shè)置頁(yè)面其他部分的表現(xiàn)和行為,如script,style,title等

6.短語(yǔ)------文本和文本標(biāo)記元素,如mark,kbd,sub,sup等

以上所有類型的元素都可以通過(guò)css來(lái)設(shè)定樣式。

HTML5定義類一組新的語(yǔ)義化標(biāo)記來(lái)描述元素的內(nèi)容。簡(jiǎn)化了HTML頁(yè)面設(shè)計(jì)。

這些分別是

1.header------標(biāo)記頭部區(qū)域的內(nèi)容(用于整個(gè)頁(yè)面或頁(yè)面中的一塊區(qū)域)

2.footer------標(biāo)記腳部區(qū)域的內(nèi)容(用于整個(gè)頁(yè)面或頁(yè)面中的一塊區(qū)域)

3.section------Web頁(yè)面中的一塊區(qū)域

4.article------獨(dú)立的文章內(nèi)容

5.aside------相關(guān)內(nèi)容或者引文

6.nav------導(dǎo)航類輔助內(nèi)容

1.hgroup------用于對(duì)整個(gè)頁(yè)面或頁(yè)面中一個(gè)內(nèi)容區(qū)塊的標(biāo)題進(jìn)行組合

2.figure------表示一段獨(dú)立的流內(nèi)容,一般表示文檔主體流內(nèi)容中的一個(gè)獨(dú)立單元,使用figcaption元素可為figure元素組添加標(biāo)題

3.vedio------定義視頻,比如電影片段或其他視頻流

4.audio------定義音頻,比如音樂(lè)或其他音頻流

5.embed------用來(lái)插入各種多媒體,格式可以使MIDI,WAV,AIFF,AU,MP3等

6.mark------主要用來(lái)在視覺(jué)上向用戶呈現(xiàn)那些需要突出顯示和高亮顯示的文字。

7.time------表示日期或時(shí)間,也可以同時(shí)表示兩者

8.canvas------表示圖形,這個(gè)元素本身沒(méi)有行為,僅提供一塊畫(huà)布,但它把一個(gè)繪圖API展現(xiàn)給客戶端JavaScript,以使腳本能夠把想繪制的東西回執(zhí)到這塊畫(huà)布上。

9.output------表示不同類型的輸出,比如腳本的輸出

10.source------為媒介元素

11.menu------表示菜單列表。當(dāng)希望列出表單控件時(shí)使用的該標(biāo)簽

12.ruby------表示ruby注釋(中文注音或字符)

13.rt------表示字符的解釋或發(fā)音

14.rp------在ruby注釋中使用,以定義不支持ruby元素的瀏覽器所顯示的內(nèi)容

15.wbr------表示軟換行。與br的區(qū)別在于br表示此處必須換行,而wbr意思是瀏覽器窗口或父級(jí)元素的寬度足夠?qū)挄r(shí),不進(jìn)行換行,寬度不夠時(shí),主動(dòng)在此處進(jìn)行換行。

16.command------表示命令按鈕,如單選按鈕,復(fù)選按鈕或按鈕框。

17.details------表示用戶要求得到并且可以得到的細(xì)節(jié)信息,可以與summary元素配合使用,summary元素提供標(biāo)題或圖例,標(biāo)題是可見(jiàn)的,用戶單機(jī)標(biāo)題時(shí),會(huì)顯示細(xì)節(jié)信息。summary應(yīng)該是details元素的第一個(gè)子元素

18.datalist------表示可選數(shù)據(jù)的列表,與input元素配合使用,可以制作出輸入值的下拉列表。

19.datagrid------表示可選數(shù)據(jù)的列表,它以樹(shù)形列表形式來(lái)顯示

20.keygen------表示生成密鑰

21.progress------表示運(yùn)行中的進(jìn)程,可以使用progress元素來(lái)顯示JavaScript中耗費(fèi)時(shí)間函數(shù)的進(jìn)程

22.email------表示必須輸入email地址的文本輸入框

23.url------表示必須輸入url地址的文本輸入框

24.number------表示必須輸入數(shù)值地址的文本輸入框

25.range------表示必須輸入一定范圍內(nèi)數(shù)字值址的文本輸入框

26.Date Pickers------HTML5擁有多個(gè)可供選取日期和時(shí)間的新型輸入文本框

這個(gè)就不說(shuō)了。

html5與傳統(tǒng)html區(qū)別

html5與傳統(tǒng)html區(qū)別

一. HTML5語(yǔ)法的改變

該知識(shí)點(diǎn)所說(shuō)變化指的是基于HTML4基礎(chǔ)上所定義的改變,主要有如下:

1.HTML5的文件擴(kuò)展符(.html或.htm)與內(nèi)容類型(text/html)保持不變。

2.HTML5中,刻意不使用版本聲明,一份文檔將會(huì)適用于所有版本的HTML。

3.從HTML5開(kāi)始,對(duì)于文件的字符編碼推薦使用UTF-8。

4.HTML5確保了與之前HTML版本的最大程度的兼容性。

為了保證兼容性,需從元素說(shuō)起,在HTML5.中,元素的標(biāo)記可以省略。其體來(lái)說(shuō),元素的標(biāo)記分為“不允許寫(xiě)結(jié)束標(biāo)記”、“可以省略結(jié)束標(biāo)記”和‘“開(kāi)始標(biāo)記和結(jié)束標(biāo)記全部可以省略”三種類型。

不允許寫(xiě)結(jié)束標(biāo)記元素有:area、base、br、col.....

可以省略結(jié)束標(biāo)記:li、dt、dd、p、rt......

開(kāi)始標(biāo)記和結(jié)束標(biāo)記全部可以省略:html、head、body.....

二.新增的結(jié)構(gòu)元素

section元素表示頁(yè)面中的一個(gè)內(nèi)容區(qū)塊,比如章節(jié)、頁(yè)眉、頁(yè)腳或頁(yè)面中的其他部分;

article元素表示頁(yè)面中的一塊與上下文不相關(guān)的獨(dú)立內(nèi)容,譬如博客中的一篇文章或報(bào)紙中的一篇文章;

aside元素表示article元素的內(nèi)容之外的、與article元素的內(nèi)容相關(guān)的輔助信息;

header元素表示頁(yè)面中一個(gè)內(nèi)容區(qū)塊或整個(gè)頁(yè)面的標(biāo)題;

hgroup元素用于對(duì)整個(gè)頁(yè)面或頁(yè)面中一個(gè)內(nèi)容區(qū)塊的標(biāo)題進(jìn)行組合;

footer元素表示整個(gè)頁(yè)面或頁(yè)面中一個(gè)內(nèi)容區(qū)塊的腳注。一般來(lái)說(shuō),它會(huì)包含創(chuàng)作者的姓名、創(chuàng)作日期以及創(chuàng)作者聯(lián)系信息;

nav元素表示頁(yè)面中導(dǎo)航鏈接的.部分;

figure元素表示一段獨(dú)立的流內(nèi)容,一般表示文檔主體流內(nèi)容中的一個(gè)獨(dú)立單元,使用figcaption元素為figure元素組添加標(biāo)題

2、新增的其他元素

audio元素定義音頻,比如音樂(lè)或其他音頻流;

embed元素用來(lái)插入各種多媒體,格式可以是Midi、Wav、AU、MP3等;

mark元素上要用來(lái)在視覺(jué)上向用戶呈現(xiàn)那些需要突出顯示或高亮顯示的文字,典型應(yīng)用就是在搜索結(jié)果中向用戶高亮顯示搜素關(guān)鍵詞;

progress元素表示運(yùn)行中的進(jìn)程

ruby元素表示ruby注釋(中文注音或字符)

rt元素表示字符(中文注音或字符)的解釋或發(fā)音

rp元素在ruby注釋中使用,以定義不支持ruby素的瀏覽器所顯示的內(nèi)容。

wbr元素表示軟換行,而當(dāng)寬度不夠時(shí),主動(dòng)在此處進(jìn)行換行

canvas元素表示圖形,比如圖表和其他圖像

cammand元素表示命令按鈕,比如單選按鈕、復(fù)選框或按鈕

details元素表示用戶要求得到并且可以得到的細(xì)節(jié)信息

datagrid元素表示可選數(shù)據(jù)的列表,它以樹(shù)形列表的形式來(lái)顯示

keygen元素表示生成密鑰

output元素表示不同類型的輸出,比如腳本的輸出

source元素為媒介元素(比如和)定義媒介資源

menu元素表示菜單列表

3、新增的input元素

email 類型表示必須輸入E-main地址的文本輸入框

url 類型表示必須輸入U(xiǎn)RL地址的文本輸入框

number類型表示必須輸人數(shù)值的文本輸入框

range 類型表示必須輸入一定范圍內(nèi)數(shù)字值的文本輸人框

HTML5擁有多個(gè)可供選取日期和時(shí)間的新型輸入文本框:

date ——選取日、月、年

month ——選取月、年

week ——選取周和年

time ——選取時(shí)間(小時(shí)和分鐘)

datetime ——一選取時(shí)間、日、月、年(UTC 時(shí)間)

datetime.local ——選取時(shí)間、日、月、年(本地時(shí)間)

三.廢除元素

1、能使用CSS替代的元素

對(duì)干basefont、big、center、font、s、strike、tt、u這些元素,由于它們的功能都是純粹去畫(huà)面展示服務(wù)的,而HTML5中提倡把畫(huà)面展示性功能放在CSS樣式表中統(tǒng)一編輯,所以這些元素廢除了

2、不再使用frame框架

對(duì)于frameset元素、frame元素與noframes元素,由于frame框架對(duì)網(wǎng)頁(yè)可用性存在負(fù)面影響,在HTML5中已不支持frame框架,只支持iframe框架,或者用服務(wù)器方創(chuàng)建的由多個(gè)頁(yè)面組成的復(fù)合頁(yè)面的形式,同時(shí)將以上這三個(gè)元素廢除。

3、只有部分瀏覽器支持的元素

對(duì)于applet、bgsound、blink、marquee等元素,由于只有部分瀏覽器支持這些元素,特別是bgsound元素以及marquee元素,只被Internet Explorer所支持,所以在HTML 5中被廢除。其中applet元素可由ernedd元素或object元素替代,bgsound元素可由audio元素替代,marquee可以由JavaScript編程的方式所替代

4、其他被廢除的元素:

廢除rb元素,使用ruby元素替代

廢除acronym元素,使用abbr元素替代

廢除dir元素,使用ul元素替代

廢除isindex元素,使用form元素與input元素相結(jié)合的方式替代

廢除listing元素,使用pre元素替代

廢除xmp元素,使用code元素替代

廢除nextid元素,使用GUIDS替代

廢除plaintext元素,使用“ text/plian” MIME類型替代

四.新增屬性和廢除屬性

一、新增屬性

1、與表單相關(guān)屬性

新增autofocus屬性,它以指定屬性的方式讓元素在畫(huà)面打開(kāi)時(shí)自動(dòng)獲得焦點(diǎn);

新增placeholder屬性,它會(huì)對(duì)用戶的輸入進(jìn)行提示,提示用戶可以輸入的內(nèi)容;

新增form屬性,聲明它屬于哪個(gè)表單,然后將其放置在頁(yè)面上任何位置,而不是表單之內(nèi);

新增required屬性,該屬性表示在用戶提交的時(shí)候進(jìn)行檢查,檢查該元素內(nèi)一定要有輸入內(nèi)容;

2、與鏈接相關(guān)屬性

增加media屬性,該屬性規(guī)定目標(biāo)URL是為什么類型的媒介/設(shè)備進(jìn)行優(yōu)化的,只能在href屬性存在時(shí)使用;

增加hreflang屬性與rel屬性,以保持與a元素、link元素的一致;

3、其他屬性

屬性reverend,它指定列表倒序顯示;

為script元素增加async屬性,它定義腳本是否異步執(zhí)行;

二、廢除屬性

能被CSS樣式表替代的屬性全部廢除掉;

多余屬性,例如:target、profile、version等被廢除掉;

五.全局屬性

在HTML5中,新增了一個(gè)’‘全局屬性“的概念。所謂全局屬性,是指可以對(duì)任何元素都使用的屬性。

1、contentEditable 屬性

該屬性允許用戶編輯元素中的內(nèi)容,可以獲得鼠標(biāo)焦點(diǎn),屬性為布爾值,可被指定為true或false。另外,該屬性還有個(gè)隱藏inherit狀態(tài),為true時(shí),允許編輯,為false時(shí),不允許編輯,未指定時(shí),由inherit決定。

2、designMode 屬性

該屬性用來(lái)決定整個(gè)頁(yè)面是否可編輯。有兩個(gè)屬性“on”與"off"。屬性為"on"時(shí),可編輯,為“off”時(shí),不可編輯。

3、hidden屬性

所有元素都允許使用一個(gè)hidden屬性,該屬性類似于input元素中的hidden元素,功能是通知瀏覽器不渲染該元素,使該元素處于不可見(jiàn)狀態(tài)。該屬性值為布爾值,為true時(shí),不可見(jiàn),為false時(shí),可見(jiàn)。

4、spellcheck屬性

該屬性是HTML 5針對(duì)input元素(type=text) 與textarea這兩個(gè)文本輸入框提供的一個(gè)新屬性,主要對(duì)用戶輸入內(nèi)容進(jìn)行拼寫(xiě)與語(yǔ)法檢查。屬性值為布爾值,書(shū)寫(xiě)時(shí)必須明確聲明屬性值為true或false書(shū)寫(xiě)方式如下:

詳解form屬性

在HTML4中,表單內(nèi)的從屬元素必須書(shū)寫(xiě)在表單內(nèi)部,但是在HTML5中,可以把他們書(shū)寫(xiě)在頁(yè)面上任何地方,然后給元素制定一個(gè)form屬性,屬性值為該表單單位的id,這樣就可以聲明該元素從屬于指定表單了。

input元素從屬于表單,它唄書(shū)寫(xiě)在表單內(nèi)部,用不著再對(duì)它制定form屬性。textarea元素唄書(shū)寫(xiě)在表單之外,但它從屬于表單,所以表單的id制定給textareea元素的form屬性。

這樣做的好處是當(dāng)需要給頁(yè)面中的元素添加樣式時(shí)可以更方便地添加,因?yàn)樗鼈儾皇潜环稚⒃诟鞅韱沃畠?nèi)的了。

;

移動(dòng)端web站需要考慮seo嗎

移動(dòng)端網(wǎng)站也需要考慮SEO,具體操作步驟是:

第一步、定位和頁(yè)面設(shè)計(jì)。

無(wú)論是PC端還是移動(dòng)端,網(wǎng)站都要考慮清楚消費(fèi)群體的定位問(wèn)題。雖然智能手機(jī)用戶數(shù)量非常普及,但是要明白中國(guó)的大部分手機(jī)用戶使用的還是2G網(wǎng)絡(luò),一直高

喊的3G、4G手機(jī)用戶只有大約15%左右。所以,在頁(yè)面設(shè)計(jì)時(shí),要考慮到用戶打開(kāi)網(wǎng)頁(yè)的時(shí)長(zhǎng),一些炫麗的flash、JS等建議還是不用為好。這不僅僅

是用戶體驗(yàn)的問(wèn)題,也是盡量減少百度索引抓取的工作,讓百度蜘蛛盡可能多的爬行和收錄頁(yè)面。

第二步、網(wǎng)站盡可能簡(jiǎn)潔。

①手機(jī)網(wǎng)站比PC端網(wǎng)站的頁(yè)面下載速度要慢得多,因此盡量把頁(yè)面數(shù)和頁(yè)面大小控制到最低。

②此外,由于是手機(jī)用戶,用戶瀏覽網(wǎng)頁(yè)的時(shí)間是零碎的,不可能耐心點(diǎn)擊很多的頁(yè)面。因此,要盡可能精簡(jiǎn)移動(dòng)網(wǎng)站設(shè)計(jì)。

③購(gòu)買(mǎi)流程或者導(dǎo)購(gòu)頁(yè)面盡可能精簡(jiǎn)精簡(jiǎn)再精簡(jiǎn),從消費(fèi)者進(jìn)入網(wǎng)站到購(gòu)買(mǎi)盡可能提供最簡(jiǎn)單的步驟,直接摒棄那些冗余內(nèi)容,為消費(fèi)者呈現(xiàn)他們想要的。假如一個(gè)購(gòu)買(mǎi)流程需要注冊(cè)七八項(xiàng),在購(gòu)買(mǎi)時(shí)再填上七八項(xiàng),那恐怕下次就不會(huì)有回頭客了。

第三步、域名和robots設(shè)置。

①域名盡可能簡(jiǎn)短易記,大部分手機(jī)版網(wǎng)站的域名是PC端網(wǎng)站的二級(jí)域名,當(dāng)然這個(gè)也很好,與傳統(tǒng)網(wǎng)站保持一致,更讓重視用戶信賴。但是如果是專門(mén)的手機(jī)網(wǎng)站,最好起一個(gè)簡(jiǎn)短而且易記的域名。

②robots 設(shè)置上最好不要任何限制,讓所有搜索引擎抓取。另外小生在這里糾正一個(gè)很多站長(zhǎng)想當(dāng)然的誤區(qū),百度官方聲明百度spider

的爬蟲(chóng)UA是Baiduspider(www 和wap

一致),個(gè)別站長(zhǎng)經(jīng)常會(huì)誤認(rèn)為百度手機(jī)爬蟲(chóng)的UA是baiduspider-mobile,其實(shí)沒(méi)這回事。

第四步、避免使用彈窗、flash、java等行為。

同樣道理,flash和彈窗等行為將會(huì)占用很大一部分流量,對(duì)于移動(dòng)手機(jī)用戶而言,無(wú)疑會(huì)浪費(fèi)時(shí)間和流量,對(duì)于搜索引擎而言,基本理解不了。在技術(shù)層面來(lái)

講,Apple產(chǎn)品不支持Flash功能,很大一部分智能手機(jī)用戶用不了這項(xiàng)功能,同樣,很多智能手機(jī)也不支持Java,所以這只是兩方面都不討好的做 法。

第五步、頁(yè)面細(xì)節(jié)優(yōu)化。

①專屬的手機(jī)網(wǎng)站頭部標(biāo)簽。對(duì)于手機(jī)網(wǎng)站的首頁(yè)或者頻道首頁(yè)的網(wǎng)

頁(yè)代碼中的keywords、description最好加上與PC端有所區(qū)別的meta標(biāo)簽和關(guān)鍵詞,在每個(gè)頁(yè)面的關(guān)鍵字及描述像做傳統(tǒng)PC端網(wǎng)站一

樣,做好針對(duì)性的填寫(xiě)工作。對(duì)搜索結(jié)果的展現(xiàn)(摘要)以及優(yōu)化工作大有幫助。

②減少死鏈。如果沒(méi)有內(nèi)容,最好用狀態(tài)碼指定,比如404、403 等;如果內(nèi)容死鏈希望重定向到首頁(yè),最好通過(guò)302跳轉(zhuǎn),不要使用javascript

跳轉(zhuǎn)。

第六步、使用規(guī)范化的協(xié)議,做好瀏覽器兼容調(diào)試工作。

一般來(lái)說(shuō)手機(jī)建站有xhtml、html5、wml

三種協(xié)議,最好使用規(guī)范化、標(biāo)準(zhǔn)化的協(xié)議格式,避免造成不必要的麻煩。當(dāng)然也可以做多個(gè)版本的站點(diǎn),站點(diǎn)進(jìn)行不同版式的自動(dòng)適配。

第七步、url鏈接規(guī)范化。

①對(duì)于多個(gè)板塊的二級(jí)域名或者目錄來(lái)說(shuō),使用規(guī)范、簡(jiǎn)單的url,盡量去除與頁(yè)面內(nèi)容無(wú)關(guān)的參數(shù),如用來(lái)區(qū)分手機(jī)型號(hào)、區(qū)分訪問(wèn)用戶,方便統(tǒng)計(jì)等的參數(shù)。如手機(jī)版的“百度知道”

②頁(yè)面url鏈接跳轉(zhuǎn)最好是正常格式的目標(biāo)url,不要中間進(jìn)行跳轉(zhuǎn)。

第八步、做好移動(dòng)版與PC版網(wǎng)站的轉(zhuǎn)換。

①確保在手機(jī)網(wǎng)站或者PC端網(wǎng)站各個(gè)頁(yè)面上有相應(yīng)的導(dǎo)航或者提示鏈接,讓用戶可以在手機(jī)版和PC版進(jìn)行切換,也便于搜索引擎更好的收錄。

②百度官方曾聲明,對(duì)于移動(dòng)站點(diǎn),當(dāng)baiduspider ua或者其它無(wú)法確定來(lái)源的ua訪問(wèn)時(shí),建議默認(rèn)情況下直接返回html5 或xhtml

類型的移動(dòng)頁(yè)面,不要重定向到PC頁(yè)面。

第九步、手機(jī)網(wǎng)站適配聲明。

手機(jī)頁(yè)面進(jìn)行合適的 DOCTYPE 聲明有助于搜索引擎識(shí)別該頁(yè)面是否適合手機(jī)瀏覽。聲明位于文檔中的最前面的位置,處于標(biāo)簽之前。

第十步、其它優(yōu)化事項(xiàng)。

其它一些優(yōu)化要點(diǎn)與傳統(tǒng)PC端網(wǎng)站優(yōu)化一樣。如網(wǎng)站結(jié)構(gòu)要用合理的樹(shù)形結(jié)構(gòu),最好采用樹(shù)形和扁平相結(jié)合;清晰的面包屑導(dǎo)航,方便搜索引擎爬行抓取和用戶體驗(yàn);title寫(xiě)法要盡量包含關(guān)鍵字,首頁(yè)、頻道頁(yè)、內(nèi)容頁(yè)寫(xiě)法要有所側(cè)重。

html5中怎么在canvas中畫(huà)一個(gè)二叉樹(shù)

用html5開(kāi)發(fā)隨機(jī)生成的大樹(shù),你應(yīng)該沒(méi)想到40+行代碼就可以搞定了吧~接下來(lái)就跟大家說(shuō)說(shuō)這棵大樹(shù)是如何在html5開(kāi)發(fā)中實(shí)現(xiàn)的。

同樣必須要有html容器。新建Index.html,代碼如下:

、html

1 、head

2 、meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /

3 、titlecanvas tree

4 、/head

5 、body

6 、script type="text/javascript" src="tree.js"

7 、/body

8 、/html

接下來(lái)咱們開(kāi)始tree.js:

、var canvas = document.createElement("canvas");

9 var ctx = canvas.getContext("2d");

10 canvas.width = 640;

11 canvas.height = 480;

12 document.body.appendChild(canvas);

代碼很好理解,創(chuàng)建一個(gè)canvas畫(huà)布,然后選擇為2d畫(huà)布,設(shè)置長(zhǎng)寬,最后將這個(gè)畫(huà)布添加到body標(biāo)簽下。

這個(gè)腳本最重要的函數(shù)在下面,大樹(shù)就是遞歸調(diào)用這個(gè)函數(shù)實(shí)現(xiàn)的,調(diào)用一次畫(huà)一條線段:

var drawTree = function (ctx, startX, startY, length, angle, depth, branchWidth){

13 var rand = Math.random,

14 newLength, newAngle, newDepth, maxBranch = 3,

15 endX, endY, maxAngle = 2 * Math.PI / 4,

16 subBraches;

17 ctx.beginPath();

18 ctx.moveTo(startX, startY);

19 endX = startX + length * Math.cos(angle);

20 endY = startY + length * Math.sin(angle);

21 ctx.lineCap = 'round';

22 ctx.lineWidth = branchWidth;

23 ctx.lineTo(endX, endY);

24 if (depth = 2){

25 ctx.strokeStyle = 'rgb(0,' + (((rand() * 64) + 128) 0) + ',0)';

26 } else {

27 ctx.strokeStyle = 'rgb(' + (((rand() * 64) + 64) 0) + ',50,25)';

28 }

29 ctx.stroke();

30 newDepth = depth - 1;

31 if (!newDepth)

32 return;

33 subBranches = (rand() * (maxBranch - 1)) + 1;

34 branchWidth *= 0.7;

35 for (var i = 0; i subBranches; i++){

36 newAngle = angle + rand() * maxAngle - maxAngle * 0.5;

37 newLength = length * (0.7 + rand() * 0.3);

38 drawTree(ctx, endX, endY, newLength, newAngle, newDepth, branchWidth);

39 }

40 }

接下來(lái)一點(diǎn)點(diǎn)解釋:

首先,解釋下各個(gè)變量的含義。ctx就是前面我們的2d畫(huà)布;startX是線段開(kāi)始的橫坐標(biāo),同理startY是縱坐標(biāo);length是線段長(zhǎng)度;angle是角度;depth是深度,葉子深度為1,樹(shù)干為12(可自己設(shè)定);branchWidth就線段的粗細(xì)。有了這些信息,其實(shí)就描述了一個(gè)線段,通過(guò)這些信息我們才能畫(huà)一個(gè)線段。

接下來(lái)又很可恥地一大段定義:

var rand = Math.random,

41 newLength, newAngle, newDepth, maxBranch = 3,

42 endX, endY, maxAngle = 2 * Math.PI / 4,

43 subBraches;

rand其實(shí)就是隨機(jī)一個(gè)0~1之間的實(shí)數(shù),顧名思義,接下來(lái)這些new的就是下一節(jié)線段的各種參數(shù)。maxBranch就是最多有3個(gè)分叉,最大的角度 PI/2 即為,下一級(jí)調(diào)整角度在90%范圍內(nèi)。subBranches就是分叉的個(gè)數(shù)。

好了,重要可以畫(huà)了:

ctx.beginPath();

44 ctx.moveTo(startX, startY);

45 endX = startX + length * Math.cos(angle);

46 endY = startY + length * Math.sin(angle);

47 ctx.lineCap = 'round';

48 ctx.lineWidth = branchWidth;

49 ctx.lineTo(endX, endY);

beginPath()表示告訴瀏覽器“我要開(kāi)始畫(huà)了!”,把之前的記錄放棄了,這點(diǎn)有點(diǎn)像ps。moveTo()把光標(biāo)移動(dòng)到(startX, startY),再計(jì)算終點(diǎn)坐標(biāo),endX,endY,有點(diǎn)像高中學(xué)的參數(shù)方程。然后告訴瀏覽器,lineCap要round,線段的兩頭要是圓形的。有多粗呢?等于branchWidth。線段一直畫(huà)到(endX, endY)。

if (depth = 2){

50 ctx.strokeStyle = 'rgb(0,' + (((rand() * 64) + 128) 0) + ',0)';

51 } else {

52 ctx.strokeStyle = 'rgb(' + (((rand() * 64) + 64) 0) + ',50,25)';

53 }

如果是已經(jīng)畫(huà)到了最后兩級(jí),即為葉子,那么就rgb就為(0, 128~192, 0)(rgb代表顏色,分別為紅綠藍(lán),red green blue)。還沒(méi)的話,就在(64~128, 50 ,25)中取。大家可能發(fā)現(xiàn)了,rgb必須為整數(shù),但是rand()只能rand實(shí)數(shù)。大家其實(shí)也注意到了有個(gè)” 0″,js當(dāng)中表示位運(yùn)算,整體向右移動(dòng)n位,0就是移動(dòng)0位。其實(shí)它的作用和Math.floor()一樣,但是速度更快。

動(dòng)手畫(huà)!

ctx.stroke();

這個(gè)線段就畫(huà)好了,是時(shí)候準(zhǔn)備下它的分叉的時(shí)候了。

newDepth = depth - 1;

54 if (!newDepth)

55 return;

如果這個(gè)線段是最后一級(jí),就沒(méi)有分叉了,也是一個(gè)遞歸的終止條件。

subBranches = (rand() * (maxBranch - 1)) + 1;

56 branchWidth *= 0.7;

57 for (var i = 0; i subBranches; i++){

58 newAngle = angle + rand() * maxAngle - maxAngle * 0.5;

59 newLength = length * (0.7 + rand() * 0.3);

60 drawTree(ctx, endX, endY, newLength, newAngle, newDepth, branchWidth);

61 }

分叉數(shù)是1~3中的一個(gè)數(shù)。然后有多少個(gè)分叉,就畫(huà)幾條線段,newAngle為原角度調(diào)整90度之內(nèi),新長(zhǎng)度為原長(zhǎng)度的0.7~1.0之間。

最后畫(huà)出主干,這棵樹(shù)就可以開(kāi)始畫(huà)了。

drawTree(ctx, 320, 470, 60, -Math.PI / 2, 12, 12);

大家可能注意到角度為負(fù),不符合傳統(tǒng)觀念。但你要知道,畫(huà)布的縱坐標(biāo)和傳統(tǒng)的坐標(biāo)軸正好是相反的。

好了,html5開(kāi)發(fā)隨機(jī)生成的大樹(shù)代碼就這樣完成了,怎么樣,一點(diǎn)都難吧!

html5 制作一顆3維的樹(shù) 怎么能拖動(dòng)樹(shù)枝

站內(nèi)搜索: (僅支持單關(guān)鍵字)

用HTML5 Canvas制作擺動(dòng)的樹(shù)

下載源代碼

〖 作者:cyclegtx 〗〖 發(fā)布日期:2014-07-05 〗

根據(jù)工作的需要,制作一個(gè)擺動(dòng)的樹(shù)做為頁(yè)面的背景。為了增加頁(yè)面的交互性,我又為背景中的樹(shù)增加了鼠標(biāo)(觸控)事件,使他能夠根據(jù)鼠標(biāo)(觸控)做出相應(yīng)的動(dòng)作,當(dāng)手指做上下或者左右滑動(dòng)的時(shí)候樹(shù)會(huì)跟著擺動(dòng)。先看看最終效果。

Step1.完成HTML頁(yè)面,新建一個(gè)Tree類

完成HTML頁(yè)面后新建一個(gè)Tree類用來(lái)記錄樹(shù)的各個(gè)屬性。其中x,y為樹(shù)根部的坐標(biāo)值,branchLen,branchWidth分別是樹(shù)枝的長(zhǎng)度與寬度,depth為樹(shù)枝的層數(shù),canvas用來(lái)接頁(yè)面中的canvas元素(默認(rèn)是ID為canvas的元素)。

html

meta charset="utf-8" /

head

style

body {

margin: 0;

background: #7ACFFA;

}

#canvas {

position: absolute;

top: 0; left: 0;

}

/style/headbody

canvas id="canvas" width="1" height="1"/canvas

script type='text/javascript'

window.requestAnimFrame = (function(){

return window.requestAnimationFrame ||

window.webkitRequestAnimationFrame ||

window.mozRequestAnimationFrame ||

function( callback ){

window.setTimeout(callback, 1000 / 60);

};

})();

var canvas = document.getElementById('canvas');

var ctx = canvas.getContext('2d');

canvas.width = window.innerWidth;

canvas.height = window.innerHeight;

function Tree(x,y,branchLen,branchWidth,depth,canvas){

this.canvas = canvas || document.getElementById('canvas');

this.ctx = this.canvas.getContext('2d');

this.x = x||0;

this.y = y||0;

this.branchLen = branchLen||0;

this.branchWidth = branchWidth||0;

var depth = depth || 5;

}

/script

/body/html

Step2.添加drawRoot方法,用來(lái)繪制樹(shù)干

首先在drawRoot中畫(huà)第一個(gè)枝干。drawRoot的參數(shù)意義同上。并且在Tree類的構(gòu)造函數(shù)中運(yùn)行drawRoot并把Tree接受到的參數(shù)傳入。最后new一個(gè)Tree類,使樹(shù)根位于屏幕的底部正中心,樹(shù)枝長(zhǎng)100px,樹(shù)枝寬度為8px,樹(shù)枝層數(shù)為8層(暫時(shí)用不上)。

var atree = new Tree(canvas.width/2-4,canvas.height,100,8,8,canvas);

在drawRoot中我們需要用lineTo()畫(huà)出樹(shù)枝。樹(shù)枝的起始的坐標(biāo)值(x,y)已經(jīng)給出,結(jié)束的坐標(biāo)值(toX,toY)需要進(jìn)行計(jì)算。第一個(gè)畫(huà)的是樹(shù)干,由于樹(shù)干垂直于地面所以結(jié)束坐標(biāo)toX等于初始坐標(biāo)x,而結(jié)束坐標(biāo)toY等于初始y減去樹(shù)干長(zhǎng)度branchLen(注意坐標(biāo)的0,0點(diǎn)在canvas的左上角)。

var toX = x;var toY = y-branchLen;

function Tree(x,y,branchLen,branchWidth,depth,canvas){

this.canvas = canvas || document.getElementById('canvas');

this.ctx = this.canvas.getContext('2d');

this.x = x||0;

this.y = y||0;

this.branchLen = branchLen||0;

this.branchWidth = branchWidth||0;

var depth = depth || 5;

this.drawRoot(this.x,this.y,this.branchLen,this.branchWidth);

}

Tree.prototype.drawRoot = function(x,y,branchLen,branchWidth){

var toX = x;

var toY = y-branchLen;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

}

var atree = new Tree(canvas.width/2-4,canvas.height,100,8,8,canvas);

運(yùn)行代碼:

Step3.添加drawBranch方法,用來(lái)繪制樹(shù)枝

drawBranch同樣是根據(jù)初始與結(jié)束坐標(biāo)畫(huà)出一條直線代表樹(shù)枝。與樹(shù)干不同的是樹(shù)枝不再是垂直與地面而是與樹(shù)干保持一定的角度,而且樹(shù)枝的初始值是樹(shù)干的結(jié)束點(diǎn)(toX,toY)。所以在drawBranch中我們加入新參數(shù)angle用來(lái)表示樹(shù)枝與樹(shù)干的垂直夾角α,這樣就可以根據(jù)α算出toX與toY。請(qǐng)看圖。

這樣我們?cè)诋?huà)完樹(shù)干后再分別畫(huà)兩個(gè)不同角度的樹(shù)枝,一個(gè)是30°一個(gè)-30°。并將傳給樹(shù)枝的寬度branchWidth減小一個(gè)像素,使其與樹(shù)干粗細(xì)不同。

Tree.prototype.drawRoot = function(x,y,branchLen,branchWidth){

var toX = x;

var toY = y-branchLen;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

this.drawBranch(toX,toY,branchLen,branchWidth-1,30);

this.drawBranch(toX,toY,branchLen,branchWidth-1,-30);

}

Tree.prototype.drawBranch = function(x,y,branchLen,branchWidth,angle){

var angle = angle || 0;

var radian = (90-angle)*(Math.PI/180);

var toX = x+Math.cos(radian)*branchLen;

var toY = y-Math.sin(radian)*branchLen;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

}

運(yùn)行代碼:

Step4.修改drawBranch函數(shù),重復(fù)畫(huà)樹(shù)枝

在drawBranch函數(shù)的最后再次調(diào)用兩次drawBranch

this.drawBranch(toX,toY,branchLen,branchWidth-1,angle+30);

this.drawBranch(toX,toY,branchLen,branchWidth-1,angle-30);

使其調(diào)用自己完成遞歸,注意這里傳入的角度是在之前的角度的基礎(chǔ)上在增加或者減少30度。

為了使遞歸停下來(lái)我們需要一個(gè)停止條件,就是之前一直沒(méi)有用到的depth參數(shù)。我們?cè)诿看萎?huà)下一層之前使其減1表示已經(jīng)完成了一層樹(shù)枝的繪制,直至depth減小到0表示繪制完所有的層數(shù)。

function Tree(x,y,branchLen,branchWidth,depth,canvas){

this.canvas = canvas || document.getElementById('canvas');

this.ctx = this.canvas.getContext('2d');

this.x = x||0;

this.y = y||0;

this.branchLen = branchLen||0;

this.branchWidth = branchWidth||0;

var depth = depth || 5;

this.drawRoot(this.x,this.y,this.branchLen,this.branchWidth,depth);

}

Tree.prototype.drawRoot = function(x,y,branchLen,branchWidth,depth){

var toX = x;

var toY = y-branchLen;

var depth = depth||5;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

depth--;

if(depth0){

this.drawBranch(toX,toY,branchLen,branchWidth-1,30,depth);

this.drawBranch(toX,toY,branchLen,branchWidth-1,-30,depth);

}

}

Tree.prototype.drawBranch = function(x,y,branchLen,branchWidth,angle,depth){

var angle = angle || 0;

var radian = (90-angle)*(Math.PI/180);

var toX = x+Math.cos(radian)*branchLen;

var toY = y-Math.sin(radian)*branchLen;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

depth--;

if(depth0){

this.drawBranch(toX,toY,branchLen,branchWidth-1,angle+30,depth);

this.drawBranch(toX,toY,branchLen,branchWidth-1,angle-30,depth);

}

}

運(yùn)行代碼:

由于樹(shù)之間角度過(guò)大,而且所有樹(shù)枝長(zhǎng)度都相等,看起來(lái)并不像一棵樹(shù)。所以我們需要在Tree的構(gòu)造函數(shù)中加入幾個(gè)參數(shù)用來(lái)調(diào)整樹(shù)的姿態(tài)。

function Tree(x,y,branchLen,branchWidth,depth,canvas){

......

this.branchLenFactor = 0.8;

this.rootLenFactor = 1.2;

this.branchAngle = 20;

......

}

branchLenFactor:畫(huà)每一層樹(shù)枝的時(shí)候乘在branchLen上面,用來(lái)控制樹(shù)枝長(zhǎng)度。rootLenFactor:畫(huà)樹(shù)根的時(shí)候乘在branchLen上面,用來(lái)控制樹(shù)根長(zhǎng)度。branchAngle: 用來(lái)控制樹(shù)枝之間的角度

Tree.prototype.drawRoot = function(x,y,branchLen,branchWidth,depth){

var toX = x;

var toY = y-branchLen*this.rootLenFactor;

var depth = depth||5;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

depth--;

if(depth0){

this.drawBranch(toX,toY,branchLen*this.branchLenFactor,branchWidth-1,this.branchAngle,depth);

this.drawBranch(toX,toY,branchLen*this.branchLenFactor,branchWidth-1,-this.branchAngle,depth);

}

}

Tree.prototype.drawBranch = function(x,y,branchLen,branchWidth,angle,depth){

var angle = angle || 0;

var radian = (90-angle)*(Math.PI/180);

var toX = x+Math.cos(radian)*branchLen;

var toY = y-Math.sin(radian)*branchLen;

this.ctx.save();

this.ctx.strokeStyle="rgba(37, 141, 194, 0.93)";

this.ctx.beginPath();

this.ctx.lineCap = "butt";

this.ctx.lineJoin="round";

this.ctx.lineWidth = branchWidth;

this.ctx.moveTo(x,y);

this.ctx.lineTo(toX,toY);

this.ctx.closePath();

this.ctx.stroke();

this.ctx.restore();

depth--;

if(depth0){

this.drawBranch(toX,toY,branchLen*this.branchLenFactor,branchWidth-1,angle+this.branchAngle,depth);

this.drawBranch(toX,toY,branchLen*this.branchLenFactor,branchWidth-1,angle-this.branchAngle,depth);

}

}

運(yùn)行代碼:(查看效果)

cocos2dx html5 創(chuàng)建的js怎么引用

H5edu教育Html5開(kāi)發(fā)為您解答:

cocos2d-js是cocos2d-x的JavaScript版本,真正跨全平臺(tái)的游戲引擎,采用原生JavaScript語(yǔ)言,可發(fā)布到包括Web平臺(tái),iOS,Android,Windows Phone8,Mac,Windows等平臺(tái)。

利用cocos2d-js開(kāi)發(fā)HTML5游戲/動(dòng)畫(huà),我們可以通過(guò)SDK也可以直接使用js類庫(kù):

l SDK下載:

l js類庫(kù):

先說(shuō)說(shuō)SDK的開(kāi)發(fā)步驟:

1、 安裝python

2、 解壓SDK,運(yùn)行setup.py

3、 運(yùn)行cmd,新建cocos2d-js項(xiàng)目:cocos new –l js project_name

4、 使用webStorm等IDE打開(kāi)項(xiàng)目目錄,新建的項(xiàng)目已經(jīng)有現(xiàn)成HelloWorld例子

5、 了解一下main.js的說(shuō)明(關(guān)于project.json),然后打開(kāi)resource.js和app.js閱讀代碼

6、 在app.js中正式開(kāi)始自己的代碼編寫(xiě)。當(dāng)然,這里可以增加新的js文件,需要修改project.json。

再說(shuō)說(shuō)js類庫(kù)的開(kāi)發(fā)步驟:

1、 下載類庫(kù)

2、 新建HTML頁(yè)面,引入相應(yīng)類庫(kù)

3、 在onload之后,編寫(xiě)cocos2d-js代碼,從cc.game.run()開(kāi)始。入口代碼其實(shí)跟SDK開(kāi)發(fā)方式的main.js一樣。這里更推薦使用SDK方式,因?yàn)榭梢酝ㄟ^(guò)閱讀源代碼獲取API的使用說(shuō)明。

開(kāi)始cocos2d-js開(kāi)發(fā)前,需要洗洗腦,知道cocos2d-js的平面坐標(biāo)情況。這跟HTML和canvas的布局都不一樣。

wps_clip_image-10616

在cocos2d-js游戲中,畫(huà)面的左下角是(0,0),x從左往右遞增,而y是從下往上遞增的,跟數(shù)學(xué)的二維坐標(biāo)系一致。

Cocos2d-js框架把游戲拆分為很多個(gè)場(chǎng)景,當(dāng)玩家在不同界面切換的時(shí)候,框架實(shí)際上就是讓游戲畫(huà)面在不同場(chǎng)景中切換。跟Flash一樣,cocos2d-js也有最基本的元素——節(jié)點(diǎn)Node。節(jié)點(diǎn)可以包含子節(jié)點(diǎn),形成樹(shù)形結(jié)構(gòu):

wps_clip_image-1073

然后,Layer、Sprite繼承了節(jié)點(diǎn),實(shí)現(xiàn)了更多功能,例如Layer用于表示一個(gè)面板一個(gè)層,Sprite精靈用于加載圖片表示人物。而場(chǎng)景本身也是節(jié)點(diǎn),所以場(chǎng)景中可以添加層,層中可以添加層,也可以添加精靈。

網(wǎng)頁(yè)題目:html5樹(shù)形,漂亮html5樹(shù)形結(jié)構(gòu)
本文URL:http://jinyejixie.com/article44/dsdgshe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、品牌網(wǎng)站制作網(wǎng)站維護(hù)、商城網(wǎng)站、微信公眾號(hào)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
昭平县| 建平县| 吉林市| 盐边县| 芷江| 华坪县| 芷江| 博白县| 建宁县| 东乌珠穆沁旗| 巴东县| 隆回县| 图片| 年辖:市辖区| 肃宁县| 广丰县| 黄平县| 平原县| 离岛区| 阿巴嘎旗| 乌鲁木齐市| 边坝县| 怀宁县| 新郑市| 当阳市| 白河县| 三都| 罗源县| 西丰县| 杨浦区| 东台市| 嘉兴市| 溧阳市| 青铜峡市| 额尔古纳市| 上栗县| 古交市| 乌拉特后旗| 南阳市| 乌拉特中旗| 鱼台县|