第一章作业(微信小程序--计算机简单分析)

这篇具有很好参考价值的文章主要介绍了第一章作业(微信小程序--计算机简单分析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分析:

app.js

它定义了一个全局的App对象,用于控制整个小程序的生命周期和全局数据。下面逐部分分析:

  1. onLaunch: function () { ... }

    • 当小程序启动时(即打开时),会触发onLaunch生命周期函数。
    • 在这个函数里,首先通过wx.getStorageSync('logs')从本地缓存中获取名为logs的数据,如果获取不到,则默认返回一个空数组。
    • 然后在数组头部添加当前时间戳(Date.now())以记录本次启动的时间。
    • 最后,使用wx.setStorageSync('logs', logs)将更新后的logs数据保存回本地缓存。
  2. getUserInfo:function(cb){...}

    • 这是一个获取用户信息的方法,接收一个回调函数cb作为参数,当获取到用户信息时调用该回调函数。
    • 首先检查globalData.userInfo是否存在,如果已存在(即用户已经授权并获取过个人信息),则直接调用回调函数并将用户信息传入。
    • 如果globalData.userInfo不存在,执行以下步骤:
      • 调用wx.login接口进行登录操作,获取登录凭证(code)。
      • 登录成功后,进一步调用wx.getUserInfo接口获取用户信息,包括昵称、头像等。
      • 获取到用户信息后,将其保存至globalData.userInfo中,并再次调用回调函数,传入用户信息。
  3. globalData:{ userInfo:null }

    • globalData是小程序应用级别的全局数据,所有页面都可以访问。
    • 在这里定义了一个全局变量userInfo,初始值为null,用于存储用户信息。

总结:这段代码主要实现了两个功能,一是记录小程序每次启动的时间并保存到本地缓存;二是提供了获取用户信息的方法,并确保在获取到用户信息后能够异步回调给调用方。

 app.json

这段JSON配置代码是微信小程序的app.json文件,它用于定义小程序的基本结构和全局样式。

  1. "pages": [...]

    • 这部分列出了小程序的所有页面路径。按照数组的顺序依次加载页面,这些页面构成了小程序的主要功能模块。
    • 具体解析如下:
      • "pages/index/index":首页或主界面
      • "pages/calc/calc":计算器页面
      • "pages/history/history":历史记录页面
      • "pages/logs/logs":日志记录页面
  2. "window": {...}

    • 定义了小程序窗口(即整个应用)的一些全局样式属性。
    • backgroundTextStyle: 设定下拉背景字体、loading图标的样式,此处设置为"light",即浅色样式。
    • navigationBarBackgroundColor: 设置导航栏(顶部状态栏)的背景颜色,此处设置为"#da7c0c",一种深橙色。
    • navigationBarTitleText: 设置导航栏标题文字内容,此处设为"简易计算器"。
    • navigationBarTextStyle: 设置导航栏标题文字的颜色,此处设置为"white",即白色。

总结:该段配置代码主要用来组织小程序页面结构,并对小程序全局窗口样式进行个性化定制,包括导航栏的背景颜色、标题以及字体颜色等。

 app.wass

这段代码是微信小程序中的样式表文件`app.wxss`,它定义了一个名为`.container`的CSS类选择器及其样式规则。具体分析如下:

1. `.container`:
   - 这是一个类选择器,用于在HTML或WXML中为具有`class="container"`属性的元素应用样式。

2. `height: 100%;`:
   - 设置`.container`元素的高度为父容器的100%,即填满整个垂直空间。

3. `display: flex;`:
   - 将`.container`元素设置为弹性布局(Flexbox),这是一种强大的布局模式,可以轻松地实现复杂、响应式的布局。

4. `flex-direction: column;`:
   - 在弹性容器内定义主轴的方向为垂直方向,子元素将按从上到下的顺序排列。

5. `align-items: center;`:
   - 对齐弹性项目(即子元素)沿交叉轴居中对齐。由于`flex-direction`为`column`,所以这里是垂直居中对齐。

6. `justify-content: space-between;`:
   - 在主轴方向(这里指垂直方向)上分配弹性项目的间距,第一个和最后一个子元素分别紧贴容器的顶部和底部,其余子元素之间的间距相等。

7. `padding: 200rpx 0;`:
   - 设置`.container`元素的内容区(即边框与内容之间的区域)上下内边距为200rpx,左右内边距为0。rpx是微信小程序的单位,可以根据屏幕宽度自适应调整尺寸。

8. `box-sizing: border-box;`:
   - 设置盒模型为`border-box`,这意味着元素的总宽度和总高度包含了内填充(padding)、边框(border)以及内容区域的大小,而不是仅包含内容区域的大小。这对于计算布局尺寸时很有帮助,特别是在使用百分比宽度或高度时。

calc.js

这段代码是基于微信小程序开发的计算器页面逻辑。它主要通过`Page`构造函数创建一个页面,并在页面中定义了一系列事件处理函数和数据属性,以实现计算器的基本功能。

1. 数据属性(data):

   - `idb`, `idc`, `idt`, ... 等变量存储了计算器界面上各个按钮的ID。
   - `screenData` 用于显示当前计算结果或输入的数字。
   - `operaSymbo` 对象存储了运算符及其对应的显示符号。
   - `lastIsOperaSymbo` 用于标记上一次输入是否为运算符。
   - `iconType`, `iconColor` 可能用于控制界面中的图标样式。
   - `arr` 数组用于存储用户输入的运算表达式分段内容。
   - `logs` 数组用于存储历史计算记录。

2. 生命周期函数:

   - `onLoad`, `onReady`, `onShow`, `onHide`, `onUnload` 分别对应页面的加载、渲染完成、显示、隐藏、关闭等生命周期阶段。

3. 自定义事件处理器(clickBtn):

   处理用户点击计算器按钮的事件,根据点击的按钮ID执行相应的操作,如退格、清屏、改变正负号、等于号进行计算等。

4. history 方法:

   当用户触发查看历史记录时,调用`wx.navigateTo`方法跳转到历史记录页面。

5. 在`clickBtn`方法中,核心逻辑是对用户输入的操作数和运算符进行处理,并通过栈(这里用数组`arr`模拟栈)来解析表达式,最终计算结果并显示在屏幕上。同时,每次计算后将完整的表达式与结果存储到`logs`数组中以便查看历史记录。

代码 :

//app.js
App({
  onLaunch: function () {
    //调用API从本地缓存中获取数据
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
  },
  getUserInfo:function(cb){
    var that = this;
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //调用登录接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo;
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      });
    }
  },
  globalData:{
    userInfo:null
  }
})
//calc.js
Page({
  data:{
    idb:"back",
    idc:"clear",
    idt:"toggle",
    idadd:"+",
    id9:"9",
    id8:"8",
    id7:"7",
    idj:"-",
    id6:"6",
    id5:"5",
    id4:"4",
    idx:"×",
    id3:"3",
    id2:"2",
    id1:"1",
    iddiv:"÷",
    id0:"0",
    idd:".",
    ide:"=",
    screenData:"0",
    operaSymbo:{"+":"+","-":"-","×":"*","÷":"/",".":"."},
    lastIsOperaSymbo:false,
    iconType:'waiting_circle',
    iconColor:'white',
    arr:[],
    logs:[]
  },
  onLoad:function(options){
    // 页面初始化 options为页面跳转所带来的参数
  },
  onReady:function(){
    // 页面渲染完成
  },
  onShow:function(){
    // 页面显示
  },
  onHide:function(){
    // 页面隐藏
  },
  onUnload:function(){
    // 页面关闭
  },
  clickBtn:function(event){
    var id = event.target.id;
    if(id == this.data.idb){  //退格←
      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();
    }else if(id == this.data.idc){  //清屏C
      this.setData({"screenData":"0"});
      this.data.arr.length = 0;
    }else if(id == this.data.idt){  //正负号+/-
      var data = this.data.screenData;
      if(data == "0"){
          return;
      }
      var firstWord = data.charAt(0);
      if(data == "-"){
        data = data.substr(1);
        this.data.arr.shift();
      }else{
        data = "-" + data;
        this.data.arr.unshift("-");
      }
      this.setData({"screenData":data});
    }else if(id == this.data.ide){  //等于=
      var data = this.data.screenData;
      if(data == "0"){
          return;
      }
      //eval是js中window的一个方法,而微信页面的脚本逻辑在是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能再脚本中使用window,也无法在脚本中操作组件                 
      //var result = eval(newData);           
      
      var lastWord = data.charAt(data.length);
      if(isNaN(lastWord)){
        return;
      }

      var num = "";

      var lastOperator = "";
      var arr = this.data.arr;
      var optarr = [];
      for(var i in arr){
        if(isNaN(arr[i]) == false || arr[i] == this.data.idd || arr[i] == this.data.idt){
          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(result);
      for(var i=1; i<optarr.length; i++){
        if(isNaN(optarr[i])){
            if(optarr[1] == this.data.idadd){
                result += Number(optarr[i + 1]);
            }else if(optarr[1] == this.data.idj){
                result -= Number(optarr[i + 1]);
            }else if(optarr[1] == this.data.idx){
                result *= Number(optarr[i + 1]);
            }else if(optarr[1] == this.data.iddiv){
                result /= Number(optarr[i + 1]);
            }
        }
      }
      //存储历史记录
      this.data.logs.push(data + result);
      wx.setStorageSync("calclogs",this.data.logs);

      this.data.arr.length = 0;
      this.data.arr.push(result);

      this.setData({"screenData":result+""});
    }else{
      if(this.data.operaSymbo[id]){ //如果是符号+-*/
        if(this.data.lastIsOperaSymbo || this.data.screenData == "0"){
          return;
        }
      }

      var sd = this.data.screenData;
      var data;
      if(sd == 0){
        data = id;
      }else{
        data = sd + id;
      }
      this.setData({"screenData":data});
      this.data.arr.push(id);

      if(this.data.operaSymbo[id]){
        this.setData({"lastIsOperaSymbo":true});
      }else{
        this.setData({"lastIsOperaSymbo":false});
      }
    }
  },
  history:function(){
    wx.navigateTo({
      url:'../history/history'
    })
  }
})

如需详细代码点这个传送门dunizb/wxapp-sCalc: :speech_balloon:微信小程序版简易计算器demo,适合入门练手 (github.com)

运行效果: 

第一章作业(微信小程序--计算机简单分析),微信小程序,前端文章来源地址https://www.toymoban.com/news/detail-837551.html

到了这里,关于第一章作业(微信小程序--计算机简单分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络基础第一章

    1.1 计算机网络的概念 三网:有线电视网络、电信网络、计算机网络。 三网融合:通过计算机网络可以将有线电视、电信网络通过0/1编码等方式展现进行融合,从而实现计算机网络实现视频、电话等其他网络功能。 四网:电网+三网。 四网融合:计算机网络控制实现有限电视

    2024年02月13日
    浏览(47)
  • 第一章、计算机组成与体系结构

    第一节.数据的表示   二进制转十进制:权值相加。即一个二进制数为1010.1,转为十进制为: $$ 小数点左边从0开始幂,小数点右边就是-1   十六进制转十进制:同样的,权值相加。即一个十六进制为100121,转为十进制为: $$ 十进制转二进制:整数位用短除法,除二取余,直到

    2024年02月03日
    浏览(48)
  • 计算机网络第一章——计算机体系结构(上)

    提示:剑未佩妥,出门已是江湖;酒尚余温,入口不识乾坤,愿历尽千帆,归来仍是少年。 电信网络就是通过电话线连接起来的一个网络,有线电视网络通过电缆或者光缆将已经录制好的电视节目发给千家万户,计算机网络是通过各个结点,这个结点包括终端的电脑,手机,

    2024年02月06日
    浏览(61)
  • 《计算机系统与网络安全》第一章 计算机系统与网络安全概述

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(39)
  • 计算机网络第一章——计算机网络系统结构(下)

    提示:总角之宴,言笑晏晏。信誓旦旦,不思其反。反是不思,亦已焉哉。 问题很庞大,将大问题分成小问题,对应一个层次 实体指的是每层中的活动元素,任何可以发送或者接受信息的硬件或者软件进程 只有对等的实体之间才有协议,不对等的实体之间是不存在协议的

    2024年02月07日
    浏览(46)
  • 计算机组成原理基础练习题第一章

    有些计算机将一部分软件永恒地存于只读存储器中,称之为() A.硬件    B.软件 C. 固件     D.辅助存储器 输入、输出装置以及外界的辅助存储器称为() A.操作系统    B.存储器 C.主机       D. 外围设备 完整的计算机系统包括() A.运算器、存储器、控制器   

    2024年02月04日
    浏览(57)
  • 第一章 计算机系统概述 五、中断和异常、系统调用

    目录 一、中断的作用 二、中断的类型 1、内中断(异常) 2、外中断 三、中断机制的基本原理 四、系统调用 1、定义: 2、与库函数的区别 3、按功能分类 4、作用 1、“中断”是让操作系统内核夺回CPU使用权的唯一途径 1、内中断(异常) (1)与当前执行的指令有关,中断信

    2024年02月09日
    浏览(47)
  • 【软考数据库】第一章 计算机系统基础知识

    目录 目录 1.1 计算机系统 1.1.1 计算机硬件组成 1.1.2 中央处理单元 1.1.3 数据表示 1.1.4 校验码 1.2 计算机体系结构 1.2.1 体系结构分类 1.2.2 指令系统存 1.2.3 储系系统 1.2.4 输入/输出技术 1.2.5 总线结构 1.3 可靠性、性能、安全 1.3.1 计算机可靠性 1.3.2 计算机系统的性能评价 1.

    2023年04月13日
    浏览(105)
  • 计算机网络课后第一章问答题

    目录   1-03.试比较电路交换,报文交换和分组交换的主要优缺点 1-29.论述有五层协议的网络体系结构的要点,包括各层的主要功能。   (1)电路交换:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。 (2)报文交换:无须预约传输带宽,动态逐

    2024年02月22日
    浏览(41)
  • 第一章 计算机系统概述 四、操作系统的运行机制

    状态的切换: 内核态转用户态 ,是指操作系统让出cpu使用权给应用程序。(一条修改PSW的特权指令) 用户态转内核态 ,指操作系统 发出一个中断信号 ,将应用程序强行停止, 转换为内核程序 ,并 得到cpu的使用权 。(由中断引起,硬件自动完成) 注意: 一个共性是,但

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包