记录我的第一个简单微信小程序——分辨颜色(测眼力)

1、 下载微信开发工具,

2、 登录微信公众平台,注册账号

https://mp.weixin.qq.com/

 

打开微信小程序,将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("http://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz/noz2jw2hPlVjicCpoqe2UMMQibEuRz4LfRthbHovkKA7ib3w8Io3TNp70xhbqibV4p89Sgofr2LaTeQ80RX8a7je6g/0?wx_fmt=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();
    }
  }
  }
})
以上基本上就是全部代码,相关解释基本上都在注释里。











猜你喜欢

转载自blog.csdn.net/chuyuyin/article/details/80793749