1、 下载微信开发工具,
2、 登录微信公众平台,注册账号
打开微信小程序,将AppId复制过去,自己取一个项目名称。
小程序项目的结构:
小程序项目的配置文件:(不需要自己创建)
1、Project.config,json
2、入口文件(重要):app.json
3、应用程序的启动文件;app.js 作用是 监听小程序的生命周期
4、通用样式配置文件:用于配置 通用的样式; app.wxss.
这四个文件的格式就是小程序的四种文件格式。
WXSS.:用于设置小程序页面的通用格式 和CSS功能相同。
格式:
XXX(选择器){指定具体的模样}
小程序的所有资源文件不得超过20M,
WXML:文件等同于html文件,用于组织页面骨架的文件。
小程序页面跳转,
在WXML中添加绑定事件-》bindtap="函数名"
2、在js中实现绑定的函数。
小程序事件绑定:
每一个函数相当于一个json对象,及键值对
页面跳转:
Wx,navagiteTo({
url:"路由地址"
})
跳转页面:wx.navigateTo();
正题来了:
贴几张效果图:
第一步:
创建app的三个不同文件,
首先,app.json
{
"pages": [
"pages/home/home",
"pages/one/one"
],
"window": {
"navigationBarBackgroundColor": "#BC8F8F",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "火眼金睛识颜色",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light",
"enablePullDownRefresh": false
}
}代码解析:json格式的文件是不能有注释的,否则肯定会报错。
1、 Pages=>数组 【】 路由:
设置小程序有多少个页面,并设置启动首页。利用数组设置页码顺序。
数组中的元素使用“” 或者‘’ 即把首页放在第一个位置,第二页放在第二个位置。编译一下,自动创建相关文件。
2、 Window窗口:
1、 导航条的样式
2、 标题文字
3、 文字样式
4、 是否使用下拉刷新
2、app.wxss 文件(设置整个文件的背景)
page {
/* 设置页面的宽和高*/
width: 100%;
height: 100%;
/* 背景颜色*/
/* background-color: #BC8F8F;
center 以中心等比缩放
no-repeat 让背景不重复*/
background: url("https://img-blog.csdnimg.cn/img_convert/fa923e54646d4823d21c636378d020ba.gif")
no-repeat
center;
/*设置背景的缩放方式 */
background-size: cover;
}其中background url: 在网页上右键复制你想加的图片地址就好。 3、app.js文件
输入App,根据提示加载进几个原始的函数就好。
home文件相关代码:
1、home.wxml文件。(首页界面)
<view>
<!--1、给按钮添加一个点击事件,触发entryGame函数 -->
<button bindtap='entryGame'>进入眼力测试</button>
</view>很简单,创建一个进入游戏的按钮。 2、home.wxss文件
/* pages/home/home.wxss */
/*找到按钮外的容器 */
view{
/*设置view的高度和page的高度相同 */
height: inherit;
/*通过设置容器设置按钮 */
/*弹性盒 */
display: flex;
/*设置view元素 垂直居中 */
align-items: center;
}
button{
/*颜色表示方式:
字符串、十六进制、rgba(有透明度) */
background: rgba(100, 149, 237, 0.4)
}3、home.js文件
其中两个函数,其他不变。
Page({
/**
* 页面的初始数据
*/
data: {
},
// 实现点击事件触发的函数
entryGame:function(){
// 跳转页面:wx.navigateTo();
wx.navigateTo({
url: '/pages/one/one',
})
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
return{
title:" come on baby !",
path:"/pages/home/home",
imageUrl:"../../res/image.jpg"
}
}
})游戏界面的相关文件代码:
1、one.xml文件
<!--游戏页面分为两大部分
1】 工具栏部分
2】游戏主界面
-->
<!--class:类选择器 :可以通过class指定的字符串来找到这个元素 -->
<!--在wxss中可以通过 .class指定的字符串找到这个元素 -->
<!--整个主界面的容器 -->
<view class='container'>
<!--工具的容器 -->
<view class='tool_container'>
<view class='stepView'>
<button class='step'>剩余{{time}}秒</button>
<button class='step'>{{step}}步</button>
</view>
</view>
<!--游戏的 容器 -->
<view class='game_container'>
<!--循环渲染 wx:for "{{数组}}" -->
<!--WXML中绑定js中的数据通过双花括号绑定的 -->
<view class='item' wx:for="{{views}}"
style='width:{{colorWidth}}px;height:{{colorWidth}}px;margin:{{space}}px 0 0 {{space}}px; background:{{item.color}}; opacity:{{item.opacity}};border-radius:{{space}}px'
bindtap='chooseView' data-opacity='{{item.opacity}}'>
<!--末尾不能加分号 -->
</view>
</view>
<!--row:2 每点击对了一次色块,行数增加1 -->
<!--计算每一个色块的间距 和本身的宽度 -->
<!--屏幕宽度750px 平均宽度 除以2
间距宽度:得到平均宽度后*0.1
色块长度 :平均宽度 (总共宽度-间距宽度)/row -->
<!--颜色特殊色块的区分 -->
<view class='share_container'>
<button open-type='share'>分享有惊喜</button>
</view>
</view>2、one.wxss文件/* pages/one/one.wxss */
/* 让所有元素在同一行显示,如果宽度不够就在下一行显示 */
.item{
float: left;
}
.game_container {
/*在所有微信小程序中 认为所有设备的宽度 都是750 rpx
rpx 是一个响应式单位 */
width: 750rpx;
height: 750rpx;
position: absolute;
top: 50%;
margin-top: -375rpx;
/* background: rgba(red, green, blue, alpha) */
}
.tool_container.stepView.step{
display: flex;
/*平均分布 */
justify-content: space-around;
/*给每一个元素增加一个上下间距 */
padding: 20rpx 0;
background: red
}
.share_container{
width: 100%;
position: fixed;
left: 0;
bottom: 0;
}
/*后代选择器 */
.share_container button {
background: rgba(219, 112, 147, 0.9);
color:brown;
}one.js文件
// pages/one/one.js
Page({
/**
* 页面的初始数据
*/
// wxml和js 两个文件内容的 互相绑定
// 在微信小程序中可以实现数据的双向绑定(两端的数据有一方改变,另一方也会改变,及同时更新)
// 只要需要绑定的数据都需要 写在data里
data: {
time:30,//倒计时
views:[],//色块的信息
row:2,//默认游戏的行数 在wxml中 根据 row 创建色块的个数
space:0,//每一个色块的间距
colorWidth:0,//色块的宽度
color:"rgb(178,58,238)",
step:0,
},
/**
* 生命周期函数--监听页面加载
*/
//onLoad函数 只在页面启动的时候调用一次
//可以在函数中 去声明 只在 js中 使用 的属性
onLoad: function (options) {
//初始化屏幕高度
//this表示window
this.width = 750;
this.titles = ["戴好眼镜重来一次吧","正常正常,不错不错","眼神挺好使啊!","火眼金睛!"]
wx.getSystemInfo({
success: function(res) {
console.log(res);
this.width = res.screenWidth;
}.bind(this)
})
this.loadGame();
this.reStartTimer();
},
//加载游戏函数
loadGame:function(){
//计算色块的宽度
var tempWidth = this.width/this.data.row;
//给初始化在data中的属性賦值
this.setData({
space: tempWidth * 0.1
});
//计算色块宽度
this.setData({
colorWidth:(this.width - this.data.space*(this.data.row + 1))/this.data.row
});
var tempList = [];//色块的临时数组,提高代码效率
// 根据行数生成指定的色块数量
var color = this.randColor();
var index = parseInt(Math.random()*this.data.row*this.data.row);
for (let i = 0; i < this.data.row * this.data.row;i++){
let info = {};
info.color = color;//随机颜色
//0.9 调节透明度,数字越小透明度越低,游戏越简单。
info.opacity = i == index?0.8:1;//透明度,随机抽取
tempList.push(info);//push在数组中最后一个位置添加元素
}
//更新色块的数组
this.setData({
views:tempList
});
},
//封装一个随机颜色的函数:
randColor:function(){
// rgb 形式,随机抽选0-255 之间的一个数字,因此为一个随机颜色
var colorString = "";
var r = parseInt(Math.random()*256);
var g = parseInt(Math.random() * 256);
var b = parseInt(Math.random() * 256);
colorString = "rgba("+r+","+g+","+b+",1)";
return colorString;
},
//点击色块触发的事件
chooseView:function(event){
var opacity = event.currentTarget.dataset.opacity;
opacity == 1 ?this.fail():this.sucess();//更具色块的不透明度区分点击的是否正确
this.loadGame();
},
//失败
fail:function(){
clearInterval(this.timer);
var result = "";
if(this.data.step<=5){
result = this.titles[0];
}else if(this.data.step > 5&& this.data.step<= 15){
result = this.titles[1];
} else if (this.data.step > 15 && this.data.step <= 30) {
result = this.titles[2];
} else if (this.data.step > 30) {
result = this.titles[2];
}
wx.showModal({
title: '结束啦!',
content: result,
showCancel:false,
confirmText:'承认吧',
success:(res)=>{
this.setData({
row:2,
step:0,
time:30
});
wx.navigateBack();
}
})
},
//成功
sucess:function(){
this.setData({
time:++this.data.time,//点对一次增加一秒钟
step:++this.data.step
});
if(this.data.step%3===0){
var temp = this.data.time += 1;
this.setData({
row: ++this.data.row,
time: temp//点对三次 增加2秒钟
});
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
reStartTimer:function(){
this.timer = setInterval(() => {//es6的箭头函数
this.setData({
time: --this.data.time
});
if (this.data.time == 0) {
this.fail();
}
}, 1000);
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
clearInterval(this.timer);//清楚定时器
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
//暂定定时器
clearInterval(this.timer);
return{
title:"是谁的小眼睛还没有看这里,快来测测你辨色力吧!",
path:"/pages/one/one",
imageUrl: "../../res/image.jpg",
success:()=>{
var temp = this.data.time + 5;
this.setData({
time:temp
});
//重启定时器
this.reStartTimer();
},
//不用添加绑定
fail:()=>{
this.reStartTimer();
}
}
}
})以上基本上就是全部代码,相关解释基本上都在注释里。版权声明:本文为chuyuyin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。