由于之前的文章中已经教会了大家如何注册自己的一个微信小程序,并且利用微信开发工具进行小程序的开发,所以这里不再介绍如何下载工具和注册账号,不懂的小伙伴们可以观看我之前发过的教程哦。
#####下面我将手把手地教大家如何开发自己的第一个微信小程序实例–计算器
注意:在代码块中的/xxx或//xxx代表着注释,不是代码的一部分!!
/*直接将"pages":[参数]中的参数删除,我们要创建界面在pages下,名称为a2的界面。@是更改的内容*/
"pages": [
"pages/a2/a2" /@直接在这里创建目录(系统会自动补充四个文件)
],
"window": {
"backgroundTextStyle": "light",/下拉背景字体,loading图的样式,仅支持(light/dark)
"navigationBarBackgroundColor": "#fff",/导航栏背景颜色(#000000)
"navigationBarTitleText": "WeChat",/导航栏标题文字内容
"navigationBarTextStyle": "black"/导航栏标题颜色(仅支持black/white)
},
"sitemapLocation": "sitemap.json"/小程序根目录下的 sitemap.json 文件用于配置小程序及其页面是否允许被微信索引
}
更改前:界面结构如下
更改后:界面结构中多出来了一个a2目录,并且该目录下也同时创建了相应的a2.js、a2.json、a2.wxml、a2.wxss.
//这里使用view视图容器组件(分区分块)来设置四个不同的按钮一行/一列显示
//这里通过button(按钮)来设置一个清除按钮
更改前模拟器的界面如下所示:一片空白更改后点击编译后模拟器的界面内容如下所示:
//在.wxml中
//a2.wxml
//修改代码前
//修改代码后
/在原来的a2.wxss中加入如下代码块
.zero{
width: 376rpx;
}
/a2.wxml添加如下内容
xxx
xxx
xxx
xxx
/a2.wxss中添加如下代码内容
.bottom{
position: fixed; //生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
bottom: 0; //距离底部0px:
}
更改后得模拟器界面如下:这是的a2.wxml中存在的内容截图为:(a2.js、a2.json我们到这步一直不去动它)这是的a2.wxss中存在的内容截图为:
//a2.wxml
//a2.wxss
page{
background: #000 //定义该显示屏的颜色为黑色
}
.white{
background:#EFEFED;
}
.orange{
background: #FC9504;
}
.gry{
background: #CFCFCF;
}
//定义嵌套的两个view,第一个view将整个黑色的背景框固定下来
000 //第二个view用于定位000的显示位置
.screen{ //class="screen" -->.screen{xxx}
position: fixed;
bottom: 750rpx;
word-wrap: break-word; /允许长单词换行到下一行:
width: 745rpx;
}
.screen view{ /嵌套的class可以直接通过.screen view{xxx}来调整嵌套在内部的各个属性
color: #fff; /白色
font-size: 30px; /字体大小
text-align: right; /字体靠右显示
margin-right: 30rpx; /距离右端30rpx
}
/a2.wxml
/更改前
/更改后
/a2.wxss,注意,这里不是.icon{},而是icon{}
icon{
position: absolute; /生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
left: 55rpx;
top:37rpx;
}
button::after{ /将各个圆角按钮变成矩形按钮
border-radius: 0;
}
/a2.wxml
/更改前
/更改后(注:所有的按钮全部加上hover-class="shadow")
/a2.wxss
.shadow{
background: #999;
}
为了让大家更加直观的感受到,按键前后发生的变化,这里采用对比图
点击之前:点击完之后:
/a2.wxml中在整个界面中添加下面的代码块
/a2.wxss 由于我们增加了一行,而整个界面是固定的,所以为了界面的美观我们应该更改按钮的高度
.btn-item{
width: 189rpx;
text-align: center;
line-height: 145rpx; /原来这里是180rpx
border-radius: 0;
}
/a2.js 原来的a2.js中的系统默认给我们的代码全部删除,增加如下代码
Page({
data: { /通过id值的不同来绑定每一个不同的按钮
id1:"clear",
id2:"back",
id3:"history",
id4:"div",
id5:"num_7",
id6:"num_8",
id7:"num_9",
id8:"mul",
id9:"num_4",
id10:"num_5",
id11:"num_6",
id12:"sub",
id13:"num_1",
id14:"num_2",
id15:"num_3",
id16:"add",
id17:"num_0",
id18:"dot",
id19:"equals",
result:"0",
},
})
/a2.wxml
{{result}}
//更改前
{{result}}
//更改后通过a2.js中data的result来绑定这个view的具体值
**********************************************************
//更改前
//更改后(通过使用我们a2.js中定义的键值对的键来标识不同的按钮)
/a2.wxml
/更改前
/更改后
/a2.js
Page({
data: {
id1:"clear",
id2:"back",
id3:"history",
id4:"div",
id5:"num_7",
id6:"num_8",
id7:"num_9",
id8:"mul",
id9:"num_4",
id10:"num_5",
id11:"num_6",
id12:"sub",
id13:"num_1",
id14:"num_2",
id15:"num_3",
id16:"add",
id17:"num_0",
id18:"dot",
id19:"equals",
result:"0",
},
clickButton: function(e){ /实现对bindtap="clickButton"的clickvButton的功能函数
console.log(e); /打印log 具体可见log1图
var btnValue=e.target.id; /由图可知,我们的通过id绑定之后我们能够id来识别该按钮
var res=this.data.result; /通过res来接收并判断data中result的值
if(btnValue>="num_0"&&btnValue<="num_9"){
console.log(btnValue.split('_')); /打印log 具体可见log2图
var num=btnValue.split('_')[1]; /将id中num_1中的1分离出来
if(res=="0"){ /如果res还是等于0,那么说明数字按钮0按下了,那么显示屏上应该显示数字0
res=num;
}else{ /如果res不等于0,那么我们就在该数字后面添加按下的数字
res=res+num;
}
}
this.setData({ /通过setData 将按下的值传给data中的result:xxx,然后通过a2.wxml来显示我们更改的xxx的值
result: res,
});
}
})
因为有的小伙伴可能已经糊涂了,所以我把从开始写计算器开始到现在的代码贴出来,如下所示:
a2.js到现在的全部代码:
Page({
data: {
id1:"clear",
id2:"back",
id3:"history",
id4:"div",
id5:"num_7",
id6:"num_8",
id7:"num_9",
id8:"mul",
id9:"num_4",
id10:"num_5",
id11:"num_6",
id12:"sub",
id13:"num_1",
id14:"num_2",
id15:"num_3",
id16:"add",
id17:"num_0",
id18:"dot",
id19:"equals",
result:"0",
},
clickButton: function(e){
console.log(e);
var btnValue=e.target.id;
var res=this.data.result;
if(btnValue>="num_0"&&btnValue<="num_9"){
console.log(btnValue.split('_'));
var num=btnValue.split('_')[1];
if(res=="0"){
res=num;
}else{
res=res+num;
}
}
this.setData({
result: res,
});
}
})
a2.wxml到现在的全部代码:
{{result}}
a2.wxss到现在的全部代码:
page{
background: #000;
}
.btngroup{
display: flex;
flex-direction: row;
}
.btn-item{
width: 189rpx;
text-align: center;
line-height: 145rpx;
border-radius: 0;
}
.zero{
width: 376rpx;
}
.bottom{
position: fixed;
bottom: 0;
}
.white{
background:#EFEFED;
}
.orange{
background: #FC9504;
}
.gry{
background: #CFCFCF;
}
.screen{
position: fixed;
bottom: 750rpx;
word-wrap: break-word;
width: 745rpx;
}
.screen view{
color: #fff;
font-size: 30px;
text-align: right;
margin-right: 30rpx;
}
icon{
position: absolute;
left: 55rpx;
top:37rpx;
}
button::after{
border-radius: 0;
}
.shadow{
background: #999;
}
log1图:log2图:按下0后的模拟器界面图:连续按下0123456789后的模拟器界面图:
/a2.js 新增加的部分,后面会有注释说明这一步产生的作用
Page({
data: {
id1:"clear",
id2:"back",
id3:"history",
id4:"div",
id5:"num_7",
id6:"num_8",
id7:"num_9",
id8:"mul",
id9:"num_4",
id10:"num_5",
id11:"num_6",
id12:"sub",
id13:"num_1",
id14:"num_2",
id15:"num_3",
id16:"add",
id17:"num_0",
id18:"dot",
id19:"equals",
result:"0",
dotSign:false, /增加一个键值dotSign:false,用来判断如果小数点按下该值变为真,如果下次再按则不会再次出现小数点
},
clickButton: function(e){
console.log(e);
var btnValue=e.target.id; /获取id的值,小数点的btnValue值为dot
var res=this.data.result;
var newDotSign=this.data.dotSign; /通过一个变量newDotSign来接收dotSign的值(true/false)
if(btnValue>="num_0"&&btnValue<="num_9"){
console.log(btnValue.split('_'));
var num=btnValue.split('_')[1];
if(res=="0"){
res=num;
}else{
res=res+num;
}
}else{ /上面用来判断数字的显示,这里使用else来判断小数点的按下后是否显示
if (btnValue=="dot"){ /如果是小数点
if(!newDotSign){ /如果!newDotSign是为false,则代表添加小数点,如果为true,则不显示
res=res+'.'; /在数字的后面添加一个小数点,+代表连接符
newDotSign=true; /将newDotSign置为true,用于下一次判断按下小数点将不会显示
}
}
}
this.setData({
result: res,
dotSign:newDotSign, /通过设置dotSign: true/false更新整个的data的值
});
}
})
/a2.js
clickButton: function(e){
console.log(e);
var btnValue=e.target.id;
var res=this.data.result;
var newDotSign=this.data.dotSign;
if(btnValue>="num_0"&&btnValue<="num_9"){
console.log(btnValue.split('_'));
var num=btnValue.split('_')[1];
if(res=="0"){
res=num;
}else{
res=res+num;
}
}else{
if (btnValue=="dot"){
if(!newDotSign){
res=res+'.';
newDotSign=true;
}
}else if(btnValue=="clear"){ /如果btnValue值等于清除
res="0"; /设置res=0,显示在屏幕上的就是0
newDotSign = false; /重新设置小数点为默认值false 表示可以再次按下显示
}else if(btnValue=="back"){ /如果btnValue值等于回退
var length=res.length; /通过length获取目前屏幕上res的长度,也就是上一次按键结束,这一次按键开始前屏幕上显示的数
if(length>1){ /如果长度>1
res=res.substr(0,length-1); /通过substr截图从0-倒数第二个数,然后更新res的值
}else{ /如果长度=1或者=0那么就会设置res的值为0
res="0";
}
}
}
this.setData({
result: res,
dotSign:newDotSign,
});
}
})
清除前模拟器的显示界面:清除后模拟器的显示界面:回退前模拟器的显示界面:长度>1是按下回退键之后的显示界面:长度=1/0时按下回退键之后的显示界面:
else if(btnValue=="back"){
var length=res.length;
if(length>1){
res=res.substr(0,length-1);
}else{
res="0";
}
}else if(btnValue=="add"||btnValue=="sub"||btnValue=="mul"||btnValue=="div"){ /分别判断是否按下+-*/
newDotSign=false;/小数点置为false表示按下符号之后可以再次输入小数点(12.5+15.5)
var sign;
switch (btnValue){ /分别将add-->"+" sub-->"-"...
case "add":sign = "+"; break;
case "sub":sign = "-"; break;
case "mul":sign = "*"; break;
case "div":sign = "/"; break;
}
if(!isNaN(res.charAt(res.length-1))){ /判断显示屏最后一个是否为符合,如果是不能再次按下符号,必须按下其他的数字后才能再次按下符号
res = res + sign;
}
}
}
this.setData({
result: res,
dotSign:newDotSign,
});
/a2.wxml
/这里的bindtap="clickButton" 改为bindtap="equals"
this.setData({
result: res,
dotSign:newDotSign,
});
}, /注意,这里要加一个逗号来结束上一段功能函数代码的结束
equals:function(){ /等于号的函数功能编写
var str=this.data.result; /先获取显示屏上的数字和符号例如10+2*3-4
var strArr=[]; /定义一个数组用于分别存放数字和符号,存放方式为|10 + 2 * 3 - 4|
var item=''; /定义一个item默认为空
var temp=0;
for(var i=0;i<=str.length;i++){ /循环获取整个显示屏上的内容
var ch=str.charAt(i); /获取显示屏第i位的值为ch
if((ch!=''&&ch>=0&&ch<=9)||ch=="."){ /如果ch!=空并且ch>=0 <=9 or ch==小数点
item=item+ch; /item后连接显示屏第i位的值ch 例如10+2*3-4 第一次循环是" "连接1
}else{ /如果是符号
strArr[temp]=item; /将item的值10存入 strArr[0]中
temp++; /temp=1
strArr[temp]=ch; /再将符号"+"存入strArr[1]中
temp++; /temp=2
item=''; /item清空
}
}
if (isNaN(strArr[strArr.length-1])){ /如果末尾有符号则清除末尾的符号,例如12+45+,则最后的"+"利用pop清除
strArr.pop();
}
for (var i = 0; i
(10+2*3-4)log图如下所示:将整个输入的值分别保存至数组中,从而将数字与符号分隔开
/|10+2*3-4|,首先获取第一个数10(res),然后获取第一个符号,然后获取第二个数2(num),
然后在进行res=res+num;
然后获取第二个符号*,然后获取第三个数3为新的num
然后进行res=res*num;接下来依次如此,知道算出来最后的res的值显示于主屏幕上
if (isNaN(strArr[strArr.length-1])){
strArr.pop();
}
var res=strArr[0]*1; /这是按下等于号之后的将res的值变化为第一个数,例如按下7 接着按下=,则会出现=7
var num;
for(var i=1;i
那么我们整个的计算器的基本功能算是完成了,下面小编将贴出来所有的代码,大家如果跟着我的步伐来,那么对于整个的逻辑和思路会比较清晰。
//a2.js
Page({
data: {
id1:"clear",
id2:"back",
id3:"history",
id4:"div",
id5:"num_7",
id6:"num_8",
id7:"num_9",
id8:"mul",
id9:"num_4",
id10:"num_5",
id11:"num_6",
id12:"sub",
id13:"num_1",
id14:"num_2",
id15:"num_3",
id16:"add",
id17:"num_0",
id18:"dot",
id19:"equals",
result:"0",
dotSign:false,
},
clickButton: function(e){
console.log(e);
var btnValue=e.target.id;
var res=this.data.result;
var newDotSign=this.data.dotSign;
if(btnValue>="num_0"&&btnValue<="num_9"){
console.log(btnValue.split('_'));
var num=btnValue.split('_')[1];
if (res == "0" || res.charAt(res.length - 1) == '∞'){
res=num;
}else{
res=res+num;
}
}else{
if (btnValue=="dot"){
if(!newDotSign){
res=res+'.';
newDotSign=true;
}
}else if(btnValue=="clear"){
res="0";
newDotSign = false;
}else if(btnValue=="back"){
var length=res.length;
if(length>1){
res=res.substr(0,length-1);
}else{
res="0";
}
}else if(btnValue=="add"||btnValue=="sub"||btnValue=="mul"||btnValue=="div"){
newDotSign=false;
var sign;
switch (btnValue){
case "add":sign = "+"; break;
case "sub":sign = "-"; break;
case "mul":sign = "*"; break;
case "div":sign = "/"; break;
}
if(!isNaN(res.charAt(res.length-1))){
res = res + sign;
}
}
}
this.setData({
result: res,
dotSign:newDotSign,
});
},
equals:function(){
var str=this.data.result;
var strArr=[];
var item='';
var temp=0;
for(var i=0;i<=str.length;i++){
var ch=str.charAt(i);
if((ch!=''&&ch>=0&&ch<=9)||ch=="."){
item=item+ch;
}else{
strArr[temp]=item;
temp++;
strArr[temp]=ch;
temp++;
item='';
}
}
if (isNaN(strArr[strArr.length-1])){
strArr.pop();
}
var res = parseInt(strArr[0]);
var num;
for(var i=1;i
//a2.wxml
{{result}}
//a2.wxss
page{
background: #000;
}
.btngroup{
display: flex;
flex-direction: row;
}
.btn-item{
width: 189rpx;
text-align: center;
line-height: 145rpx;
border-radius: 0;
}
.zero{
width: 376rpx;
}
.bottom{
position: fixed;
bottom: 0;
}
.white{
background:#EFEFED;
}
.orange{
background: #FC9504;
}
.gry{
background: #CFCFCF;
}
.screen{
position: fixed;
bottom: 750rpx;
word-wrap: break-word;
width: 745rpx;
}
.screen view{
color: #fff;
font-size: 30px;
text-align: right;
margin-right: 30rpx;
}
icon{
position: absolute;
left: 55rpx;
top:37rpx;
}
button::after{
border-radius: 0;
}
.shadow{
background: #999;
}
//a2.json
{
"usingComponents": {}
}