Vue implementiert das Senden von Emoticons im Chatfenster

Vue implementiert das Senden von Emoticons im Chatfenster

Der spezifische Code zum Senden von Emoticons im Vue-Chat-Feld und zum Senden von Emoticons in der Vue-Oberfläche dient zu Ihrer Information. Der spezifische Inhalt ist wie folgt

1. Bestimmen Sie beim Senden einer Nachricht, ob es sich bei der Nachricht um ein Emoticon handelt, den Emoticon-Typ: 3, den Inhalt: [Liebe], und speichern Sie sie in der Datenbank
2. Beurteilen Sie beim Abrufen des Chatverlaufs Typ===3 und verarbeiten Sie den Ausdruck.

<img v-else-if="chatItem.type === 3" :src="emojiUrl + emojiMap[chatItem.content]" style="width:25px;height:25px" />

1.textElement.vue

<Vorlage>
  <div Klasse="Textelement-Wrapper" >
    <div Klasse="Textelement">
      <div :class="istMine ? 'element-send' : 'element-received'">
        <p>{{ Datum }}</p>
        <!-- Text -->
        <span>{{ chatItem.content }}</span>
        <span v-if="chatItem.type === 1">{{ chatItem.content }}</span>
        <!-- Ausdruck -->
        <img v-else-if="chatItem.type === 3" :src="emojiUrl + emojiMap[chatItem.content]" style="width:25px;height:25px" />
      </div>
      <div :class="isMine ? 'send-img' : 'received-img'">
        <img: src="chatItem.from_headimg" Breite="40px" Höhe="40px"/>
      </div>
    </div>
  </div>
</Vorlage>

<Skript>
  // decodeText importieren aus '../../../untils/decodeText'
  importiere { getFullDate } von '../../../untils/common'
  importiere {emojiMap, emojiUrl} von '../../../untils/emojiMap'

  Standard exportieren {
    Name: 'TextElement',
    Requisiten: ['chatItem', 'isMine'],
    Daten() {
      zurückkehren {
        emojiMap: emojiMap,
        emojiUrl: emojiUrl,
      }
    },
    berechnet: {
      // Inhaltsliste() {
      // decodeText(dieses.chatItem) zurückgeben
      // },
      // Zeitstempel Verarbeitungsdatum () {
        returniere getFullDate(neues Datum(this.chatItem.time * 1000))
      },
    }
  }
</Skript>

<Stilbereich>
  .text-element-wrapper {
    Position: relativ;
    maximale Breite: 360px;
    Rahmenradius: 3px;
    Worttrennung: Worttrennung;
    Rand: 1px durchgezogenes RGB (235, 235, 235);
  }

  .text-element {
    Polsterung: 6px;
  }

  .element-empfangen {
    maximale Breite: 280px;
    Hintergrundfarbe: #fff;
    schweben: rechts;
  }
  .empfangen-img {
    schweben: links;
    Polsterung rechts: 6px;
  }

  .element-senden {
    maximale Breite: 280px;
    Hintergrund: RGB (5, 185, 240);
    schweben: links;
  }
  .send-img {
    schweben: rechts;
  }
</Stil>

Die Grundidee beim Senden von Emoticons in der Vue-Schnittstelle ist:

<Vorlage>    
 <Abschnitt Klasse="Dialog-Abschnitt Clearfix" >
            <div Klasse = "Zeile Clearfix" v-for = "(Element, Index) in msgs" :Schlüssel = Index>
                <img :src="item.uid == meineInfo.uid ? meineInfo.avatar :otherInfo.avatar" :class="item.uid == meineInfo.uid ? 'headerleft' : 'headerright'">
                <p :class="item.uid == myInfo.uid ? 'textleft' : 'textright'" v-html="customEmoji(item.content)"></p>
            </div>
        </Abschnitt>
         <div id="emoji-list" class="flex-column" v-if="emojiShow"> //Bestimmen Sie hiermit zunächst, ob das Emoji-Popup-Fenster angezeigt werden soll<div class="flex-cell flex-row" v-for="list in imgs">
                <div Klasse="flex-cell flex-row Zelle" v-for="Element in Liste" @click="inputEmoji(Element)">
                  <img :src="'./emoji/' + item + '.png'">
                </div>
              </div>
            </div>
</Vorlage>
<Skript>
import { sendMsg } from "@/ws"; //Dies ist eine lange Verbindung import _ from "lodash"; //Dies ist eine sehr leistungsfähige Bibliothek in js import eventBus from '@/eventBus' //Dies ist eine öffentliche Datei, die zwischen untergeordnetem und übergeordnetem Element übergeben wird console.log(emoji)
Standard exportieren {
  Daten() {
    this.imgs = _.chunk(emoji, 6) //Hiermit wird die Chunk-Methode der lodash-Bibliothek aufgerufen, um die sechs Elemente in ein Array aufzuteilen. Im Emoji-Array handelt es sich dabei lediglich um ein zweidimensionales Array. return {
      emojiShow: false //Zu Beginn wird die Klickschaltfläche standardmäßig nicht angezeigt. Um die Klickschaltfläche anzuzeigen, können Sie @click='emojiShow=emojiShow'} schreiben;
  },
  Methoden: {
    customEmoji(text) { //Diese Funktion wird vom Server verwendet, um den übergebenen Namen in ein Bild umzuwandeln. return text.replace(/\[([A-Za-z0-9_]+)\]/g, '<img src="./emoji/$1.png" style="width:30px; height:30px;">')
    },
    inputEmoji(Bild) {
      this.content += `[${pic}]` //Der übergebene Name wird in ein Bild umgewandelt}
};
</Skript>
<Stilbereich>
@import '../../assets/css/dialogue.css';

#Emoji-Liste {
  Höhe: 230px;
  Hintergrund: #fff;
}
#emoji-Liste .cell {
  Zeilenhöhe: 13vh;
  Rahmen rechts: 1rpx durchgezogen #ddd;
  Rahmen unten: 1rpx durchgezogen #ddd;
}
.flex-Zeile {
  Anzeige: Flex;
  Flex-Richtung: Reihe;
  Inhalt ausrichten: zentriert;
  Elemente ausrichten: zentrieren;
}
.flex-Spalte {
  Anzeige: Flex;
  Flex-Richtung: Spalte;
  Inhalt ausrichten: zentriert;
  Elemente ausrichten: strecken;
}
.flex-Zelle {
  biegen: 1;
}
.cell img {
  Breite: 35px;
  Höhe: 35px;
}
</Stil>

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:
  • Eine Single-Page-Anwendungsfunktion, die mobiles QQ basierend auf Vue2 imitiert (Zugriff auf Chatbot)

<<:  Detaillierte Schritte zum Hinzufügen von Hosts, die Sie in Zabbix überwachen müssen

>>:  Lösung für den ONLY_FULL_GROUP_BY-Fehler in Mysql5.7 und höher

Artikel empfehlen

Grundlegende Befehle für MySQL-Datenbankoperationen

1. Erstellen Sie eine Datenbank: Daten erstellen ...

Apropos ContentType(s) von image/x-png

Dies führte auch dazu, dass PNG-Dateien nicht hoch...

Detaillierte Erklärung der integrierten Methoden des Javascript-Arrays

Inhaltsverzeichnis 1. Array.at() 2. Array.copyWit...

Die häufigsten Fehler beim Schreiben von HTML-Tags

Wir sollten besser aufpassen, denn die HTML-Poliz...

CSS implementiert fünf gängige 2D-Transformationen

2D-Transformationen in CSS ermöglichen es uns, ei...

IE6/7 wird ein Chaos: Problem mit der Höhe leerer Textknoten

Vorwort: Verwenden Sie die Debugleiste, um den Dok...

So zeichnen Sie die Zeitleiste mit Vue+Canvas

In diesem Artikelbeispiel wird der spezifische Co...

HTML 5.1 lernen: 14 neue Features und Anwendungsbeispiele

Vorwort Wie wir alle wissen, gehört HTML5 dem Wor...

Installations- und Verwendungsschritte für vue-amap

Ich habe zuvor die Verwendung des asynchronen Lad...

So umgehen Sie unbekannte Feldnamen in MySQL

Vorwort Dieser Artikel stellt die fünfte Frage vo...

Detaillierte Erklärung des Unterschieds zwischen $router und $route in Vue

Wir verwenden normalerweise Routing in Vue-Projek...

Vue realisiert den gesamten Prozess der Slider-Drag-Verifizierungsfunktion

Rendern Definieren Sie das Skelett, schreiben Sie...

Reflexion und Proxy in Front-End-JavaScript

Inhaltsverzeichnis 1. Was ist Reflexion? 2. Refle...