开发应用程序案例研究: 科学计算器

概述

 

科学计算器是实用的应用程序,可以执行简单的日常计算,到复杂的科学计算。 跟踪计算历史,它还提供多达 8 的内存插槽,与该用户的记录编辑说明。 

 

 

表的内容

 

 

功能

从 web 应用程序开发人员的角度来看,感兴趣的特点是:

  • 使用 Chromium API 的国际化
  • 使用本地存储,将数据保存为键/值对。
  • PEG.js的使用,一个简单的JavaScript解析器生成器,它能产生具有优良的错误报告的快速解析器。 它基于Parsing expression grammar
  • 使用iScroll.js,作为移动 webkit 不提供原生的方法滚动放在一个固定的宽度高度元素内的内容。
  • 一些背景图像使用 -webkit-gradient而不使用传统的图形渲染。
  • 使用-webkit-transition和-webkit-keyframes关键帧渲染动画。

 

 

国际化

要国际化,所有用户可见的字符串都必须放在一个名为 messages.json 的文件中(位于名为 _locales/LocaleCode 的目录中;LocaleCode 是代表代码,如以 en 代表英语)。 配置文件、CSS 文件和 JavaScript 代码使用的每个字符串的名称来获取其本地化的版本。

若要检索区域设置,web 应用程序需要调用 chrome.i18n.getMessage() 方法。 在此示例 js/Localizer.js 文件中,提供了 getTranslation 函数来检索区域设置。

你可在Read more中了解关于国际化的更多信息.

getTranslation: function(string) {
    if (window.chrome && window.chrome.i18n) {
        return chrome.i18n.getMessage(string);
    } else {
    return LOCALE[string];
    }
}

 

 

存储

通过使用 HTML5,web 应用程序可以在客户端设备上存储数据。在早期版本的 HTML,数据存储的实现是通过cookies和闪存存储做的。 通过使用客户端的存储,您可以开发一个应用程序在脱机模式下工作,这降低了网络请求的数量,并提高了应用程序的性能。

Web应用程序可以以下几个方式存储:

  • Web 存储 (本地存储/会话存储)
  • Web SQL Database
  • IndexedDB
  • Application Cache
  • Filesystem APIs
  • Cookies
此应用程序使用 LocalStorage来保存历史数据

Web Storage

使用 Web 存储 Api,应用程序可以将数据存储在键/值对,它只能检索通过它存储的数据。

  • 本地存储

    • 应用程序可以存储数据,而没有任何的到期日期。
    • 数据是稳定的。
    • 避免HTTP cookies超限。
    • 主要用于存储设置。
    //Write data in localstorage
    this.createHistoryEntryInLocalStorage = function(formula, result) {
                var historyEntry = {
                    formula: formula,
                    result: result,
                    timestamp: new Date().getTime()
                };
    
                localStorage.setItem('history' + Calculator.nexthistoryindex, JSON.stringify(historyEntry));
                Calculator.nexthistoryindex++;
            };
    
    //Read data from local storage
    for (var i = firsthistoryindex; true; ++i) {
           var historyitemstr = localStorage.getItem('history' + i);
           }
    
    //Remove data from local storage
    for (var i = firsthistoryindex; true; ++i) {
    localStorage.removeItem('history' + i);
    }
  • Session Storage

    • 为一个会话存储数据。
    • 主要用于敏感数据。
Web 存储 Api 仅接收字符串。 若要保存结构化的数据,可以使用 JSON.stringify() (转换结构数据为字符串) 和 JSON.parse() (解析字符串为键/值对) 的方法。

 

 

PEG和 iScroll 库的使用

使用PEG.js,应用程序可以解析由用户输入的公式。 通过Read more,你会发现关于PEG更多的信息,

iScroll 提供多个功能如捏 / 变焦,向上拉/向下拉刷新,可定制化的滚动条等。 你会发现更多关于 iScroll 的信息,通过Read more

// PEG parser
this.parser = PEG.buildParser(document.getElementById("grammar").innerText);
var entry = Calculator.parser.parse(formula); //Calculator = this

//Creates scroll bar for the history page

this.createScrollbars = function(){
    this.historyScrollbar = new iScroll('wrapper', {scrollbarClass: 'customScrollbar',
        hScrollbar: true, vScrollbar: true,
        hideScrollbar: true, checkDOMChanges: true});
    };
};

 

 

按钮点击播放音频

播放音频按钮单击增强了用户体验。 计算器 web 应用程序使用 HTML 音频 DOM 引用通过按下按钮来播放音频文件。

你会发现更多关于音频 DOM 引用的信息,通过Read more.

//Initializes the audio files and assigns audio for various button presses
        this.initAudio = function(){
            Calculator.buttonClickAudio = new Audio();
            Calculator.buttonClickAudio.src = "./audio/GeneralButtonPress_R2.ogg";
            Calculator.equalClickAudio = new Audio();
            Calculator.equalClickAudio.src = "./audio/EqualitySign_R2.ogg";
            $('#closehistorybutton').click(function(e){
                Calculator.buttonClickAudio.play();
            });

 

 

使用 JSON 文件

JSON 是一种轻量级的数据交换格式。 它可以通过以下一些为 C 系列语言程序员所熟知的简单规范编写。 JSON 独立于语言,便于人们阅读和编写。 在 JSON 中使用的主要概念是键/值对和排序列表的集合。

此示例使用 JSON 来存储和检索历史记录项

你可在Read more了解关于 JSON 的更多信息。

//Localization example.
this.createHistoryEntryInLocalStorage = function(formula, result) {
            var historyEntry = {
                formula: formula,
                result: result,
                timestamp: new Date().getTime()
            };

            localStorage.setItem('history' + Calculator.nexthistoryindex, JSON.stringify(historyEntry));
            Calculator.nexthistoryindex++;
        };

        // Parse the saved history item
        var historyitem = JSON.parse(historyitemstr);

 

 

屏幕截图

以下是科学计算器应用程序的屏幕截图。

 

  

主页面

图 1: 这是当加载 web 页时手机处于纵向模式。 

 

  

主页面

图 2: 这是当加载 web 页时手机处于横向模式。 

 

  

主页面

图 3: 这是数字输入。