由于小组需求,现在转为学小程序,先把安卓放一放
全局配置
app.json里面的代码
JavaScript
{
"pages":[
"pages/index/index",
"pages/maps/maps" ,
"pages/users/users",
"pages/massages/massages",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"dark",
"navigationBarBackgroundColor": "#E3A4B1",
"navigationBarTitleText": "车库定位",
"navigationBarTextStyle":"black",
"enablePullDownRefresh":true,
"backgroundColor": "#eeeeee"
},
"tabBar": {
"list": [
{
"pagePath": "pages/index/index",
"text": "定位",
"iconPath": "imge/_map.jpg",
"selectedIconPath": "imge/map.jpg"
},
{
"pagePath": "pages/users/users",
"text": "我的",
"iconPath": "imge/_user.jpg",
"selectedIconPath": "imge/user.jpg"
}
],
"color": "#777777",
"selectedColor": "#EE008F",
"backgroundColor": "#E3A4B1"
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}
2.数据绑定
某个文件的.wxml文件的代码
JavaScript
<!--pages/users/users.wxml-->
<!--
1 text 相当于以前web中的span标签 行内元素 不会换行
2 view 相当于以前web中的div标签 块级元素 会换行
3 checkbox 以前的复选框
-->
<text>小</text>
<text>小</text>
<view>小小</view>
<view>小小</view>
<!--1 字符串-->
<view>
{{msg}}
</view>
<!--2 数字类型-->
<view>
{{num}}
</view>
<!--3bool类型-->
<view>
啦啦啦:{{isGirl}}
</view>
<!--4object-->
<view>
{{person.age}}
</view>
<view>
{{person.name}}
</view>
<!--5在标签的属性中使用-->
<view data-num="{{num}}">自定义属性</view>
<!--6 使用bool类型充当属性 checked属性激活设置false或者true
注意:字符串和花括号之间一定不要存在空格 否则会导致识别失败
以下写法就是错误的示范
<checkbox checked=" {{isChecked}}"></checkbox >
-->
<view>
<checkbox checked="{{isChecked}}"></checkbox >
</view>
<!--7运算 =》 表达式
1 可以在花括号中加入表达式 -- “语句”
2 表达式
指的是一些简单的运算 数字运算 字符串 拼接 逻辑运算
1数字的加减
2字符串拼接
3三元表达式
3 语句
1 复杂的代码段
1 if else
2switch
3do while
4for
-->
<view>
{{1+1}}
</view>
<view>
{{'1'+'1'}}
</view>
<view>
{{11%2===0?'偶数':'奇数'}}
</view>
<!--
8列表循环
1 wx:for="{{数组或者对象}}" wx:for-item="循环项的名称" wx:for-index="循环项的索引"
2 wx:key="唯一的值" 用来提高列表渲染的性能,也就是说key要用唯一的值
1 wx:key 绑定一个普通的字符串的时候,那么这个字符串名称肯定是循环数组中的对象的唯一属性
2wx:key="*this"(固定的写法)就表示你的数组是一个普通的数组 *this表示是循环项
形式如下面这样的时候就要使用*this
[1,2,3,4]
["1","2","3"]
3当出现数组的嵌套循环的时候 尤其要注意 以下绑定的名称 不要重名
4默认情况下 我们不写这几句wx:for-item="item" wx:for-index="index"
小程序也会把循环项的名称和索引的名称定义为item和index
只有一层循环的话(wx:for-item="item" wx:for-index="index")可以省略
9对象循环
1 wx:for="{{对象}}" wx:for-item="对象的值" wx:for-index="对象的属性"
2循环对象的时候最好把item和index的名称都修改下
wx:for-item="value" wx:for-index="key"
10使用 wx:for-item 可以指定数组当前元素的变量名,
使用 wx:for-index 可以指定数组当前下标的变量名:
也就是说
wx:for-item="value"
wx:for-index="key"
-->
<!--循环数组的例子-->
<view wx:for="{{list}}"
wx:for-item="item"
wx:for-index="index"
wx:key="id">
索引 :{{index}}
值:{{item.name}}
</view>
<view wx:for="{{xiao}}"
wx:for-item="item"
wx:for-index="index"
wx:key="*this"> <!--注意这里的key要写成*this-->
索引 :{{index}}
值:{{item}}
</view>
<!--循环对象的例子-->
<view wx:for="{{person}}"
wx:for-item="value"
wx:for-index="key"
wx:key="name">
索引 :{{key}}
值:{{value}}
</view>
某个文件的.js文件的代码
JavaScript
// pages/users/users.js
Page({
data: {
msg:"小小有大大的梦想",
num:10000000,
isGirl:false,
person:{
age:22,
name:"小小"
},
isChecked:true,
list:[
{id:20,
name:"xiaoxiao"},
{id:22,
name:"dada"}
],
xiao:[1,2,3,4,5]
}
});
3.block标签
JavaScript
<!--block标签
中文翻译过来的意思是‘块’,意思就是一大段代码需要一个括号包裹起来一样,形成一块一块
其实也就类似头条的这个块。这样的好处就是有了block标签过后,你就可以把if 或则 for 语句写在block标签里面这样就控制了这一块的逻辑。
-->
<block wx:for="{{list}}"
wx:for-item="item"
wx:for-index="index"
wx:key="id">
索引 :{{index}}
值:{{item.name}}
</block>
4.条件渲染
JavaScript
<!--
11条件渲染
1 wx:if="{{true/false}}"
1 if wx:if
else wx:elif
if else wx:else
2 hidden
1 在标签上直接加入属性 hidden
2 hidden="{{true}}"
3 什么场景下用哪个
1当标签不是频繁的切换显示 优先使用wx:if
直接把标签从页面结构给移除掉
1当标签频繁的切换显示 优先使用hidden
通过添加样式的方式来切换显示
-->
<view>条件渲染</view>
<view wx:if="{{true}}">
显示
</view>
<view wx:if="{{false}}">
隐藏
</view>
<view wx:if="{{false}}">
1
</view>
<view wx:elif="{{flase}}">
2
</view>
<view wx:else>
3
</view>
<view>-------------</view>
<view hidden>
hidden1
</view>
<view hidden="{{flase}}">
hidden2
</view>
<view wx:if="{{false}}">
wx:if
</view>
<view hidden>
wx:if
</view>
5.事件绑定
.js文件
JavaScript
// pages/users/users.js
Page({
data: {
msg:"小小有大大的梦想",
num:0,
isGirl:false,
person:{
age:22,
name:"小小"
},
isChecked:true,
list:[
{id:20,
name:"xiaoxiao"},
{id:22,
name:"dada"}
],
xiao:[1,2,3,4,5]
},
//输入框的input事件的执行逻辑
handleInput(e){
// console.log(e);
this.setData({
num:e.detail.value
})
},
handletap(e){
//console.log(e);
//1获取自定义属性 operation
//e.currentTarget 代表的是,注册了监听点击事件的组件。在本例中,就是外层的View(包含了两个TextView)
//e.currentTarget.dataset.id一直都是new1(因为注册点击监听事件的组件,是整个外层View,点击View中的任何部位,都会触发View注册的方法)
//不懂的话可以看这个例子https://www.jianshu.com/p/4aac393f8559
const operation=e.currentTarget.dataset.operation;
this.setData({
num:this.data.num+operation
})
}
});
wxml文件
JavaScript
<!--1 需要给input标签绑定 input事件
绑定关键字bindinput
2如何获取 输入框的值
通过事件源对象(就是函数的参数就是对象源)来获取
e.detail.value
3把输入框的值赋值到data当中
this.setData({
num:e.detail.value,
})
4需要加入一个点击事件
1bindtap
2无法在小程序当中的事件中直接传参
3通过自定义属性的方式来传递参数
4事件源中获取自定义属性
-->
<input type="text" bindinput="handleInput"/>
<button bindtap="handletap" data-operation="{{1}}">+</button>
<button bindtap="handletap" data-operation="{{-1}}">-</button>
<view>
{{num}}
</view>
6.样式rpx
.wxss文件
JavaScript
/*rpx:可以根据屏幕亮度进行自适应。规定屏幕宽为750rpx。如在iphon6上,屏幕宽度为375px,共有750个物理像素,
则750rpx=750物理像素,1rpx=0.5px=1物理像素
1小程序中,不需要主动来引入样式文件
2需要把页面中某些元素的单位由px改成rpx
1设计稿750px
750px=750rpx
1px=1rpx
2把屏幕宽度改成375px
375px=750rpx
1px=2rpx
1rpx=0.5px
3存在一个设计稿宽度为未知page
1设计稿page存在一个元素 宽度100px(这个100px是设计稿page里面的一个东西的像素)
2拿以上的需求去实现不同的页面适配
page=750rpx
1px=750rpx/page
100px=750rpx*100/page
假设page=375px
*/
view{
/* width:200rpx; */
height:200rpx;
font-size:40rpx;
background: aqua;
/* 以下代码写法是错误 */
/* width:750rpx*100/375 */
/* calc属性要求750和rpx中间不要留空格
运算符的两边也不要留空格 */
width:calc(750rpx*100/375);
}
wxml文件
JavaScript
<view>
rpx
</view>
7样式导入
使用@import语句可以导入外联样式表,只支持相对路径
a.wxss
JavaScript
view{
color: chartreuse;
font-size: 100px;
}
b.wxss
JavaScript
只能写相对路径
引入的代码是通过@import来引入
@import "../../styles/common.wxss";
b.wxml
JavaScript
<view>
rpx
</view>
8使用less
less文件
JavaScript
/*1定义less变量*/
@color:yellow;
text{
color: @color;
}
// 嵌套
view{
.vie1{
text{
color: red;
}
}
}
@import"../../styles/reset.less";
view{
color:@themeColor;
}
接下来学习基本的组件
9.text标签
JavaScript
<!--pages/massages/massages.wxml-->
<!--
text文本标签
1长按文字复制 selecttable
2对文字内容进行解码 decode
3只能嵌套tetx
4 decode可以解析的有 < > & '    
-->
<text selectable="true" decode>
xiaoxiao dada
</text>
10image图片标签
.wxml文件
JavaScript
<!--pages/xiao1/xiao1.wxml-->
<!--image 图片标签
1 src指定要加载的图片的路径
图片存在默认的宽度和高度是320*240 ,可以通过“路过图床”把图片变成外网链接就可以了(在小程序上用外网链接)
2mode 决定图片 内容 如何 和 图片标签 宽高做适配
1 scaleToFill 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
2 aspectFit 缩放模式,保持纵横比缩放图片,使图片的 长边 能完全显示出来。也就是说,可以完整地将图片显示出来。 常用
3 widthFix 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变
4 bottom等类似的值,不缩放图片,只显示图片的某个区域,类似以前的background-position
-->
<image mode="left" src="https://s1.ax1x.com/2020/09/24/0SwXBq.jpg" />
wxss文件
JavaScript
/* pages/xiao1/xiao1.wxss */
image{
box-sizing: border-box;
border: 1px solid green;
width: 300px;
height: 500px;
}
11.swiper 轮播标签
.wxml文件
JavaScript
<!--
1 轮播图外层容器 swiper
2 每一个轮播项 swiper-item
3 swiper标签 存在默认样式
1 width 100%
2 height 150px
image存在默认宽度和高度320*240
3 swiper 高度无法实现由内容撑开
4先找出来原图的宽度和高度 等比例给swiper定宽度和高度
假如原图的宽度和高度1125*352px
swiper宽度/swiper高度=原图的宽度/原图的高度
swiper高度=swiper宽度*原图的高度/原图的宽度
height:100%*352/1123
5 autoplay 是否自动切换
6 interval 修改轮播时间 默认为5秒
7 circular 衔接轮播
8 indicator-dots 是否显示面板指示点
9 indicator-color 指示器的未选择的颜色
10 indicator-active-color 选中的时候指示器的颜色
-->
<swiper autoplay interval="3000" circular indicator-dots >
<swiper-item ><image mode="widthFix" src="//img.alicdn.com/imgextra/i2/91/O1CN012kQACi1CXifMv0CAU_!!91-0-luban.jpg" /></swiper-item>
<swiper-item ><image mode="widthFix" src="//gw.alicdn.com/imgextra/i1/133/O1CN01nuS4LH1CqxIfsIMYY_!!133-0-lubanu.jpg" /></swiper-item>
<swiper-item ><image mode="widthFix" src="//img.alicdn.com/imgextra/i3/123/O1CN019Spbkn1CmNL8sVX1N_!!123-0-luban.jpg"/></swiper-item>
</swiper>
.wxss
JavaScript
/* pages/xiao2/xiao2.wxss */
switch{
width: 100%;
height: calc(100%*352/1123);
}
image{
width: 100%;
}

微信扫码关注
更新实时通知