この記事の内容は、ミニ プログラム コンポーネントに関するものです。チャット セッション コンポーネントの概要 (コード付き) を必要とする友人が参考になれば幸いです。
シナリオ
オンラインカスタマーサービスのチャット会話などに使用します
1. 円をレイアウトします
1. 三角矢印
26rpx*26rpx の長方形を描画し、45 度回転して非表示にします半分、バブル上に直角三角形を形成します。
<!-- 画三角箭头 --> <view class="triangle" style="{{item.myself == 1 ? 'right: 140rpx; background: #7ECB4B' : 'left: 140rpx;'}}"></view> /* 三角箭头 */ .body .triangle { background: white; width: 20rpx; height: 20rpx; margin-top: 26rpx; transform: rotate(45deg); position: absolute; }
2. Flex-flow は、フローの方向を変更し、それぞれ ['row' | 'row-reverse'] を取り、相手が送信したメッセージのアバターが左側にくるようにします。自分が送ったメッセージのアバターが右側にあります。
<view class="body" style="flex-flow: {{item.myself == 0 ? 'row' : 'row-reverse'}}">
3. 押して話しかけると、フローティングレイヤーが水平方向と垂直方向に中央に配置されます
オプション1、JS手動計算
data: { hud_top: (wx.getSystemInfoSync().windowHeight - 150) / 2, hud_left: (wx.getSystemInfoSync().windowWidth - 150) / 2, } <view class="hud-container" wx:if="{{status != state.normal}}" style="top: {{hud_top}}px; left: {{hud_left}}px;">
オプション2、純粋なCSS
/*悬浮提示框*/ .hud-container { position: fixed; width: 150px; height: 150px; left: 50%; top: 50%; margin-left: -75px; margin-top: -75px; }
比較後、オプション2の方がオプション1より優れています
JS句読点1. タッチイベントを使用すると、上にスワイプして音声入力をキャンセルできます
押すと保留状態になり、一定の距離を超えて上にスワイプするとキャンセルプロンプトが表示されます。それを超えないように上にスワイプして、放して送信します。
touchStart: function (e) { // 触摸开始 var startY = e.touches[0].clientY; // 记录初始Y值 this.setData({ startY: startY, status: this.data.state.pressed }); }, touchMove: function (e) { // 触摸移动 var movedY = e.touches[0].clientY; var distance = this.data.startY - movedY; // console.log(distance); // 距离超过50,取消发送 this.setData({ status: distance > 50 ? this.data.state.cancel : this.data.state.pressed }); }, touchEnd: function (e) { // 触摸结束 var endY = e.changedTouches[0].clientY; var distance = this.data.startY - endY; // console.log(distance); // 距离超过50,取消发送 this.setData({ cancel: distance > 50 ? true : false, status: this.data.state.normal }); // 不论如何,都结束录音 this.stop(); },
2. メッセージを送信した後、ページの最後までスクロールします
data: { toView: '' } reply: { // ... this.scrollToBottom() }, scrollToBottom: function () { this.setData({ toView: 'row_' + (this.data.message_list.length - 1) }); },
<!--每一行消息条--> <view class="row" wx:for="{{message_list}}" wx:key="" id="row_{{index}}">
関連する推奨事項:
ミニ プログラムとバックグラウンドの間のインタラクションの実装 (コード付き) ミニ プログラムの自動読み込み用の完全なコード以上がミニ プログラム コンポーネント: チャット セッション コンポーネントの概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。