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

So kapseln Sie Paging-Komponenten manuell in Vue3.0

In diesem Artikel wird der spezifische Code der m...

Grundlegender Installationsprozess von mysql5.7.19 unter winx64 (Details)

1. Herunterladen https://dev.mysql.com/downloads/...

Verwendung des Vuex-Namespace

Inhaltsverzeichnis Da Vuex einen einzelnen Zustan...

Untersuchung der Wirkung der durch JS realisierten Seitenseitenleiste

Inhaltsverzeichnis Entdecken Sie: Anwendung von D...

Über React Native, das keine Verbindung zum Simulator herstellen kann

React Native kann native iOS- und Android-Apps ba...

So bereinigen Sie schnell Milliarden von Daten in einer MySQL-Datenbank

Heute habe ich eine Festplattenalarm-Ausnahme erh...

Detailliertes Beispiel für die Blockierung von Flash durch HTML-Elemente

Code kopieren Der Code lautet wie folgt: wmode-Pa...

MySQL-Reihe von Erfahrungszusammenfassungen und Analyse-Tutorials zu NULL-Werten

Inhaltsverzeichnis 1. Testdaten 2. Die Unannehmli...

So erstellen Sie eine TAR-Datei von WSL über Docker

Ich habe kürzlich mit der Remote-Entwicklungsfunk...

Detaillierte Erläuterung des auf Python basierenden MySQL-Replikationstools

Inhaltsverzeichnis 1. Einleitung Zweites Training...

Verwendung des MySQL-Stresstesttools Mysqlslap

1. MySQLs eigenes Stresstest-Tool Mysqlslap mysql...