收藏
回答

小程序做IM系统,接收到消息后,重绘dom,然后导致input输入键盘被打断

做一个IM系统,上面是聊天区域展示,下面是输入框。

1、点击输入框,调起键盘,然后开始输入

2、输入的过程中接收到了一条消息,渲染展现

3、正在输入的键盘被强行收起。


现在是所有手机都是这样无论什么版本。只要接收到消息就会被打断input输入,收起键盘。

有解法吗?

现在input已经有key了。

回答关注问题邀请回答
收藏

2 个回答

  • 祺爸💎
    祺爸💎
    2019-04-11

    我试了一下我做的IM,并没有这个问题

    2019-04-11
    有用 1
    回复 4
    • 随风lin
      随风lin
      2019-04-11

      我也遇到楼主的情况了,可以详细说说您那边怎么实现的吗?

      2019-04-11
      回复
    • Face.
      Face.
      2019-04-11

      我的wxml这样的

      <view class="page-body">
          <view bindtap="closeEmoji" class="page-section tc">
              <live-player class="{{fullScreenFlag?'horizontal':'vertical'}}" id="player" orientation="{{orientation}}" src="{{url}}" bindstatechange="statechange">
                  <cover-view class="errorText">
                      {{error}}
                  </cover-view>
                  <cover-view scroll-top="{{scrolltop}}" wx:if="{{messageShow&&!fullScreenFlag}}" id="msgList" class="messageList">
                      <cover-view class="messageContent">
                          <cover-view class="messageItem" wx:for="{{msgList}}">
                              <cover-view class="messageText" wx:if="{{item.msgType=='TEXT'||item.msgType=='EMOJI'}}">
                                  <cover-view class="messageTextItem messagebody">{{item.body}}</cover-view>
                              </cover-view>
                          </cover-view>
                      </cover-view>
                  </cover-view>
              </live-player>
              <view  wx:if="{{!fullScreenFlag}}" class="operate">
                  <input wx:key="send" wx:if="{{messageShow}}" bindconfirm="sendText" confirm-type='send' value="{{text}}" placeholder="跟主播聊点什么?" class="textInput" />
                  <image wx:if="{{!fullScreenFlag}}" bindtap="fullScreen" src="./img/max.png" class='full_img' ></image>
              </view>
          </view>
      </view>


      js如下:

      renderMsg() {
        let _this = this;
        let msgList = JSON.parse(JSON.stringify(_this.data.msgList));
        let saveList = JSON.parse(JSON.stringify(_this.data.saveList));
        if(saveList.length==0){
          return;
        }else if(saveList.length<5){
          msgList.concat(saveList);
          saveList = []
        }else{
          let addList = saveList.splice(0,5);
          msgList.concat(addList);
        }
          if (msgList.length > 100) {
              msgList.splice(msgList.length-100, msgList.length);
          }
          _this.setData({
            msgList: msgList
          },()=>{
            var query = wx.createSelectorQuery();
            query.select('.messageContent').boundingClientRect(function (rect) {
              _this.setData({
                scrolltop: rect.height>160?rect.height-160:0
              })
            }).exec();
          });
      },



      msgList是从websocket里面获取消息后把最新的push进去的。

      2019-04-11
      回复
    • 祺爸💎
      祺爸💎
      2019-04-11回复Face.

      我没用live-player,cover-view

      2019-04-11
      回复
    • Face.
      Face.
      2019-04-11回复祺爸💎

      这块现在很苦恼。不知道怎么搞。

      2019-04-11
      回复
  • 疯狂的小辣椒
    疯狂的小辣椒
    2019-04-11

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-04-11
    有用
    回复 4
    • 随风lin
      随风lin
      2019-04-11回复Face.

      问题解决了吗?怎么处理的?

      2019-04-11
      回复
    • 黄思程
      黄思程
      2019-04-15回复Face.

      你这个代码怎么重现?

      2019-04-15
      回复
    • Face.
      Face.
      2019-04-16回复黄思程

      找到原因了 是因为用了动画

      2019-04-16
      回复
    • .
      .
      2020-01-03
      老铁最后怎么处理的?我也遇到了同样的问题
      2020-01-03
      回复
登录 后发表内容