Vue implementiert Multi-Grid-Eingabefeld auf mobilem Endgerät

Vue implementiert Multi-Grid-Eingabefeld auf mobilem Endgerät

Vor Kurzem hat das Unternehmen die Anforderung gestellt, den Vorgang der h5-Seite abzuschließen, wie in der folgenden Abbildung dargestellt.

Da im Internet nicht viele Räder verfügbar waren, habe ich selbst eines gebaut. Kommen wir ohne weitere Umschweife direkt zum Code.

<div Klasse="verify-tel">
    <h1>SMS-Verifizierung</h1>
    <h2>SMS-Verifizierung</h2>
    <div>
        <input ref="pwd" :maxlength="ziffern.länge" v-model="msg" style="position: absolute;z-index: -1;opacity: 0"/>
        <ul Klasse="pwd-wrap" @click="Fokus">
            <li v-for="(Element, Schlüssel) in Ziffern" :style="{'margin-right': (100-10*Ziffern.Länge)/(Ziffern.Länge-1)+'%','Breite':'10%'}" >
                <span v-if="msgLength > Schlüssel">{{msg.substring(Schlüssel,Schlüssel+1)}}</span>
            </li>
        </ul>
    </div> 
</div>

CSS-Teil (der Stilinhalt ist zu kompliziert, bitte überspringen Sie die Änderung)

html,Text{
    Breite: 100 %;
    Höhe: 100%;
    Hintergrund: #fbf9fe;
  }
  .verify-tel{
    Hintergrundfarbe: #f9f9f9;   
    Rand: 0 30px;
    >p{
      Farbe: rot;
      Schriftstärke: fett;
      Rand oben: 40px;
      Rand unten: 30px;
    }
    >h1{
      Schriftstärke: 400;
      Rand unten: 0;
    }
    >h2{
      Rand oben: 0;
      Schriftstärke: 400;
      Schriftgröße: 14px;
      Farbe: #858585;
    }
    .Eingabefeld{
      Rand oben: 30px;
      >Eingabe{
        Breite: 10%;
        Rand: keiner;
        Rahmen unten: 1px durchgehend grau;
        Hintergrundfarbe: #f9f9f9;
        Textausrichtung: zentriert;
        Rand rechts: 18 %;
        Schriftgröße: 35px;
        &:Fokus{
          Rahmen unten: 1px durchgehendes tiefes Himmelblau;
        }
        &:letzter-vom-Typ{
          Rand rechts: 0 !wichtig;
        }
      }
    }
    .btn-box{
      >Schaltfläche{
        Höhe: 40px;
        Rand: 1px durchgezogen #4e8cee;
        Farbe: #4e8cee;
        Hintergrundfarbe: weiß;
        Rahmenradius: 4px;
        Breite: 30%;
        &:letzter-vom-Typ{
          schweben: rechts;
          Breite: 65 %;
          Höhe: 40px;
          Farbe: weiß;
          Hintergrundfarbe: RGB (78,140,238);
          Rahmenradius: 4px;
        }
      }
    }
  }
  .pwd-wrap{
    Polsterung links: 0;
    Breite: 100 %;
    Höhe: 44px;
    Polsterung unten: 1px;
    Rand: 0 automatisch;
    Anzeige: Flex;
    Anzeige: -webkit-box;
    Anzeige: -webkit-flex;
    Cursor: Zeiger;
    Rand: keiner;
    Hintergrundfarbe: #f9f9f9;
  }
  .pwd-wrap li{
    Listenstiltyp: keiner;
    Textausrichtung: zentriert;
    Zeilenhöhe: 44px;
    -WebKit-Box-Flex: 1;
    biegen: 1;
    -webkit-flex: 1;
    Rand: keiner;
    Rahmen unten: 1px, durchgehend schwarz;
    Hintergrundfarbe: #f9f9f9;
    &:letzter-vom-Typ{
      Rand rechts: 0 !wichtig;
    }
    >spanne{
      Schriftgröße: 20px;
    }
  }
  .pwd-wrap li:letztes-Kind{
    Rand rechts: 0;
  }
  .pwd-wrap li i{
    Höhe: 10px;
    Breite: 10px;
    Randradius: 50 %;
    Hintergrund: #000;
    Anzeige: Inline-Block;
  }

js Teil des Codes

<Skript>
  Standard exportieren{
    Daten(){
      zurückkehren {
        Seite: 0, // 1 ist für SMS-Verifizierungsziffern: ['','','','','',''], // Eingabefeld-Ziffernsteuerung, wie viele „Eingabefelder“ können hier konfiguriert werden
        Nachricht:'',
        msgLänge:0,
      }
    },
    Methoden:{
      //Schnittstellenfunktion zur Überprüfung der Mobiltelefonnummer verifyTels:async function () {
        versuchen{
        }fangen(e){
          console.log(e)
        }
      },
      //Dem Eingabefeld den Fokus geben focus(){
        dies.$refs.pwd.focus(); 
      },
    },
    vorMount:Funktion () {
        //Da meine geschäftlichen Anforderungen mehrere Seiten erfordern und Ziffern von der übergeordneten Komponente übertragen werden, verstecke ich diese und es bleibt nur eine Codezeile übrig.
        diese.seite=1;
    },
    betrachten:
      msg(aktuellerWert){
        //Überwachen Sie die Eingabelänge. Wenn die Eingabe vollständig ist, rufen Sie automatisch die Überprüfungsschnittstellenfunktion auf, if(curVal.trim().length===this.digits.length){
           dies.verifyTels(); 
        }
        this.msgLength = aktuelleVal.Länge;
      },
      'Seite':{
        handler:Funktion (neuerWert, alterWert) {
          wenn(alterWert==0&&neuerWert==1){
            //Wenn die Seite zum ersten Mal aufgerufen wird, wird der Fokus automatisch erhalten. Dies kann optimiert werden.
            Dies.Timer = setTimeout(()=>{this.$refs.pwd.focus()},500);
          }
        },
        tief:wahr
      }
    },
    vorZerstören:Funktion () {
      : LöscheTimeout(diesen.Timer);
    }
  }
</Skript>

Bei Fragen stehe ich Ihnen gerne zur Korrektur zur Verfügung. Bequem für jedermann zu verwenden

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Probleme bei der Implementierung des IP-Eingabefelds auf der mobilen Seite des Vue-Projekts
  • Vue2.0 implementiert die Echtzeit-Abruf- und Aktualisierungslistenfunktion des mobilen Eingabefelds

<<:  Tutorial zu HTML-Tabellen-Tags (36): Hintergrundfarbattribut für Tabellenkopfzeilen BGCOLOR

>>:  PHP-bezogene Pfade und Änderungsmethoden in der Ubuntu-Umgebung

Artikel empfehlen

Implementierungsprinzip und Nutzungsanalyse des Apache Bench-Stresstest-Tools

1: Durchsatz (Anfragen pro Sekunde) Eine quantita...

Zwei Lösungen für das 404-Problem beim Aktualisieren des Vue-Paket-Upload-Servers

1: Nginx-Serverlösung, ändern Sie die .conf-Konfi...

Erzielen Sie mit reinem CSS3 in wenigen einfachen Schritten einen 3D-Flip-Effekt

Als Pflichtkurs für Frontend-Entwickler kann CSS3...

So installieren Sie den Chrome-Browser auf CentOS 7

Dieser Artikel beschreibt, wie Sie den Chrome-Bro...

Verwenden Sie die vertikale Ausrichtung, um Eingabe und Bild auszurichten

Wenn Sie Eingabe und Bild in dieselbe Zeile setzen...

So teilen Sie Daten in MySQL-Tabellen und -Datenbanken auf

Inhaltsverzeichnis 1. Vertikales (längsseitiges) ...

So zeigen Sie Bildinformationen in Docker an

In diesem Artikel müssen wir lernen, wie man Bild...

Eine ausführliche Zusammenfassung der Überlegungen zu MySQL-Zeiteinstellungen

Existiert die Zeit wirklich? Manche Menschen glau...

So implementieren Sie die Fernzugriffskontrolle in Centos 7.4

1. SSH-Remoteverwaltung SSH ist ein sicheres Kana...

Beispiele für Clearfix und Clear

In diesem Artikel wird hauptsächlich die Verwendun...