最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

鴻蒙JS實(shí)戰(zhàn)之計(jì)算器功能開發(fā)實(shí)例

 更新時(shí)間:2024年02月17日 09:43:18   作者:程序員沙蛙  
這篇文章主要給大家介紹了關(guān)于鴻蒙Js實(shí)戰(zhàn)之計(jì)算器功能開發(fā)的相關(guān)資料,計(jì)算器是我們生活中經(jīng)常使用的應(yīng)用,此項(xiàng)目是基于Harmony實(shí)現(xiàn)的簡易計(jì)算器,需要的朋友可以參考下

場景:

通過動態(tài)設(shè)置按鈕組件button實(shí)現(xiàn)計(jì)算器的鍵盤,通過文本text顯示計(jì)算的表達(dá)書,可以計(jì)算+,-,*,/,可以一個(gè)一個(gè)移除,可以重置 等。

下面我們開始今天的文章,還是老規(guī)矩,通過如下幾點(diǎn)來說:

1,實(shí)現(xiàn)思路

2,代碼解析

3,實(shí)現(xiàn)效果

3,總結(jié)

一,實(shí)現(xiàn)思路

計(jì)算器的鍵盤,本來是想使用grid的 但是有一些默認(rèn)屬性不好控制,等后續(xù)組件完善了在做優(yōu)化,目前grid適合一些均衡布局,通過監(jiān)聽計(jì)算符號添加判斷邏輯,計(jì)算結(jié)果也是通過添加的計(jì)算類型進(jìn)行計(jì)算,目前支持一級計(jì)算,后面做連續(xù)計(jì)算。

二,代碼解析

子組件:

1,hml文件

實(shí)用了四個(gè)for循環(huán)實(shí)現(xiàn)了鍵盤效果,后面想了一下其實(shí)一個(gè)就能搞定,動態(tài)換行就行,時(shí)間有限后續(xù)優(yōu)化(總感覺計(jì)算器挺簡單,其實(shí)做起來還需要點(diǎn)時(shí)間)

<div class="container">
    <text class="input-content">{{inputcontent}}</text>
    <div class="menu-content">
        <div class="caluater" for="{{ caluater }}" >
            <button class="content" onclick="calculatorClick({{ $item.id }})">{{ $item.id }}</button>
        </div>
    </div>
    <div class="menu-content">
        <div class="caluater" for="{{ caluater1 }}">
            <button class="content2" on:click="calculatorClick({{ $item.id }})">{{ $item.id }}</button>
        </div>
    </div>
    <div class="menu-content">
        <div class="caluater" for="{{ caluater2 }}">
            <button class="content2" on:click="calculatorClick({{ $item.id }})">{{ $item.id }}</button>
        </div>
    </div>
 
    <div class="list2-content">
        <div class="list3-content">
            <div class="list2-content">
                <div class="caluater" for="{{ caluater3 }}">
                    <button class="content2" on:click="calculatorClick({{ $item.id }})">{{ $item.id }}</button>
                </div>
            </div>
            <div class="list2-content">
                <div class="caluater" for="{{ caluater4 }}">
                    <button class="content2" on:click="calculatorClick({{ $item.id }})">{{ $item.id }}</button>
                </div>
            </div>
        </div>
        <button class="equals" onclick="calculatorResult">=</button>
    </div>
</div>

2,css文件

樣式比較簡單,主要控制鍵盤和表達(dá)式文本的顏色和大小

.container {
    flex-direction: column;
    justify-content: flex-end;
    align-items: flex-end;
    width: 100%;
}
.input-content{
    background-color: #00ffffff;
    text-align: right;
    font-size: 25px;
    padding: 10px;
    font-weight: bold;
}
.menu-content{
    width: 100%;
    background-color: brown;
    allow-scale: true;
}
.caluater {
    flex-direction: row;
    width: 100%;
    height: 70px;
    background-color: #00ffffff;
    margin-left: 5px;
    margin-right: 5px;
    margin-top: 10px;
}
.content{
    font-size: 30px;
    font-weight: bold;
    radius: 10px;
    width: 100%;
    height: 100%;
    text-color: #007EFF;
    background-color: #A8CCFB;
}
.content2{
    font-size: 30px;
    font-weight: bold;
    radius: 10px;
    width: 100%;
    height: 100%;
    text-color: #000000;
    background-color: #dddcdc;
}
.list2-content{
    flex-direction: row;
    justify-content: center;
    align-items: center;
    background-color: brown;
}
.list3-content{
    flex-direction: column;
    margin-bottom: 10px;
}
.equals{
    width: 30%;
    height: 150px;
    font-size: 30px;
    font-weight: bold;
    radius: 10px;
    margin-left: 5px;
    margin-right: 5px;
}

3,js文件

js中主要實(shí)現(xiàn)邏輯,請看具體計(jì)算的判斷。

import prompt from '@system.prompt';
export default {
    data: {
        title: "",
        inputcontent: "",
        number1: "",
        number2: "",
        type: "",
        caluater: [
            {
                'id': "C",
            },
            {
                'id': "÷",
            },
            {
                'id': "×",
            },
            {
                'id': "←",
            }
        ],
        caluater1:[
            {
                'id': "7",
            },
            {
                'id': "8",
            },
            {
                'id': "9",
            },
            {
                'id': "+",
            }
        ],
        caluater2:[
            {
                'id': "4",
            },
            {
                'id': "5",
            },
            {
                'id': "6",
            },
            {
                'id': "-",
            }
        ],
        caluater3:[
            {
                'id': "1",
            },
            {
                'id': "2",
            },
            {
                'id': "3",
            }
        ],
        caluater4:[
            {
                'id': "%",
            },
            {
                'id': "0",
            },
            {
                'id': ".",
            }
        ]
    },
    onInit() {
    },
    calculatorClick(result){
        this.inputcontent = this.inputcontent+"";
        let str = this.inputcontent
            .substring(this.inputcontent.length-1, this.inputcontent.length);
       switch(result) {
        case "←":
            if(this.inputcontent.length > 0) {
                let str = this.inputcontent
                    .substring(0, this.inputcontent.length - 1);
                this.inputcontent = str;
            }
           break;
        case "C":
            this.inputcontent = "";
           break;
        case "+":
            this.calcula(str,result,"+");
           break;
       case "-":
           this.calcula(str,result,"-");
           break;
       case "×":
           this.calcula(str,result,"×");
           break;
       case "÷":
           this.calcula(str,result,"÷");
           break;
       case ".":
           if(this.inputcontent.length > 0 && str != ".") {
               this.inputcontent += result;
           }
           break;
        default:
            this.inputcontent += result;
           break;
        }
    },
    calcula(str,result,cla){
        if(this.inputcontent.length > 0 && str != "+" && str != "-" && str != "×" && str != "÷") {
            this.type = cla;
            this.inputcontent += result;
        } else {
            this.calculatorResult();
        }
    },
    calculatorResult(){// 計(jì)算結(jié)果
        var temp = this.inputcontent.split(this.type);
        console.log("this.inputcontent = "+this.inputcontent)
        let str = this.inputcontent
            .substring(this.inputcontent.length-1, this.inputcontent.length);
        console.log("this.type = "+this.type)
        if (this.type == "+") {  // 加法計(jì)算
           if(temp.length > 1) {
               console.log("temp = "+temp)
               var num1 = parseFloat(temp[0]);
               var num2 = parseFloat(temp[1]);
               console.log("num1 = "+num1)
               console.log("num2 = "+num2)
               console.log("str = "+str)
               if(str != "+") {
                   this.inputcontent = num1 + num2;
                   this.type = "";
               }
           }
        } else if(this.type == "-") {  // 減法計(jì)算
            if(temp.length > 1) {
                var num1 = parseFloat(temp[0]);
                var num2 = parseFloat(temp[1]);
                if(str != "-") {
                    this.inputcontent = num1 - num2;
                    this.type = "";
                }
            }
        } else if(this.type == "×") {  // 乘法計(jì)算
            if(temp.length > 1) {
                var num1 = parseFloat(temp[0]);
                var num2 = parseFloat(temp[1]);
                if(str != "×") {
                    this.inputcontent = num1 * num2;
                    this.type = "";
                }
            }
        } else if(this.type == "÷") {  // 除法計(jì)算
            if(temp.length > 1) {
                var num1 = parseFloat(temp[0]);
                var num2 = parseFloat(temp[1]);
                if(str != "÷") {
                    this.inputcontent = num1 / num2;
                    this.type = "";
                }
            }
        }
    }
}

為了目前的單一計(jì)算,現(xiàn)在做了不少的判斷,后續(xù)做連續(xù)計(jì)算的時(shí)候會有改動,但是目前正常計(jì)算沒有問題,期待后續(xù)更新。

三,實(shí)現(xiàn)效果

四,總結(jié)

開發(fā)計(jì)算器最主要的是連續(xù)計(jì)算,連續(xù)計(jì)算需要添加計(jì)算優(yōu)先級邏輯,后續(xù)考慮通過遍歷來判斷里面的計(jì)算。

計(jì)算器界面開發(fā)通過常用組件就能實(shí)現(xiàn),實(shí)現(xiàn)方式可以自己定。

在開發(fā)中驗(yàn)證了NaN,這個(gè)空的判斷很多方式無效的,他是針對Number做的判斷。

到此這篇關(guān)于鴻蒙Js實(shí)戰(zhàn)之計(jì)算器功能開發(fā)的文章就介紹到這了,更多相關(guān)鴻蒙JS計(jì)算器功能開發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • BootStrap Fileinput初始化時(shí)的一些參數(shù)

    BootStrap Fileinput初始化時(shí)的一些參數(shù)

    本文通過一個(gè)例子給大家簡單介紹了bootstrap fileinput初始化時(shí)的一些參數(shù),非常不錯,具有參考借鑒價(jià)值,需要的朋友參考下
    2016-12-12
  • DLL+ ActiveX控件+WEB頁面調(diào)用例子

    DLL+ ActiveX控件+WEB頁面調(diào)用例子

    因項(xiàng)目需要,開始學(xué)習(xí)并研究VC、DLL及ActiveX控件,網(wǎng)上資料找了很多,但沒一個(gè)可用的或者說沒一個(gè)例子可理解并運(yùn)行的。沒辦法,自己研究吧。功夫不負(fù)有心人,終有小成了,呵呵,現(xiàn)在把自己學(xué)習(xí)總結(jié)了一下,獻(xiàn)給需要的人。
    2010-08-08
  • JS實(shí)現(xiàn)的文件拖拽上傳功能示例

    JS實(shí)現(xiàn)的文件拖拽上傳功能示例

    這篇文章主要介紹了JS實(shí)現(xiàn)的文件拖拽上傳功能,涉及javascript事件觸發(fā)、頁面元素屬性動態(tài)修改等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • js 文件引入實(shí)現(xiàn)代碼

    js 文件引入實(shí)現(xiàn)代碼

    項(xiàng)目前端的文件和后臺開發(fā)分離,只要后臺開發(fā)更新svn前端的js,css文件都會更新,以前引用的是一個(gè)js文件如AA.js,由于想在項(xiàng)目中引用jquery庫,如果在每個(gè)文件的頭部都引讓他們從新寫入這個(gè)jq文件不太可能
    2010-04-04
  • javascript函數(shù)的4種調(diào)用方式與this的指向

    javascript函數(shù)的4種調(diào)用方式與this的指向

    本文主要介紹了javascript函數(shù)的4種調(diào)用方式與this(上下文)的指向,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀一下
    2023-05-05
  • 一個(gè)js控制的導(dǎo)航菜單實(shí)例代碼

    一個(gè)js控制的導(dǎo)航菜單實(shí)例代碼

    這篇文章主要是對js控制的導(dǎo)航菜單實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • TypeScript 類型兼容(逆變、協(xié)變、雙向協(xié)變和不變)的實(shí)現(xiàn)

    TypeScript 類型兼容(逆變、協(xié)變、雙向協(xié)變和不變)的實(shí)現(xiàn)

    在TypeScript中,類型系統(tǒng)支持逆變、協(xié)變、雙向協(xié)變和不變四種型變概念,用于處理類型兼容性,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-08-08
  • JavaScript Array.flat()函數(shù)用法解析

    JavaScript Array.flat()函數(shù)用法解析

    這篇文章主要介紹了JavaScript Array.flat()函數(shù)用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • js實(shí)現(xiàn)顏色階梯漸變效果(Gradient算法)

    js實(shí)現(xiàn)顏色階梯漸變效果(Gradient算法)

    在色彩中,色相、明度、純度也都可以產(chǎn)生漸變效果,并會表現(xiàn)出具有豐富層次的美感。本文主要講述兩種顏色RGB數(shù)值的梯級漸變算法。下面跟著小編一起來看下吧
    2017-03-03
  • JS實(shí)現(xiàn)閉包中的沙箱模式示例

    JS實(shí)現(xiàn)閉包中的沙箱模式示例

    這篇文章主要介紹了JS實(shí)現(xiàn)閉包中的沙箱模式,結(jié)合實(shí)例形式分析了閉包模塊化實(shí)現(xiàn)沙箱模式的原理、步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09

最新評論

中阳县| 顺平县| 基隆市| 太康县| 资兴市| 泗洪县| 平阳县| 田林县| 阳曲县| 海城市| 沙湾县| 台东县| 河东区| 凌源市| 萨嘎县| 台南市| 大悟县| 安丘市| 南和县| 宜兰县| 兴义市| 泰和县| 黄骅市| 文昌市| 微山县| 滦南县| 三亚市| 中超| 甘德县| 凯里市| 扬州市| 库伦旗| 黄石市| 平利县| 田东县| 本溪| 旬邑县| 和林格尔县| 仙居县| 买车| 锦州市|