この記事の例では、計算機機能を実装するためのミニプログラムの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 携帯電話の電卓をシミュレートし、入力して計算します このページはお支払い金額を計算するためのページです。以下の内容が不要であれば削除していただいて構いません。 wxml <view class="calculate-box"> <view class="calculate-txt">{{express}}</view> <view class="result-num">={{result}}</view> </ビュー> <view class="fixation-box"> <view class="calculator-box"> <view class="calculator-line"> <view data-con='c' class='boxtn btn1 clear' catchtap="clickKeyBoard">AC</view> <view data-con='←' class='boxtn btn1' catchtap="clickKeyBoard"> <image src="../../../images/clear-icon.png" class="clear-icon"></image> </ビュー> <view data-con='÷100' class='boxtn btn1 percent' catchtap="clickKeyBoard">%</view> <view data-con='÷' class='boxtn num' catchtap="clickKeyBoard">÷</view> </ビュー> <view class="calculator-line"> <view data-con='7' class='boxtn btn1 num' catchtap="clickKeyBoard">7</view> <view data-con='8' class='boxtn btn1 num' catchtap="clickKeyBoard">8</view> <view data-con='9' class='boxtn btn1 num' catchtap="clickKeyBoard">9</view> <view data-con='×' class='boxtn num' catchtap="clickKeyBoard">×</view> </ビュー> <view class="calculator-line"> <view data-con='4' class='boxtn btn1 num' catchtap="clickKeyBoard">4</view> <view data-con='5' class='boxtn btn1 num' catchtap="clickKeyBoard">5</view> <view data-con='6' class='boxtn btn1 num' catchtap="clickKeyBoard">6</view> <view data-con='-' class='boxtn num' catchtap="clickKeyBoard">-</view> </ビュー> <view class="calculator-line"> <view data-con='1' class='boxtn btn1 num' catchtap="clickKeyBoard">1</view> <view data-con='2' class='boxtn btn1 num' catchtap="clickKeyBoard">2</view> <view data-con='3' class='boxtn btn1 num' catchtap="clickKeyBoard">3</view> <view data-con='+' class='boxtn num' catchtap="clickKeyBoard">+</view> </ビュー> <view class="calculator-line"> <view data-con='0' class='boxtn btn2 num' catchtap="clickKeyBoard">0</view> <view data-con='.' class='boxtn btn1 num' catchtap="clickKeyBoard">.</view> <view data-con='=' class='boxtn equal' catchtap="result">=</view> </ビュー> </ビュー> <view class="bottom-handle"> <!-- <view class="sweep-code-verification" bindtap="sweepCodeVerification"> <image src="../../../images/sweep-code-verification.png"></image> <text>コードをスキャンして確認します</text> </view> --> <view style="flex: 1;font-size: 34rpx;" class="artificial-collection" bindtap="artificial_collection"> <!--<image src="../../../images/artificial-collection.png"></image> --> <text>手動収集</text> </ビュー> <view class="payment-code" bindtap="qrcode_collection">支払いコードコレクション</view> </ビュー> </ビュー> js データ: { express: '', //1行目の式 result: '0', //2行目の結果 calc2: { str: '', //一時文字列 strList: [], //中置式ストレージ(先入先出キュー) strListP: [], // サフィックス式 (キュー先入先出) list: [], //演算子のスタックを格納します(先入れ先出し) count: [], //式スタックを計算する(先入れ先出し) flag: 0 // 文字列の最後の桁が演算子の桁であるかどうかを示します}, isqr: 偽、 }, //このイベントをすべてのテキストまたはビューにバインドし、対応するカスタム属性値を追加します clickKeyBoard(e) { that = this とする; let input = e.currentTarget.dataset.con //各入力の内容を取得します if (input == "c") { that.handleClear(); } それ以外の場合 (入力 == "←") { that.handleDelete(); } それ以外 { //処理文字列を呼び出します that.handleInfo(input); } }, //ローカルユーザーの入力操作を処理する handleInfo(input) { if (this.data.calc2.str.length == 0) { //最初にクリックif (input == "-" || this.checkShuZi(input)) { //マイナス記号の場合this.addStr(input); } それ以外 { 戻る; } } それ以外 { if (this.data.calc2.flag == 1) { //最後の桁が記号であることを示します if (this.checkFuHao(input)) { this.data.calc2.str = this.data.calc2.str.substring(0, this.data.calc2.str.length - 1); //最後のシンボルを削除し、最新のシンボルを追加します this.addStr(input); } それ以外 { this.addStr(入力); } コンソールログ(); } それ以外 { this.addStr(入力); この結果(); } } この結果(); }, //顧客が等号をクリックする result() { //等号をクリックするたびに、リストが空になります。this.data.calc2.strList.length = 0; this.data.calc2.strListP.length = 0; this.data.calc2.list.length = 0; this.data.calc2.count.length = 0; // 式をインフィックス式キューに変換します。this.expressToStrList(this.data.express); console.log(this.data.calc2.strList); // インフィックス式セットを一時変数に割り当てます。let tempList = this.data.calc2.strList; this.expressToStrListP(tempList); console.log(this.data.calc2.strListP); //最終計算 let tempP = this.data.calc2.strListP (let m in tempP) { if (this.checkFuHao2(tempP[m])) { //ドットなしのシンボル方式判定 let m1 = this.data.calc2.count[0]; //最初のデータを取り出す this.data.calc2.count.shift(); //取り出した後データを削除する let m2 = this.data.calc2.count[0]; this.data.calc2.count.shift(); // console.log('m1 は ' + m1 です); // console.log('m2 is' + m2); // console.log('演算子は ' + tempP[m] です); // console.log('計算結果は次のとおりです: ' + this.countDetail(m2, tempP[m], m1)); this.data.calc2.count.unshift(this.countDetail(m2, tempP[m], m1)); // 計算結果をcountに格納します} else { this.data.calc2.count.unshift(tempP[m]) // 数字をプッシュします} } console.log('最終計算結果は' + parseFloat(this.data.calc2.count[0]).toFixed(2)); this.setData({ 結果: this.data.calc2.count[0] }); }, //実際の計算 countDetail(e1, e2, e3) { 結果を 0.0 とします。 コンソールログ(e1); コンソールログ(e2); コンソールログ(e3); 試す { (e2 == "×") の場合 { (typeof(e1) != "未定義") の場合 { 結果 = parseFloat(e1) * parseFloat(e3); } それ以外 { 結果 = parseFloat(e3); } } そうでない場合 (e2 == "÷") { (typeof(e1) != "未定義") の場合 { 結果 = parseFloat(e1) / parseFloat(e3); } それ以外 { 結果 = parseFloat(e3); } } そうでない場合 (e2 == "%") { (typeof(e1) != "未定義") の場合 { 結果 = parseFloat(e1) / parseFloat(e3); } それ以外 { 結果 = parseFloat(e3); } } そうでない場合 (e2 == "+") { (typeof(e1) != "未定義") の場合 { 結果 = parseFloat(e1) + parseFloat(e3); } それ以外 { 結果 = parseFloat(e3); } } それ以外 { if (typeof (e1) != "未定義") { 結果 = parseFloat(e1) - parseFloat(e3); } それ以外 { 結果 = parseFloat(e3); } } } キャッチ(エラー){ } 結果を返します。 }, //中置式セットを後置式セットに変換する expressToStrListP(tempList) { for (let item in tempList) { if (this.checkFuHao2(tempList[item])) { //ピリオドなしのシンボル法判定 if (this.data.calc2.list.length == 0) { this.data.calc2.list.unshift(tempList[item]); // 加算演算子を直接追加します} else { if (this.checkFuHaoDX(this.data.calc2.list[0], tempList[item])) { (this.data.calc2.list 内の x を) { this.data.calc2.strListP.push(this.data.calc2.list[x]); //すべての演算子をlistPに格納します} this.data.calc2.list.length = 0; //ループ後、リストを空にする this.data.calc2.list.unshift(tempList[item]); //新しい要素を追加する } else { this.data.calc2.list.unshift(tempList[item]); // 加算演算子を直接追加します} } } それ以外 { this.data.calc2.strListP.push(tempList[item]); // 数値をサフィックスコレクションに直接追加します} } //ループが終了した後、最後のものは数値である可能性があり、取得されたものは文字ではないため、演算子の残りのものをlistPに追加する必要がありますif (this.data.calc2.list.length > 0) { (this.data.calc2.list 内の x を) { this.data.calc2.strListP.push(this.data.calc2.list[x]); //すべての演算子をlistPに格納します} this.data.calc2.list.length = 0; //ループ後、リストを空にする} }, // 2 つの演算子の優先順位を判断します (m1 はリスト セットに最後に追加された要素であり、これから追加される要素と比較します。m1 が m2 より大きい場合は、リスト セットを listp にポップし、次に m2 をリストに追加します。それ以外の場合は、m2 を直接リストに追加します) チェックFuHaoDX(m1, m2) { ((m1 == "%" || m1 == "×" || m1 == "÷") && (m2 == "-" || m2 == "+")) { true を返します。 } それ以外 { false を返します。 } }, //文字列式をインフィックスキューに変換する expressToStrList(express) { let temp = ''; //一時変数を定義する //式をインフィックスキューに変更する for (let i = 0; i < express.length; i++) { if (i == 0 && express[i] == "-") { temp = temp + express[i]; } それ以外 { if (this.checkShuZi2(express[i])) { //iが数値の場合 temp = temp + express[i]; } それ以外 { (温度長さ>0)の場合{ if (express[i] == ".") { temp = temp + express[i]; } それ以外 { this.data.calc2.strList.push(parseFloat(temp)); 温度 = ''; this.data.calc2.strList.push(express[i]); } } それ以外 { temp = temp + express[i]; } } } } // 最後までループして、temp に数字があるかどうかを確認し、ある場合はそれを追加します。if (temp.length > 0 && this.checkShuZi(temp.substring(temp.length - 1))) { this.data.calc2.strList.push(parseFloat(temp)); 温度 = ''; } }, //顧客によるクリアキー入力を処理する handleClear() { this.data.calc2.str = ''; this.data.calc2.strList.length = 0; this.data.calc2.strListP.length = 0; this.data.calc2.list.length = 0; this.data.calc2.count.length = 0; this.data.calc2.minusFlag = 0; this.setData({ 急行: ''、 結果: '' }); }, //顧客の戻るキー入力を処理する handleDelete() { that = this とする; str = that.data.calc2.str とします。 (文字列の長さ>0)の場合{ str = str.substring(0, str.length - 1); that.data.calc2.str = str; that.setData({ 表現: str, }); } それ以外 { 戻る; } }, //演算子かどうかを判断します(ドットを含む、式を整理するときに使用します。繰り返し入力することはできません) checkFuHao(入力) { if (入力 == "-" || 入力 == "+" || 入力 == "÷" || 入力 == "%" || 入力 == "×" || 入力 == ".") { true を返します。 } それ以外 { false を返します。 } }, //演算子かどうかを判定する(ピリオドなし) checkFuHao2(入力) { if (入力 == "-" || 入力 == "+" || 入力 == "÷" || 入力 == "%" || 入力 == "×") { true を返します。 } それ以外 { false を返します。 } }, //数値かどうかを判定する checkShuZi(input) { 入力 == "0" || 入力 == "1" || 入力 == "2" || 入力 == "3" || 入力 == "4" || 入力 == "5" || 入力 == "6" || 入力 == "7" || 入力 == "8" || 入力 == "9") { true を返します。 } それ以外 { false を返します。 } }, // 数値かどうかを判定します(式変換インフィックスメソッドで使用される . 記号を含む) checkShuZi2(入力) { 入力 == "0" || 入力 == "1" || 入力 == "2" || 入力 == "3" || 入力 == "4" || 入力 == "5" || 入力 == "6" || 入力 == "7" || 入力 == "8" || 入力 == "9" || 入力 == ".") { true を返します。 } それ以外 { false を返します。 } }, //文字列に新しい文字を追加します(変数フラグを変更するかどうかを決定するために直接追加します) addStr(入力) { this.data.calc2.str = this.data.calc2.str + 入力; if (this.checkFuHao(入力)) { this.data.calc2.flag = 1; //フラグビットを1に設定する } それ以外 { this.data.calc2.flag = 0; } this.setData({ 表現: this.data.calc2.str }); }, wxss /* ページ/インデックス/collect-money/collect-money.wxss */ ページ { 背景色: #f8f8f8; } .ボトムハンドル{ 高さ: 100rpx; 幅: 100%; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 } .fixation-box { 位置: 固定; 下部: 0; 幅: 750rpx; } .sweep-コード検証{ 背景: #fff; 上境界線: 1rpx 実線 #e3e3e3; 幅: 220rpx; 色: #333; } .artificial-collection、.sweep-code-verification { 高さ: 100%; ディスプレイ: フレックス; flex-direction: 列; アイテムの位置を中央揃えにします。 フォントサイズ: 24rpx; コンテンツの中央揃え: 中央; } .人工コレクション { 背景: #f3b055; 幅: 248rpx; 色: #fff; } .支払いコード{ 背景画像: 線形グラデーション(203度, #6f6f6f 0%, #3c3c3c 96%); フレックス: 1; フォントサイズ: 34rpx; 色: #fff; テキスト配置: 中央; 行の高さ: 100rpx; } .sweep-code-verification イメージ { 幅: 40rpx; 高さ: 40rpx; } .artificial-collection画像{ 幅: 40rpx; 高さ: 40rpx; } .計算機ボックス{ 背景色: #fff; } .calculator-line { ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 } .boxtn { 幅: 25%; 高さ: 154rpx; 左境界線: なし; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; } .calculator-box .calculator-line:最後の子 { 下部境界線: なし; } .calculator-line { ボーダー下部: 1rpx 実線 #dedede; } .btn1、.btn2 { 右境界線: 1rpx 実線 #dedede; } .btn2 { 幅: 50%; } 。等しい { 背景: #f3b055; フォントサイズ: 61rpx; 色: #fff; } .num { フォントサイズ: 60rpx; 色: #000; } 。クリア { フォントサイズ: 48rpx; 色: #f3b055; } .パーセント{ フォントサイズ: 60rpx; 色: #000; } .チャージコンテンツ{ 背景: #fff; 境界線の半径: 24rpx; 幅: 540rpx; ディスプレイ: フレックス; flex-direction: 列; アイテムの位置を中央揃えにします。 } .charge-title { 背景: #f3b055; 境界線の半径: 12px 12px 0 0; 幅: 100%; 高さ: 92rpx; フォントサイズ: 34rpx; 行の高さ: 92rpx; テキスト配置: 中央; 色: #fff; } .チャージ-マネー{ フォントサイズ: 60rpx; 色: #333; 行の高さ: 84rpx; 上マージン: 35rpx; } .charge-propmt { フォントサイズ: 28rpx; 色: #999; 行の高さ: 42rpx; パディング下部: 40rpx; } .charge-btn { ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 高さ: 100rpx; 上境界線: 1rpx 実線 #ddd; 幅: 100%; } .charge-cancel、.charge-confirm { フレックス: 1; テキスト配置: 中央; 行の高さ: 100rpx; フォントサイズ: 34rpx; } .チャージキャンセル{ 色: #999; 右境界線: 1rpx 実線 #ddd; } .請求確認{ 色: #f3b055; } .成功したコンテンツ{ 背景: #fff; 境界線の半径: 24rpx; 幅: 540rpx; ディスプレイ: フレックス; flex-direction: 列; アイテムの位置を中央揃えにします。 } .成功アイコン{ 幅: 120rpx; 上マージン: 45rpx; 高さ: 120rpx; } .成功タイトル{ フォントサイズ: 34rpx; 色: #333; 行の高さ: 42rpx; パディング: 30rpx 0; フォントの太さ: 600; } .clear-icon { 幅: 80rpx; 高さ: 80rpx; } .calculate-box { 位置: 固定; 上: 0; 下部: 875rpx; 幅: 100%; ディスプレイ: フレックス; flex-direction: 列; align-items: flex-end; パディング: 0 50rpx; } .結果番号{ フォントサイズ: 88rpx; 色: #333; 行の高さ: 124rpx; } .calculate-txt { フォントサイズ: 60rpx; 色: #333; 行の高さ: 84rpx; 上マージン: 自動; 単語折り返し: 単語を区切る; テキスト配置: 右; 単語区切り: 全区切り; テキストオーバーフロー: -o-ellipsis-lastline; オーバーフロー: 非表示; テキストオーバーフロー: 省略記号; ディスプレイ: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: 垂直; } .サスペンドボックス{ 高さ: 64rpx; 背景色: rgba(0, 0, 0, .5); 位置: 固定; 上: 70rpx; 左: 0; 色: #fff; ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 フォントサイズ: 24rpx; パディング: 0 20rpx; 境界線の半径: 0 100rpx 100rpx 0; zインデックス: 9; } .close-suspend{ 幅: 30rpx; 高さ: 30rpx; } 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL DISTINCTの基本実装原理の詳細な説明
ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージョンと一致し...
Angular Cookie の読み取りおよび書き込み操作のコードは次のようになります。 var a...
MySQL は、異なるユーザーに異なる権限を割り当てることができるマルチユーザー管理データベースであ...
目次アプリを登録するときに何をすればよいですか?ページを登録するときに通常何をする必要がありますか?...
Kubernetes は面白そうだったので(ギリシャ人なら名前に問題があると思うでしょうが)、ずっと...
最近、イントラネットポータルを修正していたときに、フィルターを使用する必要がある箇所に遭遇しました。...
1. コマンドの紹介seq (シーケンス) コマンドは、指定されたステップ サイズに従って、開始番号...
開発においては、一覧から詳細ページにジャンプし、また詳細ページに戻る際に一覧ページの状態(スクロール...
1. はじめにMYSQL の MDL ロックは常に頭痛の種でした。ロックについて話すとき、通常は I...
mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...
序文この記事では主にMySQLのメモリ使用量に関する関連コンテンツを紹介し、皆さんの参考と学習のため...
コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...
tar バックアップ システム sudo tar cvpzf backup.tgz --exclud...
この記事では、例を使用して MySQL トリガーの作成と使用について説明します。ご参考までに、詳細は...
以下に記録されているように、WIN10システムにMYSQLをダウンロードしてインストールするための詳...