Vue はモバイル端末にマルチグリッド入力ボックスを実装

Vue はモバイル端末にマルチグリッド入力ボックスを実装

最近、同社は、下図に示すように、h5 ページ操作を完了するという要件を提示しました。

ネットで入手できるホイールがあまりなかったので、自分で作りました。では、これ以上長々とせずに、すぐにコードを見てみましょう。

<div class="verify-tel">
    <h1>SMS認証</h1>
    <h2>SMS認証</h2>
    <div>
        <input ref="pwd" :maxlength="digits.length" v-model="msg" style="position: absolute;z-index: -1;opacity: 0"/>
        <ul class="pwd-wrap" @click="focus">
            <li v-for="(item,key) 数字" :style="{'margin-right': (100-10*digits.length)/(digits.length-1)+'%','width':'10%'}" >
                <span v-if="msgLength > key">{{msg.substring(key,key+1)}}</span>
            </li>
        </ul>
    </div> 
</div>

CSS部分(スタイル内容が複雑すぎるため、変更はスキップしてください)

html,本文{
    幅: 100%;
    高さ: 100%;
    背景: #fbf9fe;
  }
  .verify-tel{
    背景色: #f9f9f9;   
    マージン: 0 30px;
    >p{
      色: 赤;
      フォントの太さ: 太字;
      上マージン: 40px;
      下部マージン: 30px;
    }
    >h1{
      フォントの太さ: 400;
      下マージン: 0;
    }
    >h2{
      上マージン: 0;
      フォントの太さ: 400;
      フォントサイズ: 14px;
      色: #858585;
    }
    .入力ボックス{
      上マージン: 30px;
      >入力{
        幅: 10%;
        境界線: なし;
        border-bottom: 1px のソリッドグレー;
        背景色: #f9f9f9;
        テキスト配置: 中央;
        右マージン: 18%;
        フォントサイズ: 35px;
        &:集中{
          border-bottom: 1px solid deepskyblue;
        }
        &:最後のタイプ{
          右マージン: 0 !重要;
        }
      }
    }
    .btn-ボックス{
      >ボタン{
        高さ: 40px;
        境界線: 1px 実線 #4e8cee;
        色: #4e8cee;
        背景色: 白;
        境界線の半径: 4px;
        幅: 30%;
        &:最後のタイプ{
          フロート: 右;
          幅: 65%;
          高さ: 40px;
          色: 白;
          背景色: rgb(78,140,​​238);
          境界線の半径: 4px;
        }
      }
    }
  }
  .pwd-wrap{
    左パディング: 0;
    幅: 100%;
    高さ: 44px;
    パディング下部: 1px;
    マージン: 0 自動;
    ディスプレイ: フレックス;
    ディスプレイ: -webkit-box;
    ディスプレイ: -webkit-flex;
    カーソル: ポインタ;
    境界線: なし;
    背景色: #f9f9f9;
  }
  .pwd-wrap li{
    リストスタイルタイプ:なし;
    テキスト配置: 中央;
    行の高さ: 44px;
    -webkit-box-flex: 1;
    フレックス: 1;
    -webkit-flex: 1;
    境界線: なし;
    border-bottom:1px 黒一色;
    背景色: #f9f9f9;
    &:最後のタイプ{
      右マージン: 0 !重要;
    }
    >スパン{
      フォントサイズ: 20px;
    }
  }
  .pwd-wrap li:最後の子{
    右境界線: 0;
  }
  .pwd-wrap li i{
    高さ: 10px;
    幅: 10px;
    境界線の半径:50%;
    背景: #000;
    表示: インラインブロック;
  }

jsコードの一部

<スクリプト>
  エクスポートデフォルト{
    データ(){
      戻る {
        page:0, //1 は SMS 認証用です digits:['','','','','','',''], //入力ボックスの数字制御、ここで設定できる「入力ボックス」の数
        メッセージ:''、
        メッセージの長さ:0,
      }
    },
    方法:{
      //携帯電話番号検証インターフェース関数 verifyTels:async function () {
        試す{
        }キャッチ(e){
          コンソール.log(e)
        }
      },
      //入力ボックスにフォーカスを当てる focus(){
        this.$refs.pwd.focus(); 
      },
    },
    beforeMount:関数() {
        //ビジネス ニーズにより複数のページが必要となり、数字は親コンポーネントから送信されるため、これを非表示にして、コードは 1 行のみ残します。
        このページは1ページ目です。
    },
    時計:
      メッセージ(curVal){
        //入力長を監視します。入力が完了したら、検証インターフェース関数を自動的に呼び出します。if(curVal.trim().length===this.digits.length){
           this.verifyTels(); 
        }
        this.msgLength = curVal.length;
      },
      'ページ':{
        ハンドラ:関数 (新しい値、古い値) {
          if(古い値==0&&新しい値==1){
            // 初めてページに入るときに、フォーカスが自動的に取得されます。これは最適化できます。
            this.timer = setTimeout(()=>{this.$refs.pwd.focus()},500);
          }
        },
        深い:本当
      }
    },
    beforeDestroy:関数() {
      タイムアウトをクリアします(this.timer);
    }
  }
</スクリプト>

ご不明な点がございましたら、ご連絡の上修正をお願いいたします。誰でも便利に使える

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue プロジェクトのモバイル側で IP 入力ボックスを実装する際の問題
  • Vue2.0はモバイル入力ボックスのリアルタイム検索と更新リスト機能を実装します

<<:  HTML テーブル タグ チュートリアル (36): テーブル ヘッダーの背景色属性 BGCOLOR

>>:  Ubuntu環境でのPHP関連のパスと変更方法

推薦する

jQueryはショッピングカートの完全な機能を実現します

この記事では、ショッピングカートの完全な機能を実現するためのjQueryの具体的なコードを参考までに...

HTML+CSSは、要素の位置までスクロールして読み込みアニメーション効果を表示します。

要素までスクロールするたびに読み込みアニメーションを追加するにはどうすればよいですか?初期パラメータ...

MySQL ログイン警告問題の解決策

1. はじめにMySQL にログインすると、次のような警告が表示されることがよくあります。警告: コ...

CSS3 マウスホバー遷移ズーム効果

以下は、純粋な CSS で記述された画像マウスホバーズーム効果です。実際、基本原理は非常に単純です。...

src 属性と href 属性の違い

src と href には違いがあり、混同される可能性があります。 src は現在の要素を置き換える...

Mysql の主キー インデックスと非主キー インデックスの違いについて簡単に説明します。

目次インデックスとは何か主キーインデックスと通常のインデックスの違いインデックスにはどのデータ構造が...

オーディオマニアにアピールするオーディオビジュアルLinuxディストリビューション

私は最近、多くの音楽に特化した Linux ディストリビューションの 1 つである Audiovis...

React の国際化 react-intl の使用

React で国際化を実現するにはどうすればよいでしょうか? react-intlプラグインは、Re...

デカルト積原理を使用してMySQLで複数のテーブルをクエリする方法を簡単に説明します。

MySQL マルチテーブルクエリ (直積原理)まず、データが使用するテーブルを決定します。デカルト...

Windows に MySQL 8.0.16 をインストールする手順とエラーの解決方法

1. はじめに: mysql8以降は、これまでよく使われていたバージョンと比べてかなり変更点が大きい...

DockerでNginxサーバーを作成する方法

動作環境: MAC Docker バージョン: Docker version 17.12.0-ce,...

スクロール画像バーを実現するための CSS サンプルコード

一部の Web サイトでは、画像が連続的にスクロールしているのをよく見かけます。この効果は、CSS ...

MySQLクエリ最適化: 100万件のデータに対するテーブル最適化ソリューション

1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...

Windows 64 ビットに MySQL を再インストールするチュートリアル (Zip バージョン、解凍バージョンの MySQL インストール)

MySQLをアンインストールする1. コントロールパネルで、MySQLのすべてのコンポーネントをア...

純粋な CSS3+DIV で小さな三角形の境界線効果を実現するためのサンプル コード

具体的なコードは次のとおりです。 HTMLコードは次のとおりです <div class=&qu...