微信小程序(下面简称小程序)近些月来刷爆了咱们这些程序猿们的圈子,能够说无数的程序猿磨刀霍霍,准备在这快蛋糕上杀出一片天地。那么做为前端开发人员,小程序开发和咱们日常的开发有什么不一样的地方呢?让咱们一块儿来走进门里看看。
咱们从下面几个方向来了解一下小程序的开发:
1.开发工具
2.布局差别
3.JS差别
4.其它javascript
先看一张小程序初始化的目录:css
小程序包含一个描述总体程序的 app 和多个描述各自页面的 page。一个小程序主体部分由三个文件组成,必须放在项目的根目录,以下:app.js、app.json、app.wxss;一个小程序页面由四个文件组成,分别是:js、wxml、wxss、json。
详情传送门请戳-->https://mp.weixin.qq.com/debug/wxadoc/dev/framework/structure.html?t=20161107html
微信提供了一款 ’ 微信开发者工具 ‘ ,能够直接在小程序的官网下载(https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=20161107)。
微信开发者工具集成了开发调试、代码编辑及程序发布。关于工具自己没什么好介绍的,用了一段时间,从代码编辑的习惯来讲,比较相似sublime text3,各类特性也都和st3相差不大,估计也是内置了emmet,上手仍是比较轻松的。
须要注意一点的问题是在使用微信开发者工具时,要习惯使用”编译“功能,有的人会遇到本身在编辑器里明明修改了某些地方,可是页面里却没有发生变化,这个时候其实只须要从新编译一次,就妥妥的解决了。同时,遇到一些奇怪问题的时候,也不妨清理一下缓存,也许会有意外收获。前端
小程序的标签和咱们习惯的div,p,span等标签有较大的差别,小程序里彻底取消了这些咱们所熟悉标签,取而代之的标签又被叫作组件,分别是视图容器、基础内容、表单组件、操做反馈(将会废弃,改成API)、导航、媒体组件、地图和画布这八类。(传送门:https://mp.weixin.qq.com/debug/wxadoc/dev/component/?t=20161107)
组件的用法和标签同样,好比view组件< view>< / view>、text组件< text>< /view>。从写法上看起来和标签写法没什么区别,可是这些组件和标签最大的区别就是,组件自己设置了样式,好比icon组件:java
<view class="group">
<block wx:for="{{iconSize}}">
<icon type="success" size="{{item}}"/>
</block>
</view>
咱们只须要使用icon组件,不须要去本身设置样式就能够获得对应的icon样式。
在平常小程序开发中,比较经常使用的组件有view和text,其中用的最多的就是view,view自己并无默认太多的样式,只有一个display:block样式,因此在我看来view就相似于div,咱们也就把它看成div来使用就好了,而后你就会发现布局的时候处处都是view~,就像下图:ajax
满眼全是view这种写法不须要像html同样考虑语义、seo神马的,很是的简单粗暴~。 json
额外提一下text组件,text拥有view所没有的一个特性就是text组件内的文本能够被复制、能够被复制、能够被复制(重要的事情说三遍~)。若是你但愿某段文本能够被复制,那么你只能使用text组件。同时须要注意的一点,text组件内部不能嵌套view组件!嵌套无效!小程序
若是说html的标签发生了较大变化的话,那么css则几乎是没有什么变化,这意味着咱们能够很是快速的在小程序里重构咱们的移动端网页(直接把样式拷贝过来便可)。可是有几点问题咱们须要注意下:
1.小程序引入了新的单位rpx:能够根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
2.不支持less、sass等写法
3.不支持不支持级联选择器,例如: .test:nth-child(2)、.test:last-child等
4.支持::before和::after微信小程序
注:想了解更多请戳-->https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxss.html?t=20161107缓存
虽然小程序的交互采用的是js的语法,可是最大的变化就在于小程序没法使用选择器获取到页面的某个’dom’(应该不叫dom),这也是咱们前端人员须要思路转变的地方,以往咱们习惯于获取某个dom,而后这个dom上绑定各类事件,同时对页面进行一些改变操做,可是小程序并无提供这种咱们习惯的方法。
不能获取dom,也不能直接操做dom,那咱们该怎么写呢?
bind和catch的做用从字面意思就能够大体猜出是用来绑定某些东西的,没错,这是小程序提供绑定事件的两个方法,而他们的区别在于bind不阻止冒泡,而catch阻止冒泡。小程序不提供获取dom的操做,而是让咱们直接将事件绑定写入到组件内,以下代码:
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
看到这你们可能发现了bind后面跟着一个tap,这个tap是什么东东?
tap其实就是一个事件,你能够理解为click,不过在手机端叫作tap,其它的事件还有:touchstart、touchmove、touchcancel、touchend、longtap。
bindtap=”tapName”组合起来就是绑定个tap事件,tapName则是对应的方法名,在这里须要注意一点,调用方法时不可以使用tapName(“txt”)这种形式来传参,小程序不支持。那么若是咱们想要给方法传递一些参数该怎么作呢?接着往下看。
咱们先看一段代码:
Page({
tapName: function(event) {
console.log(event)
}
})
打印出来的结果:
{
"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
}]
}
看到这么一堆东西你们可能有点晕,没事,咱们来捋一捋。这个event想来你们应该明白是什么,event包含了目标对象的相关信息。那意味着,咱们只要去修改目标对象的相关信息,就能够给tapName方法传输参数了。
那么如何修改目标对象的相关信息呢?在这以前咱们必需要先了解下currentTarget和target两个属性,前者是绑定事件的组件,后者是触发事件的组件源。理解清楚这两个属性很重要!若是是上面例子这种状况,只有一个view组件,那么这两个属性的值没什么区别,可是若是换成下面的这个例子,就不同了:
<view id="tap1" data-hi="绑定组件" bindtap="tapName">
<view id="tap2" data-hi="触发组件源"></view>
</view>
咱们再输出看看(为了方便对比,只保留下currentTarget和target两个属性):
{
"target": {
"id": "tap2",
"dataset": {
"hi":"触发组件源"
}
},
"currentTarget": {
"id": "tap1",
"dataset": {
"hi":"绑定组件"
}
}
}
经过这个例子就能够很清楚的发现,currentTarget对应的就是外层绑定了tapName方法的view组件,而target对应的则是内部的view组件。
经过两个例子,相信你们也注意到了两个属性,data-hi和dataset,这两个属性有什么关系呢?你们应该猜到了,dataset的值其实就是咱们设置的data-xxx的值,而xxx则是dataset里面的key。你们对于data-xxx的写法应该不陌生,就是html中常见的自定义属性的写法,而在小程序中,则被用来传参。
前面就提到了小程序并不提供获取和操做dom的能力,这就又带来了一个问题,咱们如何去动态的改变样式呢?咱们先看下例子:
<view class="container" style="overflow: {{screenType?'hidden':'scroll-y'}}" bindtap="bindType" >
Page({
data: {
screenType: ''
},
bindType: function(){
this.setData({
screenType: '1'
})
}
})
你们是否是有点明白了呢,咱们没有办法直接获取dom而后去改变他的样式,因此咱们只能经过data里的属性来控制样式的变化,如上面的代码,overflow的值取决于screenType的值是否存在,若是存在,则overflow: hidden,反之overflow: scroll-y;那么咱们只须要改变screenType的值。要改变screenType的值也简单了,小程序提供了this.setData方法,能够设置data内的值。
最后提一下咱们熟悉的ajax请求,在小程序里,它不叫ajax,而叫作wx.request。用法和ajax没什么区别,惟一须要特别注意的是,请求必须是https请求!而不是日常的http请求!除了必需要是https请求之外,还须要到小程序的后台里设置合法域名,不然没法请求。
了解了这些东西,基本小程序就能算是入门了,至于小程序其它更多的功能,你们能够在工做或者学习中本身去熟悉。有不懂的能够留言。