窗口栏
在app.json中修改窗口栏
1 2 3 4 5 6 7 8 9 10 11 12
| "window": { "navigationBarBackgroundColor": "#ec1380", "navigationBarTextStyle": "white", "navigationBarTitleText": "新番查询", "navigationStyle": "default", "backgroundColor": "#ec1380", "backgroundTextStyle": "dark", "backgroundColorTop": "#ffffff", "backgroundColorBottom": "#ffffff", "enablePullDownRefresh": true, "onReachBottomDistance": 50 }
|
常用属性:
属性 |
默认值 |
描述 |
navigationBarBackgroundColor |
#000000 |
导航栏背景颜色,如 #000000 |
navigationBarTitleText |
|
导航栏标题文字内容 |
轮播图
1.index.wxml添加元素
1 2 3 4 5 6 7
| <swiper class="swiper" indicator-dots="{{true}}" autoplay="{{true}}" interval="5000" duration="500" circular="{{true}}" current="0" bindchange="swiperChange" > <block wx:for="{{imgUrls}}" wx:key="unique"> <swiper-item > <image src="{{item}}" class="img"/> </swiper-item> </block> </swiper>
|
(1)swiper标签,微信小程序滑块视图容器,以下是其常用属性
属性 |
默认值 |
说明 |
indicator-dots |
false |
是否显示面板指示点 |
autoplay |
false |
是否自动切换 |
current |
0 |
当前所在滑块的 index |
interval |
5000 |
自动切换时间间隔 |
duration |
500 |
滑动动画时长 |
circular |
false |
是否采用衔接滑动 |
bindchange |
无 |
current 改变时会触发 change 事件,event.detail = {current, source} |
(2)block标签,可在wxml文件实现逻辑,常用的有wx:for和wx:if
- 在组件上使用
wx:for
控制属性绑定一个数组,可以理解为该元素储存了一个数组(imgUrls),通过wx:for遍历了这个数组
- wx:key用于指定列表中项目的唯一的标识符,相当于数组的下标,确定轮播图的顺序
(3)swiper-item,放置在swiper标签中,用于确定轮播对象,代码的轮播对象是图片
2.index.wxss排布元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| .swiper-con{ position: relative; }
swiper{ height: 421rpx; }
swiper-item image{ width: 100%; height: 100%; }
.swiper-con .swiper{ height:300rpx; }
.swiper-con .swiper .img{ width: 100%; height: 100%; }
|
与css类似的语法,确定轮播图的排布
3.index.js实现逻辑
1 2 3 4 5 6 7 8
| data: { imgUrls:[ "https://i0.hdslb.com/bfs/bangumi/image/bc3c51659027a8f54a8a0a5894c83cafe582139f.jpg@2320w_664h.jpg", "https://i0.hdslb.com/bfs/bangumi/image/8f11a567cf9bed9035c4250584cec6847a7f42cb.jpg@2320w_664h.jpg", "https://i0.hdslb.com/bfs/bangumi/image/ba2a537e388881d4e0c9aec097b7ab690ab9849a.jpg@2320w_664h.jpg", "https://i0.hdslb.com/bfs/bangumi/image/b719ed2a2856345a57c4a68fddcc9de3c01a0ddc.jpg@2320w_664h.jpg" ] }
|
- data内数据是wxml变量的初始数据,wxml通过wx:for遍历imgUrls,并存储在item变量中输出(注意变量名一定要为item)
- 函数swiperChange被触发,函数写法为: 函数名:function(参数){内容}
- this.setData更改变量,可用console.log(e)输出数据数组
接入API
1.index.js实现逻辑
1 2 3 4 5 6 7 8 9
| wx.request({ url:"https://bangumi.bilibili.com/web_api/timeline_global", data:{x:"result"}, header: { 'content-type': 'application/json' }, success(res){ console.log(res.data) }
|
- url,填入请求的域名,记住要勾选不校验域名合法或在微信平台填写该域名否则报错
- data,返回的数据
- header,一般默认不填,返回json型数据
- success(),请求成功后执行的语句,一般都会用console.log(res.data)输出数据数组,以便检索出数据
构建选择器
1.index.wxml添加元素
1 2 3 4 5 6 7
| <view class="choose"> <picker bindchange="bindPickerChange" range="{{array}}" value="{{index}}" > <view class ="picker"> 日期选择:{{array[index]}} </view> </picker> </view>
|
(1)标签构建选择器,用mode确定选择器的类型
- selector,普通选择器,mode不填时,默认使用
- time,时间选择器,小程序内置的可以选择时间的选择器
- date,日期选择器
- region,省市区选择器
(2)range属性,填入一个数组作为选择器的项,这个数组在index.js的初始数据中填写
(3)value属性,填写的是数组的下标,数据同样在data中填入
1 2 3 4
| data: { array: [], index: 6, },
|
(4)bindchang属性,填入触发的函数,函数在index.js文件中构建
(5)以上内容都是处理了选择器的数据,接下来就要在页面上展示选择器
1 2 3 4 5 6 7
| <view class="choose"> <picker bindchange="bindPickerChange" range="{{array}}" value="{{index}}" > <view class ="picker"> 日期选择:{{array[index]}} //填入可变的数据 </view> </picker> </view>
|
2.index.wxss选择器布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| .choose{ height:10rpx; width: 100%; display:flex; flex-direction: column; align-items: center; margin-top: 25rpx; }
.picker{ border-bottom: 5px solid #70bcf6; border-radius: 2px; }
|
3.index.js构建函数
本项目需要实现的是,获取B站新番的数据,通过选择器来查看该日的新番
(1)填写数据:
1 2 3 4 5 6
| data: { array: [], index: 6, arr_png:[] },
|
(2)初始化页面加载数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| onLoad: function (options) { var that = this wx.request({ url:"https://bangumi.bilibili.com/web_api/timeline_global", data:{x:"result"}, header: { 'content-type': 'application/json' }, success(res){ var arr = new Array(); var arr_gif = new Array(); for(let i = 0;i <= 11;i++){ arr[i] = res.data.result[i].date arr_gif[i] = res.data.result[i].seasons } that.setData({ array:arr, arr_png:arr_gif[6] }) } }) },
|
onLoad: function (options) 函数专门用于数据初始化,加载完页面,即加载完数据
在处理api的数据时不能直接用this,而是用that取代this
观察api返回的数据,用.符号获取对应数据,通过循环遍历将数据存储在数组中
setDate负责更换数据
1 2 3 4
| that.setData({ array:arr, arr_png:arr_gif[6] })
|
(3)选择器触发数据重新加载
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
| bindPickerChange:function(e){ var that = this var value = e.detail.value wx.request({ url:"https://bangumi.bilibili.com/web_api/timeline_global", data:{x:"result"}, header: { 'content-type': 'application/json' }, success(res){ var arr = new Array(); var arr_gif = new Array(); console.log(res.data); for(let i = 0;i <= 11;i++){ arr[i] = res.data.result[i].date arr_gif[i] = res.data.result[i].seasons } that.setData({ array:arr, index:value, arr_png:arr_gif[value] }) } }) },
|
和上面一个函数的获取数据方法一致,用setDate更换数据
1 2 3 4 5
| that.setData({ array:arr, index:value, arr_png:arr_gif[value] })
|
展示页面的实现
1.index.wxml展示页面元素
1 2 3 4 5 6 7 8 9 10
| <view class="anime"wx:for="{{arr_png}}" wx:key="unique"> <view class="png" > <image src="{{item.cover}}"/> </view> <view class="text"> <text> {{item.pub_index}}</text> </view> <view class="a"> <a class="link" src="{{item.url}}">{{item.title}} </a> </view>
|
2.index.wxss调整布局
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
| .png{ display: flex; flex-direction: column; align-items: center; margin-top: 40rpx; }
.png image { width: 200px; height:300px; margin-top: 50rpx; margin-left: 10rpx;
}
.text{ position: relative; top: 10rpx; text-align: center; color: deepskyblue; }
.a{ position: relative; top: 20rpx; text-align: center; }
|
至此一个简单的小程序就完成啦!