Vue はチャット ボックスで絵文字を送信する機能を実装します

Vue はチャット ボックスで絵文字を送信する機能を実装します

vueチャットボックスで絵文字を送信し、vueインターフェースで絵文字を送信するための具体的なコードは参考用です。具体的な内容は次のとおりです。

1. メッセージを送信するときに、メッセージが絵文字であるかどうかを判別し、絵文字の種類: 3、内容: [love] としてデータベースに保存します。
2. チャット履歴を取得する際にtype===3を判断して式を処理します。

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

1.テキスト要素.vue

<テンプレート>
  <div class="テキスト要素ラッパー" >
    <div class="テキスト要素">
      <div :class="isMine ? '要素送信' : '要素受信'">
        <p>{{ 日付 }}</p>
        <!-- テキスト -->
        <span>{{ チャットアイテム.content }}</span>
        <span v-if="chatItem.type === 1">{{chatItem.content }}</span>
        <!-- 式 -->
        <img v-else-if="chatItem.type === 3" :src="emojiUrl + emojiMap[chatItem.content]" style="width:25px;height:25px" />
      </div>
      <div :class="isMine ? '送信画像' : '受信した画像'">
        <img :src="chatItem.from_headimg" 幅="40px" 高さ="40px"/>
      </div>
    </div>
  </div>
</テンプレート>

<スクリプト>
  // '../../../untils/decodeText' から decodeText をインポートします
  '../../../untils/common' から { getFullDate } をインポートします
  '../../../untils/emojiMap' から {emojiMap, emojiUrl} をインポートします。

  エクスポートデフォルト{
    名前: 'テキスト要素',
    プロパティ: ['chatItem', 'isMine'],
    データ() {
      戻る {
        絵文字マップ: 絵文字マップ、
        絵文字URL: 絵文字URL,
      }
    },
    計算: {
      // コンテンツリスト() {
      // decodeText(this.chatItem) を返す
      // },
      // タイムスタンプ処理日 () {
        getFullDate を返します(新しい Date(this.chatItem.time * 1000))
      },
    }
  }
</スクリプト>

<スタイルスコープ>
  .テキスト要素ラッパー {
    位置: 相対的;
    最大幅: 360px;
    境界線の半径: 3px;
    単語区切り: 単語区切り;
    境界線: 1px実線rgb(235, 235, 235);
  }

  .テキスト要素 {
    パディング: 6px;
  }

  .要素受信 {
    最大幅: 280px;
    背景色: #fff;
    フロート: 右;
  }
  .受信した画像{
    フロート: 左;
    右パディング: 6px;
  }

  .要素送信{
    最大幅: 280px;
    背景: rgb(5, 185, 240);
    フロート: 左;
  }
  .send-img {
    フロート: 右;
  }
</スタイル>

Vue インターフェースで絵文字を送信する主なアイデアは次のとおりです。

<テンプレート>    
 <section class="ダイアログセクション clearfix">
            <div class="row clearfix" v-for="(item,index) in msgs" :key = index>
                <img :src="item.uid == myInfo.uid ? myInfo.avatar :otherInfo.avatar" :class="item.uid == myInfo.uid ? 'headerleft' : 'headerright'">
                <p :class="item.uid == myInfo.uid ? 'textleft' : 'textright'" v-html="customEmoji(item.content)"></p>
            </div>
        </セクション>
         <div id="emoji-list" class="flex-column" v-if="emojiShow"> //まず、これを使用して絵文字ポップアップウィンドウを表示するかどうかを決定します<div class="flex-cell flex-row" v-for="list in imgs">
                <div class="flex-cell flex-row cell" v-for="リスト内の項目" @click="inputEmoji(item)">
                  <img :src="'./emoji/' + アイテム + '.png'">
                </div>
              </div>
            </div>
</テンプレート>
<スクリプト>
import { sendMsg } from "@/ws"; //これは長い接続です import _ from "lodash"; //これはjsの非常に強力なライブラリです import eventBus from '@/eventBus' //これは子と親の間で渡されるパブリックファイルです console.log(emoji)
エクスポートデフォルト{
  データ() {
    this.imgs = _.chunk(emoji, 6) // これは、lodash ライブラリの chunk メソッドを呼び出して、6 つの要素を配列に分割します。これは、絵文字配列内の 2 次元配列にすぎません。 return {
      emojiShow: false // 最初は、クリック ボタンはデフォルトで表示されません。クリック ボタンを表示するには、@click='emojiShow=emojiShow' と記述します。};
  },
  メソッド: {
    customEmoji(text) { //この関数は、渡された名前を画像に変換するためにサーバーによって使用されます。 return text.replace(/\[([A-Za-z0-9_]+)\]/g, '<img src="./emoji/$1.png" style="width:30px; height:30px;">')
    },
    入力絵文字(pic) {
      this.content += `[${pic}]` //渡された名前は画像に変換されます}
};
</スクリプト>
<スタイルスコープ>
@import '../../assets/css/dialogue.css';

#絵文字リスト {
  高さ: 230px;
  背景: #fff;
}
#絵文字リスト.セル{
  行の高さ: 13vh;
  右境界線: 1rpx 実線 #ddd;
  ボーダー下部: 1rpx 実線 #ddd;
}
.flex-row {
  ディスプレイ: フレックス;
  flex-direction: 行;
  コンテンツの中央揃え: 中央;
  アイテムの位置を中央揃えにします。
}
.flex-column {
  ディスプレイ: フレックス;
  flex-direction: 列;
  コンテンツの中央揃え: 中央;
  アイテムの位置を揃える: ストレッチ;
}
.flex-セル{
  フレックス: 1;
}
.セル画像{
  幅: 35px;
  高さ: 35px;
}
</スタイル>

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

以下もご興味があるかもしれません:
  • Vue2ベースのモバイルQQを模倣したシングルページアプリケーション機能(チャットボットへのアクセス)

<<:  Zabbixで監視する必要があるホストを追加するための詳細な手順

>>:  Nginx インストール エラーの解決方法

推薦する

SSDストレージを有効にしたMySQLインスタンスの詳細な説明

SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...

データページング効果を実現する js オブジェクト

この記事の例では、データのページング効果を実現するためのjsオブジェクトの具体的なコードを参考までに...

MySQL 5.6 圧縮パッケージのインストール方法

MySQL には、msi インストールと zip 解凍の 2 つのインストール方法があります。 zi...

MySQL マスタースレーブ同期における server-id の例の詳細な説明

序文MySQL クラスターを構築する場合、当然のことながら、データの一貫性を確保するために、データベ...

VueはBaidu Mapsを使用して都市の位置特定を実現

この記事では、参考までに、Baidu Mapsを使用して都市の位置特定を実現するVueの具体的なコー...

Nginx+Apache の動的および静的分離の導入の詳細な例

Nginx の動的および静的分離の概要Nginx は静的処理能力が強力ですが、動的処理能力が不十分で...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

CSS--overflow:hidden のプロジェクト例

以下は、私のプロジェクトでこのプロパティを使用する方法の例です。 (1)激しく透明な浮遊コードをコピ...

Vueフレームワークで習得しなければならない重要な知識を学びます

1. Vueとは何かVue は、ユーザー ページを構築するためのプログレッシブ フレームワークです。...

Linux の Makefile とは何ですか? どのように機能しますか?

この便利なツールでプログラムをより効率的に実行およびコンパイルしますMakefile は自動コンパイ...

CSSタグの表示モードの詳細な説明

ラベル表示モード(重要) divタグとspanタグ1. スタイルはまったく同じですが、ラベルが異なり...

検証コードケースのjs実装

この記事の例では、検証コードを実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

Mysql関数呼び出しの最適化の詳細な説明

目次関数呼び出しの最適化関数呼び出しの最適化MySQL 関数は、内部的に決定論的または非決定論的とし...

Linux での MySQL データベースのアンインストール

Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...