小程序模板網(wǎng)

微信小程序上手項(xiàng)目-星座配對(duì)

發(fā)布時(shí)間:2018-04-21 10:11 所屬欄目:小程序開(kāi)發(fā)教程

這是一門微信小程序入門課程,通過(guò)學(xué)習(xí)本節(jié)課程可以使你快速上手小程序開(kāi)發(fā),在學(xué)習(xí)這門課之前,需要你先具備基本的前端開(kāi)發(fā)能力,包括html/css/JavaScrip,起碼你得會(huì)切圖,了解js語(yǔ)法。

為什么學(xué)習(xí)小程序

學(xué)習(xí)小程序之前要先了解,小程序是什么,有什么獨(dú)特的地方值得我們一定要去學(xué)習(xí)它,小程序是基于微信實(shí)現(xiàn)特定功能的一種載體,同樣基于微信實(shí)現(xiàn)功能的我們知道還有公眾號(hào)和微網(wǎng)站,那小程序的特點(diǎn)是什么,我們用HTML5做一個(gè)手機(jī)站不行嗎,再接入微信的SDK,功能也很強(qiáng)大,小程序最大的特點(diǎn),就是可以擁有媲美原生App的流暢體驗(yàn),這一點(diǎn)是非常誘人的,也是相比HTML5最大的優(yōu)勢(shì),尤其學(xué)到后面你會(huì)發(fā)現(xiàn)小程序的開(kāi)發(fā)還特別簡(jiǎn)單,開(kāi)發(fā)又簡(jiǎn)單體驗(yàn)又好,天底下哪有這么便宜的事,但小程序就是這樣一個(gè)東西。

小程序?yàn)槭裁茨茏龅浇咏捏w驗(yàn)?zāi)?,這是因?yàn)樾〕绦蛟诘讓泳褪钦{(diào)用的原生組件,我們開(kāi)發(fā)小程序編寫的前端代碼,可以理解為是調(diào)用微信內(nèi)部原生組件的快捷方式,因此,開(kāi)發(fā)小程序使用的必然是一種全新的語(yǔ)言,不可能是HTML5,本節(jié)課程就是帶領(lǐng)大家一起來(lái)學(xué)習(xí)這門語(yǔ)言,并且完成一個(gè)小示例,讓大家可以快速的對(duì)小程序開(kāi)發(fā)有一個(gè)直觀的認(rèn)識(shí)。

小程序開(kāi)發(fā)語(yǔ)言介紹

小程序的開(kāi)發(fā)語(yǔ)言跟HTML5是非常相似的,視圖層的兩種語(yǔ)言WXML和WXSS就分別對(duì)應(yīng)了HTML和CSS,邏輯層就仍然還是Javascript,為了便于理解,下面我就用小程序和HMLT5對(duì)比的方式,來(lái)講解小程序的這三種開(kāi)發(fā)語(yǔ)言。

首先我們說(shuō)區(qū)別最小的,就是小程序里的這個(gè)JS,它跟web開(kāi)發(fā)中的JS只有兩點(diǎn)區(qū)別,第一,沒(méi)有任何DOM操作相關(guān)功能,這一點(diǎn)跟Nodejs是一樣的,大家知道Js語(yǔ)言本身就是不包括DOM操作的,DOM操作是瀏覽器環(huán)境為JS做的擴(kuò)展;第二點(diǎn)區(qū)別,小程序里的Js增加了一些微信特有的API,這個(gè)很好理解,像微信掃碼啊,上傳下載啊這些功能,肯定是要單獨(dú)提供API的??偨Y(jié)一下,去掉了DOM操作,增加了一些API,另外值得一提的是小程序中的js是支持模塊化的,也支持ES6。

WXSS與CSS的區(qū)別,也是兩點(diǎn),第一,增加了一個(gè)rpx單位,這個(gè)單位具有自動(dòng)適應(yīng)屏幕寬度的特點(diǎn),規(guī)則是1rpx = 屏幕寬度/750,這是個(gè)很好用的單位,可以說(shuō)完美解決了屏幕適配的問(wèn)題,如果你用過(guò)HTML5里的vw單位,會(huì)發(fā)現(xiàn)他倆是一回事,只不過(guò)1vw = 屏幕寬度/100,比例不太一樣;第二個(gè)區(qū)別,WXSS支持的選擇器類型有限,目前只支持.class, #id, element, ele,ele, ::before, ::after,注意,后代選擇器是不支持的,這個(gè)我再開(kāi)發(fā)工具里測(cè)試發(fā)現(xiàn)可以支持,但文檔是明確說(shuō)只支持上面那些,那我們就聽(tīng)文檔的,后代選擇器就不要用了??偨Y(jié)一下,WXSS相比CSS增加了rpx單位,不支持后代選擇器;

最后WXML這塊的內(nèi)容比較多,尤其有一部分HTML里完全沒(méi)有的東西,比如說(shuō)數(shù)據(jù)綁定、條件渲染、列表渲染、模板、引用,這些東西我在這里就不展開(kāi)講了,如果你之前用過(guò)任何的前端MVVM框架或者前端模板引擎,那對(duì)這塊內(nèi)容應(yīng)該是輕車熟路的,如果說(shuō)這些東西都不知道,那也沒(méi)關(guān)系,自己回去把文檔這塊內(nèi)容仔細(xì)的閱讀一遍,相信都能看明白是怎么回事。

這里我們就說(shuō)兩個(gè)東西,標(biāo)簽和事件,首先,標(biāo)簽徹底換了一套,所有的HTML標(biāo)簽都不能用,取而代之的是小程序提供的一套標(biāo)簽,官方把他們叫組件,不管叫什么,這個(gè)組件的寫法和HTML標(biāo)簽是一樣的,也是由標(biāo)簽名,屬性,內(nèi)容組成,也可以嵌套,也可以通過(guò)class,id,style來(lái)添加樣式,但是小程序組件相對(duì)來(lái)說(shuō)擁有更強(qiáng)大的功能,自帶樣式也更豐富,舉個(gè)例子,

如果要做這樣一個(gè)從底部彈起的滾動(dòng)選擇器,想想是不是好麻煩,有很多樣式和js要寫,但是用小程序的組件來(lái)做,一個(gè)picker組件拿過(guò)來(lái),全有了,

1
<picker bindchange="pickerChange" value="{{index}}" range="{{array}}">

代碼就這么多,樣式都是自帶的,工作量一下就小了很多,這是小程序在設(shè)計(jì)上非常好的一點(diǎn),它在背后做了很多封裝,就為了讓開(kāi)發(fā)者開(kāi)發(fā)起來(lái)簡(jiǎn)單,實(shí)際上也達(dá)到了目的;

小程序的事件與HTML5里的事件,有哪些不一樣呢,第一個(gè)就是事件綁定的寫法不一樣了,小程序里是bind+事件名或catch+事件名,bind綁定不阻止冒泡,而catch會(huì)阻止冒泡;另外支持的事件種類也不一樣,常規(guī)事件只支持touchstart,touchmove,touchend,touchcancel,tap,longtap,除了這些事件以外,再有的事件就是組件的自定義事件,比如picker組件就有一個(gè)change事件,可以通過(guò)bindchange來(lái)綁定處理函數(shù);第三個(gè)區(qū)別是事件對(duì)象不一樣了,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"type":"tap",
"timeStamp":895,
"target": {
  "id": "tapTest",
  "dataset":  {
    "hi":"WeChat"
  }
},
"currentTarget":  {
  "id": "tapTest",
  "dataset": {
    "hi":"WeChat"
  }
},
"detail": {
  "x":53,
  "y":14
},
"touches":[{
  "identifier":0,
  "pageX":53,
  "pageY":14,
  "clientX":53,
  "clientY":14
}],
"changedTouches":[{
  "identifier":0,
  "pageX":53,
  "pageY":14,
  "clientX":53,
  "clientY":14
}]
}

自定義事件會(huì)有detail屬性,touch事件包括兩個(gè)不同的屬性,這些東西不用記,用到的時(shí)候知道去哪找就行了,總結(jié)一下,事件綁定的寫法bind/catch,事件類型6種+組件自定義事件,事件對(duì)象的內(nèi)容有區(qū)別;

小程序開(kāi)發(fā)框架介紹

掌握了小程序的開(kāi)發(fā)語(yǔ)言之后,我們還必須掌握小程序的開(kāi)發(fā)框架,框架故名思意就是條條框框,是用來(lái)具體的告訴你怎樣開(kāi)發(fā)小程序,我們先看一下小程序的目錄結(jié)構(gòu),

weapp-tree

這是一個(gè)比較典型的微信小程序項(xiàng)目結(jié)構(gòu),最下面三個(gè)文件名字都叫app,一個(gè)js一個(gè)json一個(gè)wxss,這三個(gè)是固定的,就得叫這個(gè)名字,就得放在這,另外的三個(gè)文件夾分別是放頁(yè)面、放樣式的、放工具類的,當(dāng)然你可以根據(jù)項(xiàng)目實(shí)際需求隨便改。

其中這個(gè)app.json就是小程序的配置文件,可以看到打開(kāi)里面是一個(gè)對(duì)象,配置了頁(yè)面和window的一些屬性,具體還有哪些配置以及他們的意義可以自己到文檔中去進(jìn)一步的了解。

然后我們就從上往下說(shuō)這個(gè)目錄結(jié)構(gòu),首先你會(huì)發(fā)現(xiàn)頁(yè)面是以文件夾為組織單位的,每個(gè)頁(yè)面至少要包含js wxml wxss這三個(gè)文件,而且這些文件都跟文件夾同名,這是一個(gè)約定,必須這么干,然后還有一個(gè)json文件是可選的,里面可以對(duì)當(dāng)前頁(yè)面做單獨(dú)的設(shè)置。下面這個(gè)util文件夾沒(méi)什么說(shuō)的,不是硬性要求,可有可無(wú)。再然后app.js,這個(gè)文件是非常重要的,它主要做兩件事,一是定義小程序的生命周期函數(shù),二是可以在這里定義全局?jǐn)?shù)據(jù)或全局方法,我們看代碼,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//app.js
App({
  onLaunch: function () {
    //調(diào)用API從本地緩存中獲取數(shù)據(jù)
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
  },
  getUserInfo:function(cb){
    var that = this
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //調(diào)用登錄接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      })
    }
  },
  globalData:{
    userInfo:null,
    apiKey: "c2d3e04cc633644f1c3ae3f6eea94564"
  }
})

這個(gè)onLaunch就可以定義一個(gè)小程序初始化的回調(diào),下面getUserInfo顯然就是一個(gè)自定義的函數(shù)了,再往下是一個(gè)globalData屬性,也是自定義的,用這些配置將小程序初始化后,可以在任意頁(yè)面中使用getApp()方法獲取到小程序示例,進(jìn)而訪問(wèn)到這些自定義方法或數(shù)據(jù)。

開(kāi)發(fā)一個(gè)《星座配對(duì)》小程序

《星座配對(duì)》小程序功能雖然很簡(jiǎn)單,但大多數(shù)小程序開(kāi)發(fā)常用的API都用到了,是一個(gè)很好的上手項(xiàng)目。

源碼:weapp-star

前端路上原創(chuàng)技術(shù)文章,轉(zhuǎn)載請(qǐng)注明出處:http://refined-x.com/2017/07/20/小程序上手指南/



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開(kāi)源 碼云倉(cāng)庫(kù):starfork
本文地址:http://22321a.com/wxmini/doc/course/23871.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢