成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

純HTML+CSS+JS編寫的計(jì)算器應(yīng)用

開發(fā) 前端
之前偶然看到一個(gè)公司的筆試題,題目如下:用HTML5、CSS3、JavaScript,做一個(gè)網(wǎng)頁,實(shí)現(xiàn)如下圖形式計(jì)算器。

一道筆試題

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

用HTML5、CSS3、JavaScript,做一個(gè)網(wǎng)頁,實(shí)現(xiàn)如下圖形式計(jì)算器

 

具體要求:

  1. 有且只有一個(gè)文件:index.html。不允許再有其他文件,不允許再有單獨(dú)的CSS、JS、PNG、JPG文件。
  2. 運(yùn)行環(huán)境為 Google Chrome。
  3. 必須支持標(biāo)準(zhǔn)的四則運(yùn)算。例如:1+2*3=7。
  4. 請(qǐng)?jiān)谑盏洁]件的48小時(shí)內(nèi)獨(dú)立完成本測(cè)試,并回復(fù)本郵件。

一道筆試題引發(fā)的一個(gè)練手項(xiàng)目

花了一點(diǎn)時(shí)間寫好的第一版,符合了筆試題的要求。后來左看右看覺得還可以改進(jìn)做的更好,于是給它不斷的改進(jìn),加新功能等,這樣下來沒完沒了,利用業(yè)余時(shí)間一點(diǎn)一點(diǎn)的寫,從剛開始的網(wǎng)頁版,到后來做響應(yīng)式的移動(dòng)版,再到現(xiàn)在的移動(dòng)App,短短續(xù)續(xù)大概寫了3個(gè)月吧。

項(xiàng)目地址

最終版的計(jì)算器,項(xiàng)目地址和預(yù)覽圖片在 GitHub:https://github.com/dunizb/sCalc。

功能說明

最終版的功能如下:

  1. 界面布局采用CSS3 的 Flex box布局
  2. 內(nèi)置兩套主題可切換
  3. 計(jì)算歷史記錄顯示
  4. 左滑右滑可以切換單手模式(App)
  5. 當(dāng)輸入手機(jī)號(hào)碼后長按等于號(hào)可以撥打手機(jī)號(hào)碼(App)
  6. 版本更新檢查(App)

界面布局

由于這個(gè)項(xiàng)目只是練手,所以采用了HTML5個(gè)CSS3技術(shù),也不打算兼容IE等低版本瀏覽器,所以直接使用CSS3提供的Flexbox布局方式。并且使用rem單位來進(jìn)行自動(dòng)計(jì)算尺寸。

計(jì)算計(jì)算歷史記錄顯示功能,使用HTML5提供的本地存儲(chǔ)功能之Local Storage,為了方便使用Local Storage,對(duì)它進(jìn)行了簡(jiǎn)單的封裝(見js/common.js文件)使之key值按一定規(guī)律生產(chǎn),方便管理。

 

key由appName+id組成,id是自動(dòng)增長不重復(fù)的,可以按id和appName刪除一條記錄,輸入*則全部刪除。

打包APP

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

單手模式

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

  1. /** 單手模式 */ 
  2.  
  3. function singleModel(){ 
  4.  
  5.     var calc = document.getElementById("calc"); 
  6.  
  7.     var startX = 0,moveX = 0,distanceX = 0; 
  8.  
  9.     var distance = 100;   
  10.  
  11.     var width = calc.offsetWidth; 
  12.  
  13.     //滑動(dòng)事件 
  14.  
  15.     calc.addEventListener("touchstart",function(e){ 
  16.  
  17.         startX = e.touches[0].clientX; 
  18.  
  19.     }); 
  20.  
  21.     calc.addEventListener("touchmove",function(e){ 
  22.  
  23.         moveX = e.touches[0].clientX; 
  24.  
  25.         distanceX = moveX - startX; 
  26.  
  27.         isMove = true
  28.  
  29.     }); 
  30.  
  31.     window.addEventListener("touchend",function(e){ 
  32.  
  33.         if(Math.abs(distanceX) > width/3 && isMove){ 
  34.  
  35.             if( distanceX > 0 ){ 
  36.  
  37.                 positionFun("right");        //右滑 
  38.  
  39.             }else
  40.  
  41.                 positionFun("left");          //左滑 
  42.  
  43.             } 
  44.  
  45.         } 
  46.  
  47.         startY = moveY = 0; 
  48.  
  49.         isMove = false
  50.  
  51.     });   
  52.  
  53.  

如果是左滑,就position:absolut;left:0,bottom:0,再把最外層DIV縮小到80%,這樣就實(shí)現(xiàn)了左滑計(jì)算器縮小移動(dòng)到左下角。右滑道理一樣。

電話撥打功能

當(dāng)輸入手機(jī)號(hào)碼后長按等于號(hào)可以撥打手機(jī)號(hào)碼。這個(gè)功能沒什么神奇,在移動(dòng)Web上會(huì)對(duì)那些看起來像是電話號(hào)碼的數(shù)字處理為電話鏈接,比如:

  • 7位數(shù)字,形如:1234567
  • 帶括號(hào)及加號(hào)的數(shù)字,形如:(+86)123456789
  • 雙連接線的數(shù)字,形如:00-00-00111
  • 11位數(shù)字,形如:13800138000

可能還有其他類型的數(shù)字也會(huì)被識(shí)別。我們可以通過如下的meta來開啟電話號(hào)碼的自動(dòng)識(shí)別:

  1. <meta name="format-detection" content="telephone=yes" /> 

開啟電話功能

  1. <a href="tel:123456">123456</a> 

開啟短信功能:

  1. <a href="sms:123456">123456</a> 

但是,在Android系統(tǒng)上,只能調(diào)用系統(tǒng)的撥號(hào)界面,在iOS上則能調(diào)過這一步直接把電話撥打出去。

版本更新檢查

在關(guān)于頁面,有一個(gè)版本更新檢查按鈕,就能檢查是否有新版本,這個(gè)功能的原理是發(fā)送一個(gè)JSOPN請(qǐng)求去檢查服務(wù)器上的JSON文件,比對(duì)版本號(hào),如果服務(wù)器上的版本比APP的版本高則會(huì)提示有新版本可以下載。

客戶端JavaScript代碼:

  1. function updateApp(){ 
  2.  
  3.     //檢查新版本 
  4.  
  5.     var updateApp = document.getElementById("updateApp"); 
  6.  
  7.     updateApp.onclick = function(){ 
  8.  
  9.         var _this = this; 
  10.  
  11.         $.ajax({ 
  12.  
  13.             type:'get'
  14.  
  15.             url:'http://duni.sinaapp.com/demo/app.php?jsoncallback=?'
  16.  
  17.             dataType:'jsonp'
  18.  
  19.             beforeSend : function(){ 
  20.  
  21.                 _this.innerHTML = "<i class='iconfont updateAppIcon updateAppIconRotate'></i> 正在檢查新版本..."
  22.  
  23.             }, 
  24.  
  25.             success:function(data){ 
  26.  
  27.                 var newVer = data[0].version; 
  28.  
  29.                 if(newVer > appConfig.version){ 
  30.  
  31.                     var log = data[0].log; 
  32.  
  33.                     var downloadUrl = data[0].downloadUrl; 
  34.  
  35.                     if(confirm("檢查到新版本【"+newVer+"】,是否立即下載?\n 更新日志:\n " + log)){ 
  36.  
  37.                         var a = document.getElementById("telPhone"); 
  38.  
  39.                         a.href = downloadUrl; 
  40.  
  41.                         a.target = "_blank"
  42.  
  43.                         a.click(); 
  44.  
  45.                     } 
  46.  
  47.                 }else
  48.  
  49.                     alert("你很潮哦,當(dāng)前已經(jīng)是最新版本!"); 
  50.  
  51.                 } 
  52.  
  53.                 _this.innerHTML = "<i class='iconfont updateAppIcon'></i> 檢查新版本"
  54.  
  55.             }, 
  56.  
  57.             error:function(msg){ 
  58.  
  59.                 _this.innerHTML = "<i class='iconfont updateAppIcon'></i> 檢查新版本"
  60.  
  61.                 alert("檢查失敗:"+msg.message); 
  62.  
  63.             } 
  64.  
  65.         }); 
  66.  
  67.     } 
  68.  

 

服務(wù)端JSON:

  1.  
  2.     { 
  3.  
  4.         "version":"3.1.0"
  5.  
  6.         "downloadUrl":"http://dunizb.b0.upaiyun.com/demo/app/myCalc-3.1.0.apk"
  7.  
  8.         "hashCode":"20160812224616"
  9.  
  10.         "log":"1.新增切換主題功能 \n 2.新增單手切換模式功能 \n 3.調(diào)整UI " 
  11.  
  12.     } 
  13.  

 

下個(gè)版本計(jì)劃

當(dāng)前3.1.0版本還存在一些問題:

  1. 由于JS本身存在計(jì)算浮點(diǎn)數(shù)精度丟失問題,所以這個(gè)問題在項(xiàng)目中同意存在,需要自己去處理這個(gè)問題
  2. 由于使用了第三方的天氣接口,用了jquery.Ajax方法,所以違背了使用純?cè)鷮懙某踔浴?/li>

所以下個(gè)版本的開發(fā)計(jì)劃為:

  1. 解決浮點(diǎn)數(shù)計(jì)算精度問題
  2. 把獲取天氣信息的jquery.Ajax方法替換為原生JavaScript代碼,自己封裝JSONP請(qǐng)求函數(shù)
  3. 使用面向?qū)ο蠓绞街貥?gòu)APP 
責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2022-03-10 14:57:35

ArkUIets項(xiàng)目開發(fā)鴻蒙

2017-09-05 16:43:47

Electron桌面計(jì)算器

2022-08-09 16:01:24

應(yīng)用開發(fā)鴻蒙

2022-03-14 15:36:34

Row容器組件Column容器組件鴻蒙

2022-03-17 16:04:16

Text文本組件Button組件Column

2011-09-16 14:13:15

Windows7計(jì)算器

2015-04-24 10:05:15

HTML+CSS阿童木頭像

2022-07-11 16:19:22

css屬性鴻蒙

2012-03-16 20:33:20

iPhone

2013-03-11 10:30:56

CSSWeb

2013-05-23 15:06:22

Android開發(fā)體重計(jì)算器移動(dòng)應(yīng)用

2011-03-29 13:45:55

HTMLCSSjavascript

2010-08-27 15:16:26

htmlbodyCSS

2016-12-12 13:41:37

iOS簡(jiǎn)易加法開發(fā)

2010-01-15 19:12:36

Linux計(jì)算器

2022-03-02 15:35:57

UI界面容器組件鴻蒙

2012-05-25 10:31:44

HTML5

2019-03-08 14:53:54

Windows 10計(jì)算器微軟

2023-04-17 09:08:27

CSS計(jì)時(shí)器

2010-08-26 14:00:33

云ROI計(jì)算器產(chǎn)品
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美精品一区二区三区在线 | 2021狠狠干 | 精品国产一区二区久久 | 欧美午夜影院 | 欧洲一区二区三区 | 久久精品小视频 | 欧美一级片在线看 | 国产精品一区二区三区久久久 | 国产成人精品免高潮在线观看 | 婷婷丁香在线视频 | 日韩免费视频一区二区 | 国产精品欧美一区二区三区不卡 | 免费在线观看成年人视频 | 天天操天天天干 | 成人欧美一区二区三区黑人孕妇 | 在线视频一区二区 | 国产一级一级国产 | 色播av | 国产一区999| 国产精品国产成人国产三级 | 欧美精品一区二区在线观看 | 久久成人高清视频 | 国产一级在线 | 成人午夜网站 | 美女久久久久久久久 | 中文字幕日韩专区 | 最新国产精品 | 在线一区视频 | 成人精品高清 | 亚洲午夜精品在线观看 | 99爱视频| 国产三级日本三级 | 欧美日韩国产一区二区三区 | 日本黄色大片免费 | 国产激情一区二区三区 | 日韩毛片 | 亚洲综合无码一区二区 | 欧美精品福利 | 国产一区二区三区高清 | 日韩精品一二三 | 成人黄色网址大全 |