在视频中已经说过了,小程序的设计思想和原生app的设计思想颇为相似,基本的应用单元为页面。当然对于一个页面来说每一个元素的放置位置在哪儿以及显示成什么样子这个是由 样式来决定的 。我们知道在web开发中样式是在css文件中规定的,叫做层叠样式表 (Cascading Style Sheets)。其实在APP中样式的约束也是使用css,在支付宝小程序中也是使用css不过文件的后缀是.acss而且对css3进行了扩充而已。
那么在支付宝小程序中的.acss和微信小程序中的.wxcss没有什么两样。 上边已经说了.acss其实包含了css3那么它还有一些新的特性是css3中不具备的,让我们一一看看
第一次看到这个东西也能猜到他是干什么用的。在css中我们知道规定大小一般使用像素(px)这个单位。比如显示生活中我们说房子128㎡那这儿的单位是平方米,在开发中需要更加精准的大小就是px像素。像素就非常精细了因为在我们显示屏幕中像素是最小的显示单元。这个道理如果不懂的话就找个LED屏幕仔细看,LED屏幕上一个一个的发光二极管可以想象为像素。
我们知道手机屏幕有大有小,就拿iPhone来说,iPhone 6 plus比iPhone 5要大。那么就说明plus的像素比5要多。对比:
加入有一个160px宽度的红色矩形在这两种手机中的位置如下:
rpx(responsive pixel)可以根据屏幕宽度进行自适应。如何自适应呢?看下边的分析:
看下图:
在模块化开发中我们有时候不得不在页面中使用其他的第三方库的样式,而第三方库的样式是保存在第三方包中的,我们不可能全部复制到我们的.acss文件中,那最好的办法就是导入了。在样式表中导入其他外联样式表。
当然仍旧支持内联样式和class属性制定样式类,如
选择器和css3的保持一致。一般有class=”test”类选择器和id=”test”的id选择器。当然在支付宝小程序的样式中特殊的地方就是:
※ .a- 或者 .am-为前缀的选择器已经被系统占用所以不要使用;
※ 不能使用属性选择器,例如,以下写法不被支持:
我之前说过小程序开发的应用单元为页面。其实我们在.axml中写的页面并不包含页面容器,就相当于我们做一个页面但是body标签不用写那如果我们要改变整个页面的背景怎么办呢?其实有一个固定的选择器。例如:
可以通过 page 元素选择器来设置页面容器的样式,比如页面背景色:
在你想改变页面容器的页面中定义该样式也可以,全局定义也可以,例如我想将test这个页面的页面容器背景设置为蓝色,就可以再pages目录下的test目录下找到test.acss在其中定义page的样式
下节是视图层讲解,如果有任何问题可以再下方给我留言或者发邮件到 weiyongqiang@weiyongqiang.com 我在收到邮件后会回复。
1、利用样式实现小程序动画(用法和css用法相识)
wxml 文件
<image class="aniamtion" src="../../images/page4.jfif" style="width:200rpxheight:200rpx position: relative"></image>
wxss文件
.aniamtion {
animation: mymove 5s infinite
/* //infinite属性是表示无限循环的意思,没有这个属性的话动画只执行一次。 */
}
@keyframes mymove {
from {
/* left: 0px*/
/* transform: rotate(7deg) skew(50deg) translate(30rpx,30rpx)*/
transform: rotate3d(100,200,300,0deg)
}
to {
/* left: 200px*/
/* transform: rotate(7deg) skew(5deg) translate(100rpx,100rpx)*/
transform: rotate3d(200,300,400,360deg)
}
}
2、 用小程序的API来实现动画
用wx.createAnimation(object) 来创建一个动画 -->返回一个animation对象
创建一个动画实例 animation。
onReady: function () {
this.animation = wx.createAnimation({
duration:1000,
timingFunction:'linear',
delay:100,
transformOrigin:"left top 0"
})
},
调用实例的方法来描述动画。
Animation.step() 表示一组动画的完成,可以在一组动画中调用任意多个动画方法,一组动画中的所有动画会同时开始,一组动画完成后才会进行下一组动画
rotate(){
this.animation.rotate(150).step() //对动画进行简单的描述
this.setData({
animation:this.animation.export()
})
},
最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性。
this.animation.export() 导出动画队列。export 方法每次调用后会清掉之前的动画操作
rotate(){
this.animation.rotate(150).step() //对动画进行简单的描述
this.setData({ // 在setData({}) 导出动画数据数据给组件
animation:this.animation.export()
})
},
完整的wxml
<view class="container">
<view animation="{{animation}}" class="view">
将做动画的块
</view>
</view>
<button type="default" size="mini" bindtap="rotate">
旋转
</button>
完整的wxjs
Page({
data: {
animation:''
},
onReady: function () {
this.animation = wx.createAnimation({
duration:1000,
timingFunction:'linear',
delay:100,
transformOrigin:"left top 0"
})
},
rotate(){
this.animation.rotate(150).step().translate(100).step()
this.setData({
animation:this.animation.export()
})
}
})
3、用选择器来绑定组件来来实现组件的动画(小程序2.9.0 的库可用,版本不够会报this.animate不是一个方法)
<text>pages/index7/index7.wxml</text>
<view id="container" style="height: 100pxwidth: 100pxbackground-color: blue">
container
</view>
<view class="block" style="height: 100pxwidth: 100pxbackground-color: #ccc">
block
</view>
用选择器选择相应的组件进行相应的动画
进行关键帧的处理
onLoad: function () {
this.animate('#container', [
{ opacity: 1.0, rotate: 0, backgroundColor: '#FF0000' },
{ opacity: 0.5, rotate: 45, backgroundColor: '#00FF00' },
{ opacity: 1.0, rotate: 90, backgroundColor: '#FF0000' },
], 5000)
this.animate('.block', [
{ scale: [1, 1], rotate: 0, ease: 'ease-out' },
{ scale: [1.5, 1.5], rotate: 45, ease: 'ease-in'},
{ scale: [2, 2], rotate: 90 },
], 5000)
},
}
4、用第三方的库 animation.css
需要做的有
从https://daneden.github.io/animate.css/下载css动画文件
把 .css 文件 改名成 .wxss文件(可进行相应的需改,毕竟小程序的大小限制摆在那里)
把它引入到你的app.wxss文件中
@import “动画文件的相对目录”
在用的时候把他和你的样式绑定
<view class="swing" style="height: 100pxwidth: 100pxbackground-color: #ccc">
block
</view>
// 给类名为swing 的文件绑定swing 的动画
.swing{
animation: swing 5s infinite
}
注册开发者账号: https://mp.weixin.qq.com/
安装小程序开发工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
创建项目
pages目录:用于存放所有的页面。
utils目录:用于存放工具类文件。
app.js:是入口文件,程序在运行时,首先要执行该文件。
app.json:是全局配置文件,用于配置小程序的信息(它里面配置的是全局信息)。
app.wxss:是全局样式文件。全局样式文件里面定义的选择器,在所有的页面中生效。
project.config.json:是项目配置文件。
sitemap.json:是SEO配置文件,方便用户搜索到该小程序。
(1)pages配置项
pages里面注册的是视图。用于指定小程序由哪些页面组成,每一项都对应一个页面的路径(含文件名)信息
(2)window配置项
window 是全局窗口配置。
backgroundTextStyle 设置文本样式(下拉loading的样式),仅支持 dark / light。
navigationBarBackgroundColor 设置导航栏背景。
navigationBarTitleText 设置导航栏文本。
navigationBarTextStyle 设置导航栏标题颜色,仅支持 black / white。
(3)style
style 设置样式级别,默认是v2。
(4)sitemapLocation
sitemapLocation 指明sitemap.json 的位置;默认为 'sitemap.json' 即在 app.json 同级目录下名字的 sitemap.json 文件。
每一个页面由四个文件组成:xxx.wxml文件、xxx.wxss文件、 xxx.js文件和xxx.json文件。
(1)xxx.wxml文件
xxx.wxml文件,就相当于一个html文件。在wxml文件中,不能写传统的html标签,只能写微信提供的组件。
① view组件
相当于div标签。
② text组件
相当于span标签。
③ swiper
swiper是滑块视图容器,它里面只能放swiper-item组件。
swiper组件的常用属性:
circular是衔接滑动
autoplay是自动切换
interval是自动切换时间间隔
indicator-dots是否显示面板指示点
indicator-color指示点颜色
indicator-active-color当前选中的指示点颜色
④ image
image是图片组件,最好全部采用网络图片,因为小程序的总体积不允许超过2MB。
(2)xxx.wxss文件
xxx.wxss文件,就相当于一个css文件。在wxss文件中,最好不要写标签选择器和id选择器,统一写类选择器。
为了让小程序里面的内容在各种设备上能够自适应显示,微信推出了响应式单位:rpx。在iphone6中,2rpx=1px。
(3)xxx.js文件
xxx.js文件,是交互文件(核心文件)。
Page()函数,返回页面对象,该函数需要传一个配置参数,这个配置参数是一个对象。在这个配置对象中,定义当前页面的所有内容。
① data
定义页面的数据。
② 自定义函数
开发者可以添加任意的函数或数据到Object 参数中,在页面的函数中用this可以访问。
(4)xxx.json文件
xxx.json文件,是页面的配置文件(它里面配置的是当前页面信息)。
WXML 中的动态数据均来自对应 Page 的 data。
(1)获取data中数据
通过插值表达式{{}},可以显示js里面定义的data里面的数据。
(2)组件属性(需要在双引号之内)
(3)运算
可以在{{}} 内进行简单的运算。
① 三元运算
② 逻辑判断
bindtap是触屏事件,其实就是相当于网页中的点击事件。
小程序中bindtap绑定方法时不能传参数。所以组件通过data-xxx传递数据。
注意: 自定义属性的命名用驼峰或者大写命名,小程序内部会自动转成小写。
8、setData()方法
setData()方法,更新页面中数据。页面数据更新后,调用setData()方法重新渲染到页面。
wx:for指令用于循环数组数据,生成组件。
循环出来的每一项通过item返回,每一项对应的索引,通过index返回。
wx:key="",设置每一项唯一的标识。循环列表时,添加wx:key的好处是,将来列表发生变化时重新渲染列表的损耗为更低。
条件渲染可以使用wx:if或hidden。
一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。
wx:if用于条件渲染:条件为真生成里面的内容,条件为假不会生成里面的内容。(每次重新生成内容)
也可以用wx:elif 和 wx:else 来添加一个 else 块。
hidden用于条件渲染:条件为真隐藏里面的内容,条件为假显示里面的内容。(每次切换样式)
在app.json文件中添加tabBar节点。tabBar是小程序客户端底部或顶部tab栏的实现。
color:tab上的文字默认颜色,仅支持十六进制颜色。
selectedColor:tab上的文字选中时的颜色,仅支持十六进制颜色。
backgroundColor:tab的背景色,仅支持十六进制颜色。
borderStyle:tabbar上边框的颜色, 仅支持 black / white。
position:tabBar的位置,默认值是: bottom,仅支持 bottom / top。当 position 为 top 时,不显示 icon。
custom:自定义tabBar。
(2)list
list:tab的列表。
list 接受一个数组,只能配置最少 2 个、最多 5 个 tab。
pagePath:页面路径,必须在pages 中先定义。
text:tab 上按钮文字。
iconPath:图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。selectedIconPath:选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。
(1)跳转普通页面
方法① navigator组件
方法② navigateTo()方法
navigateTo()方法,用于跳转普通页面。
(2)跳转tabBar页面
方法① navigator组件
如果要使用navigator组件跳转tabBar页面,需要设置open-type="switchTab"。
方法② switchTab()方法
switchTab()方法,用于跳转tabBar页面。
title:提示的标题
content:提示的内容
success:接口调用成功的回调函数。回调函数中的confirm属性返回true,表示点击的是确定按钮,否则是取消按钮。
title:提示的内容
icon:图标
duration:消息提示框的显示时间
mask:是否显示透明蒙层,防止触摸穿透
模块化语法有两种:① commonjs规范,② es6规范。
nodejs环境采用的就是commonjs规范。采用exports 或 module.exports 导出成员,采用require() 导入成员。
微信小程序支持commonjs规范,同时还支持官方的ES6规范。ES6规范采用export 导出成员,采用import 导入成员。
将封装的方法放到util目录下的js文件中。可以新建js文件,也可以写在直接util.js文件中。
(1)确认框方法
定义确认框方法,并导出
(2)消息框方法
定义消息框方法,并导出
(3)获取事件参数的方法
import是ES6的导入语句。
wx对象是微信小程序的全局对象,在任何地方都可以使用。
(1) 注册语句
(2) 在app.js入口文件中导入
注意: 注册给wx对象的方法,需要在app.js文件中导入,才可使用。
(3) 调用方法
wx.方法名(参数)