前言我本來是安安靜靜地寫著Android的,只想一心一意做我的本行,沒想到某龍偏偏想搞事情——在2017年的1月9號(hào)推出了微信小程序,而且“小程序”這三個(gè)字又勾起了本猿的興趣,所以,只好暫時(shí)“移情別戀”了。正文廢 ...
我本來是安安靜靜地寫著Android的,只想一心一意做我的本行,沒想到某龍偏偏想搞事情——在2017年的1月9號(hào)推出了微信小程序,而且“小程序”這三個(gè)字又勾起了本猿的興趣,所以,只好暫時(shí)“移情別戀”了。
廢話不多說,先上效果圖
本demo完成共耗費(fèi)近兩周,也是在空余時(shí)間去寫的,因?yàn)樯婕暗叫轮R(shí)JS、HTML和CSS3,所以也是邊學(xué)習(xí)邊寫,代碼編寫上有什么不當(dāng)處,還需小伙伴在評(píng)論處指明,幫助本猿更上一層樓!
(注:本文章已默認(rèn)各位小伙伴已經(jīng)熟悉微信小程序的目錄結(jié)構(gòu)以及每個(gè)文件所代表的的含義和小程序API的使用,所以文中不會(huì)詳細(xì)說明,結(jié)尾會(huì)直接給出完整代碼)
貓眼電影api:點(diǎn)擊此處
一、目錄結(jié)構(gòu)
采用的開發(fā)工具是Egret Wing(點(diǎn)擊進(jìn)入官網(wǎng)下載),主要目錄說明:
從目錄可知整體結(jié)構(gòu)簡單,主要就是三個(gè)界面:首頁homepage、電影詳情頁moviedetail、影院列表頁cinema。
二、首頁
tab代碼,打開app.json如圖:
這里我想說下,微信小程序自帶對(duì)tabBar選擇效果本猿還是挺喜歡的(如果在Android上還要給每個(gè)tab寫個(gè)selector選擇器的XML文件)由于這段沒什么技術(shù)難點(diǎn),所以本猿就不多說了。
接下來進(jìn)入首頁homepage,一個(gè)界面的文件結(jié)構(gòu)離不開三個(gè)文件:xxx.js、xxx.wxml、xxx.wxss
先來看看布局代碼:
在這里本猿承認(rèn)當(dāng)初寫的時(shí)候偷了下懶,有些標(biāo)簽屬性我直接用style寫了,但真正開發(fā)時(shí),最好把每個(gè)標(biāo)簽的style寫在.wxss文件里,通過自定義的class名稱(或者id),相同布局的地方可以直接引用同一個(gè)class就可以了,不然會(huì)像我這樣有些屬性重復(fù)寫了幾次(手動(dòng)尷尬)。
.js代碼往下看:
電影列表的信息本放到了定義的infos[]數(shù)組中,小程序也不存在json解析,在wx.request請(qǐng)求下得到的res取相應(yīng)的值res.data.data.movie,直接在homepage.html標(biāo)簽中用wx:for=“{{infos}}”遍歷,元素默認(rèn)為item,取值的時(shí)候用“item.值的名稱”就可以取到數(shù)據(jù)。
這里有個(gè)小地方需要說明下,當(dāng)時(shí)為了解決也是花了點(diǎn)時(shí)間:在json數(shù)據(jù)里有個(gè)參數(shù)名稱為“3d”,而且這個(gè)標(biāo)簽不是所有電影都有的,所以定義了threeD:true這個(gè)變量,為了能在.wxml中取到值,就可想而知的直接寫成了wx:if="{{item.3d}}",結(jié)果就報(bào)錯(cuò)了:
問題就出在這個(gè)3d上,后來查資料才得知改寫成wx:if="{{item['3d']}}"就立馬解決啦,沒什么原因,約定俗成,只是我這只前端小白不知道而已(莫見怪......手動(dòng)微笑)
為了讓大家更清楚了解電影列表快的布局,我畫了個(gè)草圖(真的很草......):
發(fā)個(gè)牢騷:第一次寫布局時(shí)心里就想,還是Android布局寫起來方便,剛開始接觸CSS3時(shí)覺得好麻煩,這個(gè)class要給個(gè)style,那個(gè)也要給個(gè),而且有時(shí)要設(shè)置id,在同一個(gè)class下不同的id也要在wxss給個(gè)style,現(xiàn)在適應(yīng)后感覺還算良好了。因?yàn)椴季謪?shù)沒難點(diǎn),所以這里就不貼代碼了。
二、詳情頁
這里不貼全部代碼了,只用關(guān)鍵代碼說明下當(dāng)時(shí)遇到的幾個(gè)問題:
①高斯模糊
這里共有兩個(gè)<view>,一個(gè)class=“blur”(高斯模糊背景),一個(gè)class=“info”(電影信息)。剛開始是本著Android的布局設(shè)計(jì)思維去寫這個(gè)布局,這不就是個(gè)RelativeLayout嗎,寫著寫著到最后效果出來,發(fā)現(xiàn)本猿還是太天真,信息那一欄我莫名其妙寫到高斯模糊的下面了,也就是寫成了LinearLayout且orientation=vertical,當(dāng)時(shí)就笑自己:你現(xiàn)在又不是在寫Android,醒醒!孩子~主要原因是CSS3的知識(shí)不夠,所以我就老老實(shí)實(shí)去學(xué)習(xí)了一番,下面便是代碼:
filter:blur(30px)和-webkit-filter:blur(30px)形成了高斯模糊的效果(內(nèi)心OS:如果是Android的話又是一大堆代碼)。info中的position:relative、z-index:1,blur中的position:absolute、z-index:0相結(jié)合就能展示出上面的效果,關(guān)鍵在于info中的z-index要大于blur的,表示顯示在blur的上方,還要保證info是相對(duì)的,blur是絕對(duì)的,感興趣并且沒接觸過CSS3的盆友可以下載代碼自己去試試改改看看效果,不要像本猿我一樣以為自己會(huì)反而是自作聰明。
②點(diǎn)擊顯示全部
這里本猿又要贊揚(yáng)一下三元運(yùn)算符了:
.js文件中在data里設(shè)置三個(gè)變量
showall方法
hideText布爾值用來判斷當(dāng)前是否為隱藏狀態(tài),用style="{{hideText?'-webkit-line-clamp:3':' '}}"設(shè)置顯示行數(shù),當(dāng)hideText為true是顯示3行,否則不給值,即默認(rèn)。定義hideClass來控制箭頭的指向,‘down’表示當(dāng)前簡介為隱藏,‘up’表示顯示了全部,對(duì)于圖標(biāo)旋轉(zhuǎn)這里只需給個(gè)旋轉(zhuǎn)屬性就行
好了,本猿在詳情頁中花的時(shí)間比較多的就在這兩處了,還是那句老話:不明白的多去查找些資料。
評(píng)論部分就是簡單的列表,這里不再詳細(xì)說明。
三、電影院列表
這里只是簡單的列出信息就行了,在布局上沒難點(diǎn),不過代碼可以優(yōu)化下,本猿為了省事所以就沒去寫了,就簡單為了實(shí)現(xiàn)下效果。
總體來說,代碼沒什么難度,只有三個(gè)頁面,只是為了熟悉JS和CSS3而寫的一個(gè)demo,看過代碼后的盆友就能知道可優(yōu)化的地方很多的。這也是本猿入駐簡書以來第一次寫的文章(唉~終于跨出了第一步),只是想把剛學(xué)習(xí)的知識(shí)自己總結(jié)下,回顧下,與大家分享下,不到位的地方還請(qǐng)指正!
然后再來說說我對(duì)微信小程序的看法:
真的是“小”程序,官方指明程序大小最多不可超過1M,1M啊!盆友們,所以就說明了小程序是沒什么功能的,只能滿足該應(yīng)用的本能作用,所以針對(duì)手機(jī)上的低頻應(yīng)用,我是覺得可以舍app取其小程序,因?yàn)槲揖瓦@么做了,比如美團(tuán)外賣、餓了么、金山詞霸等等。由于大小的限制造成功能的縮減,所以開發(fā)周期可想而知也會(huì)縮短,減少了一定的人力。
將來,也不敢說小程序會(huì)一直走下去或者中途夭折,但小程序的出現(xiàn)也說明又進(jìn)行了一次“代碼革命”,革命能不能成功就看小程序是否真的有長期存在的價(jià)值了。你們,怎么看?
THE END
源碼下載:wx_Maoyan.zip
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)