首頁  >  文章  >  web前端  >  純 HTML+CSS+JavaScript 編寫的計算器應用

純 HTML+CSS+JavaScript 編寫的計算器應用

大家讲道理
大家讲道理原創
2016-11-11 10:16:151764瀏覽

一道筆試題

之前偶然看到一個公司的筆試題,題目如下:

用HTML5、CSS3、JavaScript,做一個網頁,實現如下圖形式計算器

純 HTML+CSS+JavaScript 編寫的計算器應用

1.有且只有一個文件:index.html。不允許再有其他文件,不允許再有單獨的CSS、JS、PNG、JPG文件。

2.運行環境為 Google Chrome。

3.必須支援標準的四則運算。例如:1+2*3=7。

4.請在收到郵件的48小時內獨立完成本測試,並回覆本郵件。

一道筆試題引發的一個練手項目

花了一點時間寫好的第一版,符合了筆試題的要求。後來左看右看覺得還可以改進做的更好,於是給它不斷的改進,加新功能等,這樣下來沒完沒了,利用業餘時間一點一點的寫,從剛開始的網頁版,到後來做響應式的行動版,再到現在的行動App,短短續續大概寫了3個月吧。

專案地址

最終版的計算器,專案地址和預覽圖片在 GitHub:https://github.com/dunizb/sCalc。

功能說明

最終版的功能如下:

  • 介面版面採用CSS3 的Flex box版面

  • 內建可以切換單手模式(App)

  • 當輸入手機號碼後長按等於號可以撥打手機號碼(App)

  • 版本更新檢查(App)

  • 版本更新檢查(App)

  • 專案只是練手,所以採用了HTML5個CSS3技術,也不打算相容IE等低版瀏覽器,所以直接使用CSS3提供的Flexbox佈局方式。並且使用rem單位來進行自動計算尺寸。

  • 計算計算歷史記錄顯示功能,使用HTML5提供的本地儲存功能之Local Storage,為了方便使用Local Storage,對它進行了簡單的封裝(見js/common.js檔案)使之key值按一定規律生產,方便管理。

key由appName+id組成,id是自動增長不重複的,可以按id和appName刪除一條記錄,輸入*則全部刪除。

打包APP

行動Web版計算器寫完後,又想把他做成APP在手機上運行,由於本人沒用過混合APP諸如ionic之類的框架,所以參考了一下,選擇了Hbuild來進行開發和APP的打包,非常方便。 (HBuild).

純 HTML+CSS+JavaScript 編寫的計算器應用

單手模式

左滑右滑可以切換單手模式,這就需要移動端的touch事件了,使用如下代碼判斷是左滑還是又滑:

/** 单手模式 */
function singleModel(){
    var calc = document.getElementById("calc");
    var startX = 0,moveX = 0,distanceX = 0;
    var distance = 100;  
    var width = calc.offsetWidth;
    //滑动事件
    calc.addEventListener("touchstart",function(e){
        startX = e.touches[0].clientX;
    });
    calc.addEventListener("touchmove",function(e){
        moveX = e.touches[0].clientX;
        distanceX = moveX - startX;
        isMove = true;
    });
    window.addEventListener("touchend",function(e){
        if(Math.abs(distanceX) > width/3 && isMove){
            if( distanceX > 0 ){
                positionFun("right");        //右滑
            }else{
                positionFun("left");          //作滑
            }
        }
        startY = moveY = 0;
        isMove = false;
    });   
}

如果是坐滑,就position:absolut;left:0,bottom:0,再把最外層DIV縮小到80%,這樣就實現了左滑計算器縮小移動到左下角。右滑道理一樣。

電話撥打功能

當輸入手機號碼後長按等於號碼可以撥打手機號碼。這個功能沒什麼神奇,在行動Web上會對那些看起來像是電話號碼的數字處理為電話鏈接,例如:

7位數字,形如:1234567

帶括號及加號的數字,形如:(+86)123456789

  • 雙連接線的數字,形如:00-00-00111

  • 11位元數字,形狀如:13800138000也會被識別。我們可以透過以下的meta來開啟電話號碼的自動辨識

    <meta name="format-detection" content="telephone=yes" />
  • 開啟電話功能
  • <a href="tel:123456">123456</a>

    開啟簡訊功能:

    <a href="sms:123456">123456</a>
  • 但是,在Android系統上,只能呼叫系統的撥號介面,在iOS上則能調過這一步直接把電話打出去。
  • 版本更新檢查

在關於頁面,有一個版本更新檢查按鈕,就能檢查是否有新版本,這個功能的原理是發送一個JSOPN請求去檢查伺服器上的JSON文件,比對版本號,如果伺服器上的版本比APP的版本高則會提示有新版本可以下載。

客戶端JavaScript程式碼:

function updateApp(){
    //检查新版本
    var updateApp = document.getElementById("updateApp");
    updateApp.onclick = function(){
        var _this = this;
        $.ajax({
            type:&#39;get&#39;,
            url:&#39;http://duni.sinaapp.com/demo/app.php?jsoncallback=?&#39;,
            dataType:&#39;jsonp&#39;,
            beforeSend : function(){
                _this.innerHTML = " 正在检查新版本...";
            },
            success:function(data){
                var newVer = data[0].version;
                if(newVer > appConfig.version){
                    var log = data[0].log;
                    var downloadUrl = data[0].downloadUrl;
                    if(confirm("检查到新版本【"+newVer+"】,是否立即下载?\n 更新日志:\n " + log)){
                        var a = document.getElementById("telPhone");
                        a.href = downloadUrl;
                        a.target = "_blank";
                        a.click();
                    }
                }else{
                    alert("你很潮哦,当前已经是最新版本!");
                }
                _this.innerHTML = " 检查新版本";
            },
            error:function(msg){
                _this.innerHTML = " 检查新版本";
                alert("检查失败:"+msg.message);
            }
        });
    }
}

服務端JSON:

[
    {
        "version":"3.1.0",
        "downloadUrl":"http://dunizb.b0.upaiyun.com/demo/app/myCalc-3.1.0.apk",
        "hashCode":"20160812224616",
        "log":"1.新增切换主题功能 \n 2.新增单手切换模式功能 \n 3.调整UI "
    }
]

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn