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 インストール エラーの解決方法

推薦する

Linux CentOS 6.5 ifconfig が IP を照会できない問題の解決方法

最近、何人かの友人から、仮想マシンに CentOS をインストールした後、ifconfig コマンド...

backgroundImage を使用して画像カルーセルの切り替えを解決する詳細な説明

単一のDOMノードでカルーセルを実装するbackgroundImage を使用すると、複数の画像を追...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...

jQueryはフォーム検証を実装する

jQueryを使用してフォーム検証を実装します。参考までに、具体的な内容は次のとおりです。登録.ht...

JS はシンプルなブロック崩しピンボールゲームを実装します

この記事では、ブロック崩しピンボールゲームを実装するためのJSの具体的なコードを参考までに紹介します...

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

VMware 仮想マシンでの Centos8 ブリッジの静的 IP 設定方法

1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...

Windows サーバー管理におけるセキュリティの考慮事項

ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...

CentOS に Memcached と PHP Memcached 拡張機能をインストールする

高性能分散メモリオブジェクトキャッシュシステムMemcachedについては、別の記事「Windows...

MySQL 8.0 再帰クエリの簡単な使用例

序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...

MySQL SELECT実行順序の簡単な理解

SELECT ステートメントの完全な構文は次のとおりです。 (7)選択 (8) DISTINCT ...

Vueバックグラウンド管理に多言語機能を追加する例

目次1.まず、main.jsページを設定します2. 対応するパスの下で言語パックを構成します。ここに...

MySQL の制限パフォーマンス分析と最適化

1. 結論構文: 制限オフセット、行結論: 同じ行条件では、オフセット値が大きいほど、limitステ...

MySQL で URL タイムゾーンの罠を回避する方法

序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...

Apache ポートに基づいて仮想ホストを作成する例

apache: ポートに基づいて仮想ホストを作成する仮想ホスト(a、b、c)の作成を例に挙げます1)...