Vue: implementação da caixa de diálogo de bate-papo

Efeito de conquista: não sei gravar a tela, então mostro com fotos. A função básica da caixa de bate-papo é realizada e alguns detalhes não são totalmente considerados. Você pode enviar fotos ou vídeos quando nenhuma mensagem for digitada e o botão enviar será exibido após a digitação de uma mensagem, mantendo a barra de rolagem na parte inferior da última mensagem.

 Método para realizar:

1. Layout: usando layout elástico, direção flexível: linha reversa; direção flexível: linha;

Para ser compatível com tipos de mensagens mistas, consulte a maioria das caixas de bate-papo, que enviam fotos, vídeos e textos como duas mensagens.

Você também pode usar o Layout Layout da Vant, que será mais simples.

 2. A barra de rolagem está na parte inferior, mostrando as últimas notícias:

scrollToBottom() {
      var itemBox = this.$refs.itemBox;
      itemBox.scrollTop = itemBox.scrollHeight;
},
updated() {
    this.$nextTick(() => {
      this.scrollToBottom();
    });
},

3. A entrada está cheia de espaços e não pode ser enviada. Geralmente, desde que não sejam todos os espaços, os espaços podem ser reservados. Se você pensar com mais cuidado, também pode lidar com a situação em que os espaços mudam de linha. Aqui é um tratamento simples, considerando apenas o caso de todos os espaços:

valor.trim().comprimento

4: Visualizar vídeos e fotos: Recomenda-se usar vant para visualizações de imagens. Não é recomendado usar várias tags de vídeo na mesma página para visualizações de vídeos. Recomenda-se não exceder 3 vídeos, caso contrário, causará o congelamento da página. Recomenda-se usá-los separadamente no projeto Crie uma página de vídeo de visualização, use apenas uma tag de vídeo e carregue o vídeo de visualização diretamente no link.

5: Processe os links nas informações do chat. O chat fornecido pelo back-end deve ser todo strings. Se o link for exibido diretamente como uma string, o clique não irá pular. Você pode usar expressões regulares para adicionar rich text para substituí-lo.

setLinks(text) {
      if (text) {
        const Rexp =
          /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\/=~_|!:,.;]*)[-A-Z0-9+&@#\/%=~_|])/gi;
        return text.replace(Rexp, "<a href='$1' target='_blank'>$1</a>");
      }
    },

6: Finalmente, observe os detalhes de vários estilos

 Palavras longas quebram, e números, inglês, símbolos não quebram, e também há o problema do navegador compactar espaços por padrão

word-break: break-all; //允许在单词内换行
word-wrap: break-word; //在长单词或 URL 地址内部进行换行
white-space: pre-wrap; //解决浏览器空格合并

Basta definir alguns estilos, você pode dar uma olhada em outros usos desses atributos

Acho que você gosta

Origin blog.csdn.net/m0_49623851/article/details/127282956
Recomendado
Clasificación