微信小程序入门学习-- 简易Demo:计算器
简单学习下微信小程序
官网 简易教程 · 小程序
https://mp.weixin.qq.com/debug/wxadoc/dev/
需要通过开发者工具,来完成小程序创建和代码编辑。
下载安装,运行程序,点击添加项目,弹窗,可以选无AppId,选择程序路径,勾选quick start。
app.json 配置文件
wxxml --相当于html
wxss--相当于css
在pages文件夹新建文件夹

修改配置app.json 这样系统启动时会运行call文件项目
"pages":[
"pages/call/call",
"pages/logs/logs"
]
call.wxxml
<view class="content">
<view class="screen">{{screenData}}</view> <view class="btnGroup">
<view class="item orange" bindtap="clickButton" id="{{id1}}">back</view>
<view class="item orange" bindtap="clickButton" id="{{id2}}">clear</view>
<view class="item orange" bindtap="clickButton" id="{{id3}}">+/-</view>
<view class="item orange" bindtap="clickButton" id="{{id4}}">+</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id5}}">9</view>
<view class="item blue" bindtap="clickButton" id="{{id6}}">8</view>
<view class="item blue" bindtap="clickButton" id="{{id7}}">7</view>
<view class="item orange" bindtap="clickButton" id="{{id8}}">-</view>
</view> <view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id9}}">6</view>
<view class="item blue" bindtap="clickButton" id="{{id10}}">5</view>
<view class="item blue" bindtap="clickButton" id="{{id11}}">4</view>
<view class="item orange" bindtap="clickButton" id="{{id12}}">*</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id13}}">3</view>
<view class="item blue" bindtap="clickButton" id="{{id14}}">2</view>
<view class="item blue" bindtap="clickButton" id="{{id15}}">1</view>
<view class="item orange" bindtap="clickButton" id="{{id16}}">/</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id17}}">0</view>
<view class="item blue" bindtap="clickButton" id="{{id18}}">.</view>
<view class="item blue" bindtap="history" id="{{id19}}">history</view>
<view class="item orange" bindtap="clickButton" id="{{id20}}">=</view>
</view> </view>
{{screenData}} : {{}}绑定数据,这里表示绑定data中的 screenData。
bindtap="clickButton" :绑定点击事件
call.js
Page({
/**
* 页面的初始数据
*/
data: {
id1: "back",
id2: "clear",
id3: "positive",
id4: "+",
id5: "9",
id6: "8",
id7: "7",
id8: "-",
id9: "6",
id10: "5",
id11: "4",
id12: "*",
id13: "3",
id14: "2",
id15: "1",
id16: "/",
id17: "0",
id18: ".",
id19: "history",
id20: "=",
screenData : "0",
lastIsOperator : false,
arr : [],
logs : []
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
},
history: function (event){
wx.navigateTo({
url: '../list/list'
})
},
clickButton:function(event){
console.log(event.target.id);
var id = event.target.id;
if (id == this.data.id1){ //BACK
var data = this.data.screenData;
if(data == 0){
return;
}
data = data.substring(0, data.length-1);
if(data == "" || data == "."){
data = 0;
}
this.setData({ screenData: data });
this.data.arr.pop(); //退格 -1
}
else if (id == this.data.id2){ //clear
this.setData({ screenData: "0" });
this.data.arr.length = 0; //数组清空
} else if (id == this.data.id3) { // positive negative
var data = this.data.screenData;
if(data == 0){
return;
}
var firstChar = data.substring(0,1);
if (firstChar == "-"){
data = data.substring(1);
this.data.arr.shift();//去除第一个元素
}else{
data = "-" + data;
this.data.arr.unshift("-"); //第一个元素增加"-"
}
this.setData({ screenData: data });
} else if (id == this.data.id20) { // =
var data = this.data.screenData;
if (data == 0){
return;
}
var lastChar = data.substring(data.length - 1, data.length);
if(isNaN(lastChar)){
return;
}
var num = "";
var lastOperator;
var arr = this.data.arr;
var optarr =[];
for (i in arr){
if (isNaN(arr[i]) == false || arr[i] == this.data.id18 || arr[i] == this.data.id3 ){
num += arr[i];
}else{
lastOperator = arr[i];
optarr.push(num);
optarr.push(arr[i]);
num = "";
}
}
optarr.push(Number(num));
var result = Number(optarr[0])*1.0;
console.log(optarr);
console.log(result);
for(var i=1, len = optarr.length; i<len; i++){
if(isNaN(optarr[i])){
if (optarr[i] == this.data.id4){
result += Number(optarr[i+1]);
} else if (optarr[i] == this.data.id8) {
result -= Number(optarr[i + 1]);
} else if (optarr[i] == this.data.id12) {
result *= Number(optarr[i + 1]);
} else if (optarr[i] == this.data.id16) {
result /= Number(optarr[i + 1]);
}
}
}
this.data.logs.push(data + "=" + result); //存入history
wx.setStorageSync("calllogs", this.data.logs);
console.log("calllogs:" + wx.getStorageSync("calllogs"));
this.data.arr.length = 0; //数组清空
this.data.arr.push(result);
this.setData({screenData : result + ""});
}else{ //click number or +-*/
if (id == this.data.id4 || id == this.data.id8 || id == this.data.id12 || id == this.data.id16) {
if (this.data.lastIsOperator == true || this.data.screenData == 0) {
return;
}
}
var sdata = this.data.screenData == 0 ? "" : this.data.screenData;
var data = sdata + event.target.id ;
this.setData({ screenData: data });
this.data.arr.push(id); //event传入 每次点击的放入数组
if (id == this.data.id4 || id == this.data.id8 || id == this.data.id14 || id == this.data.id16){
this.setData({ lastIsOperator: true });
}else{
this.setData({ lastIsOperator: false });
}
}
}
})
call.js
data:数据
clickButton:自定义事件/方法
--event.target.id:页面目标元素的id。可以在点击事件clickButton 打断点看下event对象

--this.data.id1 :“back”(this当前pages对象 ),即代表下面内容
Page({
/**
* 页面的初始数据
*/
data: {
id1: "back"
...
}
this.setData({ screenData: "0" }); //设置数据 具体查看api
/* pages/call/call.wxss */
.content{
height: 100%;
display: flex;
display: -webkit-flex;
flex-direction: column;
align-items: center;
box-sizing: border-box;
padding-top: 30rpx;
}
.screen{
width: 720rpx;
height: 100rpx;
line-height: 100rpx;
padding-right: 10rpx;
margin-bottom: 30rpx;
border-radius: 5px;
border:1px solid #f8f8f8;
}
.btnCroup{
display: -webkit-flex;
display: flex;
flex-direction: row;
}
.item{
width:150rpx;
min-height:100rpx;
margin:5rpx;
border-radius:5px;
text-align:center;
line-height:150rpx;
float :left;
}
.orange{
background-color: #af4f00;
}
.blue{
background-color: #0a4ff0;
}
call.wxss
其他:跳转到历史记录
增加list

,并修改app.json文件
"pages":[
"pages/call/call",
"pages/list/list"
]
在call.js中 wx.navigateTo() //API
history: function (event){
wx.navigateTo({
url: '../list/list'
})
},
利用 wx.setStorageSync("calllogs", this.data.logs); //类似sessionStorage页面间传送数据
在list.js 关键代码
data: {
logs:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var logs = wx.getStorageSync("calllogs");
this.setData({ "logs": logs});
},
list.wxml
<view class="content">
<block wx:for="{{logs}}" wx:for-item="log">
<view class="item">{{log}} </view>
</block>
</view>
此demo参考视频做的:
http://www.iqiyi.com/w_19rsuqbvyh.html
微信小程序入门学习-- 简易Demo:计算器的更多相关文章
- 微信小程序入门学习
前(che)言(dan): 近几天,微信小程序的内测引起了众多开发人员的热议,很多人都认为这将会成为一大热门,那么好吧,虽然我是一个小白,但这是个新玩意,花点时间稍稍钻研一下也是无妨的,谁让我没有女朋 ...
- 微信小程序入门学习之事件 事件对象 冒泡非冒泡事件(1)
这关于事件的学习,可以自己复制到微信开发者工具上自己运行试试. 首先这里有两个文件.js 和.wxml 文件 首先给出.js文件下代码 // pages/news/news.js Page({ /** ...
- 微信小程序入门一: 简易form、本地存储
实例内容 登陆界面 处理登陆表单数据 处理登陆表单数据(异步) 清除本地数据 实例一: 登陆界面 在app.json中添加登陆页面pages/login/login,并设置为入口. 保存后,自动生成相 ...
- 微信小程序开发学习资料
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 天河微信小程序入门《三》:打通任督二脉,前后台互通
原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- 微信小程序入门篇
微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教 ...
- 微信小程序入门-刘志敏-专题视频课程
微信小程序入门-269人已学习 课程介绍 微信小程序入门基础,给入门级程序员好的教程.教程中对小程序的介绍到小程序的基本使用都做了详细的介绍,教程以实用的实现作为案例,如列表下拉刷新.抽 ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
随机推荐
- 修改select下拉框的下拉按钮
ie上的下拉框下拉按钮真是太丑了,如何把他自定义一下呢? 首先,把浏览器自带的下拉框去掉: select::-ms-expand { display: none; } 接下来,用自己喜欢的下拉图片去 ...
- win10改win7如何设置bios教程
情况一: 我们按del键(百度自己电脑.主板如何进入bios)进入主板bios后,我们通过键盘将选项移动到 Authentication 菜单(bios界面各不相同,可能不在此项,找到对应 secur ...
- java基础讲解04-----数据类型和运算符
1.java的基本数据类型 1.数值型 { 整数型 byte , short ,int ,long 浮点型 float , double } 2.字符型 3.布尔型 2.运算符 1.赋 ...
- postman--- form-data、x-www-form-urlencoded、raw、binary分别如何设置
转自:http://blog.csdn.net/wangjun5159/article/details/47781443 1.form-data: 就是http请求中的multipart/form- ...
- .NET面试题(一)
1.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? foreach (System.Windows.Forms.Control control in this.Contr ...
- VS2015 经常不出现智能提示,代码颜色也没有了
重置下.开始菜单 -->所有程序-->Visual Studio 文件夹 --> Visual Studio Tools --> Developer Command Promp ...
- swiper动态加载数据滑动失效,ajax执行后swiper.js的效果消失问题
使用swiper.js做一些动效时,如果进行了ajax,并且重新把DOM写入到HTML代码中,会导致swiper.js的特效消失的问题.原因是ajax加载后,原先new 的Swiper对象,不认识新来 ...
- Android Service演义
摘要: 本文基于Android 5.1代码,介绍了Android Service的运作机理.按理说,网上此类文章已经很多了,本不需我再赘述.但每个人理解技术的方式多少会有所不同,我多写一篇自己理解的s ...
- makefile之调试信息
makefile 调试 1. 添加调试信息 执行到error时会中断,warning不中断makefile的执行, info不打印当前makefile名和行号. a.$(warning "s ...
- shader 编程入门(一)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...