微信小程序入门学习-- 简易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是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
随机推荐
- 《C++编程思想》(第二版)第3章 C++中的C(笔记、习题及答案)(二)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- Python读取键盘输入
Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.例如以下: raw_input input raw_input函数 raw_input() 函数从标准输入读取一个行.并返回 ...
- CORS解决WebApi跨域问题(转)
CORS全称Cross-Origin Resource Sharing,中文全称跨域资源共享.它解决跨域问题的原理是通过向http的请求报文和响应报文里面加入相应的标识告诉浏览器它能访问哪些域名的请求 ...
- 将ViewState放在Session里(转载)
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Ent ...
- MSBuild入门(续)
MSBuild基本概念(续) 在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见一些用法和概念做些补充.主要有一下几方面 ...
- sql中的SET NOCOUNT ON/OFF
当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数). 当 SET NOCOUNT 为 OFF 时,返回计数(默认为OFF). 即使当 SET NOC ...
- Android Studio公布到Jcenter
1.前言 拥抱开源.热爱开源,将我们觉得不错的代码开源到gihtub.将我们的库公布到jcenter\mevan等. 2.准备工作 2.1 准备 申请仓库账号 注意model为android libr ...
- 将json数组字符串转换为json数组对象(值是json对象的数组)
var str1 ='[{"name":"kevin","age":18},{"name":"rose&quo ...
- __attribute__机制介绍(转)
转自 http://blog.csdn.net/ithomer/article/details/6566739 1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__att ...
- css 的通用样式 设置 和倒计时功能 移动轮播图的手势滑动的功能
body{ line-height:1.4; color:#333; font-family:arial; font-size: 12px; background:white; } input,tex ...