返回顶部
首页 > 资讯 > 精选 >vue基于websocket如何实现智能聊天及吸附动画效果
  • 162
分享到

vue基于websocket如何实现智能聊天及吸附动画效果

2023-07-02 15:07:43 162人浏览 泡泡鱼
摘要

这篇“Vue基于websocket如何实现智能聊天及吸附动画效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue基于WE

这篇“Vue基于websocket如何实现智能聊天及吸附动画效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue基于WEBSocket如何实现智能聊天及吸附动画效果”文章吧。

    1.效果如下:

    vue基于websocket如何实现智能聊天及吸附动画效果

    2.主要功能:

    2.1.基于websocket实现聊天功能,封装了一个socket.js文件

    2.2使用Jwchat插件实现类似QQ、微信电脑端的功能

    (其实并不是很好用,但考虑到后续可能会使用其功能就先用了)

    2.3动画效果(如关闭打开时动画、吸附效果及其他效果)

    3.实现步骤:

    3.1.实现websocket聊天功能

    首先封装了一个socket.js文件;需要主要的是将socket.js中URL修改成自己的

    vue基于websocket如何实现智能聊天及吸附动画效果

    封装的websocke暴露三个接口

    • sendSock用于发送数据,发给后端

    • createWebSocket用于创建连接、接收数据并进行处理

    • closeSock 用于关闭连接

    3.2.在页面中的使用方法: 

    第一步:导入文件

    import { sendSock, createWebSocket, closeSock } from "@/api/socket";

    第二步:初始化时建立websocket连接

    created() {    this.init();    ......  },  methods: {    init() {      createWebSocket(this.global_callback);      ......    },     // websocket的回调函数,msg表示收到的消息    global_callback(msg) {      console.log("收到服务器信息:" + msg);    },  },

    关闭连接

    closeSock();

    发送给后端的方法

    sendSock(xxx)
    var websock = null;var global_callback = null;var serverPort = "80"; // webSocket连接端口var wsuri = "ws://" + window.location.hostname + ":" + serverPort;function createWebSocket(callback) {  if (websock == null || typeof websock !== WebSocket) {    initWebSocket(callback);  } }function initWebSocket(callback) {  global_callback = callback;  // 初始化websocket  websock = new WebSocket(wsuri);  websock.onmessage = function (e) {    websocketonmessage(e);  };  websock.onclose = function (e) {    websocketclose(e);  };  websock.onopen = function () {    websocketOpen();  };  // 连接发生错误的回调方法  websock.onerror = function () {    console.log("WebSocket连接发生错误");     //createWebSocket();啊,发现这样写会创建多个连接,加延时也不行  };}// 实际调用的方法function sendSock(agentData ) {  if (websock.readyState === websock.OPEN) {    // 若是ws开启状态    websocketsend(agentData);  } else if (websock.readyState === websock.CONNECTING) {    // 若是 正在开启状态,则等待1s后重新调用    setTimeout(function () {      sendSock(agentData);    }, 1000);  } else {    // 若未开启 ,则等待1s后重新调用    setTimeout(function () {      sendSock(agentData);    }, 1000);  }}function closeSock() {  websock.close();}// 数据接收function websocketonmessage(msg) {  // console.log("收到数据:"+JSON.parse(e.data));  // console.log("收到数据:"+msg);  // global_callback(JSON.parse(msg.data));  // 收到信息为Blob类型时  let result = null;  // debugger  if (msg.data instanceof Blob) {    const reader = new FileReader();    reader.readAsText(msg.data, "UTF-8");    reader.onload = (e) => {      result = JSON.parse(reader.result);      //console.log("websocket收到", result);      global_callback(result);    };  } else {    result = JSON.parse(msg.data);    //console.log("websocket收到", result);    global_callback(result);  }}// 数据发送function websocketsend(agentData) {  console.log("发送数据:" + agentData);  websock.send(agentData);}// 关闭function websocketclose(e) {  console.log("connection closed (" + e.code + ")");}function websocketOpen(e) {  console.log("连接打开");}export { sendSock, createWebSocket, closeSock };

    4.使用Jwchat插件实现类似QQ、微信电脑端的功能

    vue基于websocket如何实现智能聊天及吸附动画效果

     4.1步骤

      安装依赖

    npm i jwchat -S

      main.js 引入配置 

    //element 必须引入import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.CSS';Vue.use(ElementUI);//聊天室-基于elementimport Chat from 'jwchat';Vue.use(Chat)

      组件中使用

    <template>  <div class="jwchat">    <!--       v-model输入框中的文字String-""      taleList会话内容Array-[]      toolConfig工具栏配置Object-{}      widthJwChat界面框宽度string-750px      heightJwChat界面框高度string-570px      config组件配置Object-{}      scrollType消息自动到低Stringscrollnoroll      showRightBox显示右边内容Booleanfalsetrue      winBarConfig多窗口配置      quickList   自动匹配快捷回复      @enter输入框点击就发送或者回车触发的事件输入的原始数据      @clickTalk点击聊天框列中的用户和昵称触发事件当前对话数据     -->    <JwChat-index      v-model="inputMsg"      :taleList="taleList"      :config="config"      :showRightBox="true"      scrollType="scroll"      :winBarConfig="winBarConfig"      :quickList="config.quickList"      @enter="bindEnter"      @clickTalk="talkEvent"    >      <!-- 窗口右边栏 -->      <JwChat-rightbox :config="rightConfig" @click="rightClick" />      <!-- 快捷回复 -->      <!-- <JwChat-talk :Talelist="talk" :config="quickConfig" @event="bindTalk" /> -->      <!-- 工具栏自定义插槽 -->      <template slot="tools">        <div  @click="toolEvent(12)">          <JwChat-icon type="icon-lishi" title="自定义" />        </div>      </template>    </JwChat-index>  </div></template> <script>const img = "https://www.baidu.com/img/flexible/loGo/pc/result.png";const listData = [    {    date: "2021/03/02 13:14:21",    mine: false,    name: "留恋人间不羡仙",    img: "Https://img0.baidu.com/it/u=3066115177,3339701526&fm=26&fmt=auto&gp=0.jpg",    text: {      system: {        title: "在接入人工前,智能助手将为您首次应答。",        subtitle: "猜您想问:",        content: [          {            id: `system1`,            text: "组件如何使用",          },          {            id: `system2`,            text: "组件参数在哪里查看",          },          {            id: "system",            text: "我可不可把组件用在商业",          },        ],      },    },  },];function getListArr(size) {  const listSize = listData.length;  if (!size) {    size = listSize;  }  let result = [];  for (let i = 0; i < size; i++) {    const item = listData[(Math.random() * listSize) >> 0];    item.id = Math.random().toString(16).substr(-6);    result.push(item);  }  return result;}export default {  components: {},  data() {    return {      // 输入框中的文字      inputMsg: "",      // 会话内容      taleList: [],      // 工具栏配置      tool: {        // show: ['file', 'history', 'img', ['文件1', '', '美图']],        // showEmoji: false,        callback: this.toolEvent,      },      // 组件配置      config: {        img: "https://img1.baidu.com/it/u=2109725846,3376113789&fm=26&fmt=auto&gp=0.jpg",        name: "JwChat",        dept: "最简单、最便捷",        callback: this.bindCover,        historyConfig: {          show: true,          tip: "滚动到顶时候显示的提示",          callback: this.bindLoadHistory,        },        // 自动匹配快捷回复        quickList: [                  { text: "外面的烟花奋力的燃着,屋里的人激情的说着情话", id: 10 },          { text: "假如你是云,我就是雨,一生相伴,风风雨雨;", id: 11 },          {            text: "即使泪水在眼中打转,我依旧可以笑的很美,这是你学不来的坚强。",            id: 12,          },          {            text: " 因为不知来生来世会不会遇到你,所以今生今世我会加倍爱你。",            id: 13,          },        ],      },     };  },  methods: {    // 切换用户窗口,加载对应的历史记录    bindWinBar(play = {}) {      const { type, data = {} } = play;      console.log(play);      if (type === "winBar") {        const { id, dept, name, img } = data;        this.config = { ...this.config, id, dept, name, img };        this.winBarConfig.active = id;        if (id === "win00") {          this.taleList = getListArr();        } else this.taleList = getListArr((Math.random() * 4) >> 0);      }      if (type === "winBtn") {        const { target: { id } = {} } = data;        const { list } = this.winBarConfig;        this.winBarConfig.list = list.reduce((p, i) => {          if (id != i.id) p.push(i);          return p;        }, []);      }    },    // 点击聊天框列中的用户和昵称触发事件    talkEvent(play) {      console.log(play);    },    // 输入框点击就发送或者回车触发的事件    bindEnter(e) {      console.log(e);      const msg = this.inputMsg;      if (!msg) return;      const msgObj = {        date: "2020/05/20 23:19:07",        text: { text: msg },        mine: true,        name: "JwChat",        img: "https://img1.baidu.com/it/u=31094377,222380373&fm=26&fmt=auto&gp=0.jpg",      };      this.taleList.push(msgObj);    },           bindLoadHistory() {      const history = new Array(3).fill().map((i, j) => {        return {          date: "2020/05/20 23:19:07",          text: { text: j + new Date() },          mine: false,          name: "JwChat",          img: "https://img1.baidu.com/it/u=31094377,222380373&fm=26&fmt=auto&gp=0.jpg",        };      });      let list = history.concat(this.list);      this.taleList = list;      console.log("加载历史", list, history);    },        toolEvent(type, plyload) {      console.log("tools", type, plyload);    },    bindCover(event) {      console.log("header", event);    },    rightClick(type) {      console.log("rigth", type);    },  },  mounted() {    this.taleList = getListArr();  },};</script> <style>.jwchat {  height: 100vh;  font-family: Avenir, Helvetica, Arial, sans-serif;  -webkit-font-smoothing: antialiased;  -moz-osx-font-smoothing: grayscale;  text-align: center;  color: #2c3e50;  margin-top: 60px;}</style>

    5.动画效果

    吸附效果

    使用v-show绑定变量控制显示隐藏

     // 吸附效果    xiFu () {      setTimeout(() => {        //10秒后自动隐藏小空间转为吸附效果        this.isMouse = false      }, 5000)    },
    @keyframes move {  0% {    transfORM: translateX(0px) rotateY(20deg);  }  100% {    transform: translateX(1.0417rem) rotateY(180deg);  }} .cssDongHua {  animation: move 2s linear 1s 1 alternate forwards;}//template:class="isMouse ? '' : 'cssDongHua'"        @click="isOpen = !isOpen"        v-show="!isOpen"        @mouseenter="isMouse = true"

    以上就是关于“vue基于websocket如何实现智能聊天及吸附动画效果”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: vue基于websocket如何实现智能聊天及吸附动画效果

    本文链接: https://lsjlt.com/news/342964.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • vue基于websocket实现智能聊天及吸附动画效果
      目录前言:1.效果如下:2.主要功能:2.1.基于websocket实现聊天功能,封装了一个socket.js文件2.2使用Jwchat插件实现类似QQ、微信电脑端的功能2.3动画效...
      99+
      2024-04-02
    • vue基于websocket如何实现智能聊天及吸附动画效果
      这篇“vue基于websocket如何实现智能聊天及吸附动画效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue基于we...
      99+
      2023-07-02
    • 基于websocket如何实现聊天室对话
      这篇文章主要介绍了基于websocket如何实现聊天室对话,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下首先搭建一个node的环境,在app.js中写入以下代码n...
      99+
      2023-06-20
    • 如何使用C#基于WebSocket实现聊天室功能
      这篇文章将为大家详细讲解有关如何使用C#基于WebSocket实现聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ServerHelper:using System;using ...
      99+
      2023-06-29
    • 基于WPF如何实现3D画廊动画效果
      本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接下来想做一个图廊,所以并没有必要用立方体,...
      99+
      2023-07-05
    • Vue如何实现动画效果
      这篇文章主要介绍Vue如何实现动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:1.哪些元素/那些组件适合在那些条件下实现动画效果条件渲染 (使用 v-if)条件展示 ...
      99+
      2024-04-02
    • 如何基于Flutter实现爱心三连动画效果
      这篇文章主要为大家展示了“如何基于Flutter实现爱心三连动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何基于Flutter实现爱心三连动画效果”这篇文章吧。前言我们开始 Flutt...
      99+
      2023-06-29
    • C#如何基于Socket实现多人聊天功能
      这篇文章主要介绍C#如何基于Socket实现多人聊天功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下服务器服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。代码:using ...
      99+
      2023-06-29
    • vue元素如何实现动画过渡效果
      这篇文章将为大家详细讲解有关vue元素如何实现动画过渡效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 在 vue 中,使用 <transition> 标...
      99+
      2024-04-02
    • Vue中如何实现animate过渡动画效果
      这篇文章主要为大家展示了“Vue中如何实现animate过渡动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现animate过渡动画效果”这...
      99+
      2024-04-02
    • 基于CSS3的animation动画属性如何实现轮播图效果
      这篇文章将为大家详细讲解有关基于CSS3的animation动画属性如何实现轮播图效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。animation简介:CSS3的an...
      99+
      2024-04-02
    • C#如何实现聊天窗体以及抖动功能
      本篇内容介绍了“C#如何实现聊天窗体以及抖动功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了C#实现聊天窗体以及抖动的...
      99+
      2023-06-20
    • VUE如何实现单页面切换动画效果
      这篇文章主要介绍VUE如何实现单页面切换动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:// 视图切换动画逻辑 let history ...
      99+
      2024-04-02
    • jQuery如何模拟实现天猫购物车动画效果
      这篇文章主要介绍了jQuery如何模拟实现天猫购物车动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、功能描述: &nbs...
      99+
      2024-04-02
    • 基于iScroll如何实现内容滚动效果
      这篇文章主要介绍基于iScroll如何实现内容滚动效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、iScroll简介iScroll 是一款针对web app使用的滚动控件,它可...
      99+
      2024-04-02
    • 如何基于CSS3的animation属性实现微信拍一拍动画效果
      小编给大家分享一下如何基于CSS3的animation属性实现微信拍一拍动画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!看到最近流行的微信拍一拍功能,复习下...
      99+
      2023-06-08
    • C++基于socket UDP网络编程如何实现聊天室功能
      这篇文章主要介绍C++基于socket UDP网络编程如何实现聊天室功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下0.通信步骤流程图(左:服务器;右:客户端;)1.服务器代码1.1服务器类头文件(CS...
      99+
      2023-06-20
    • 基于JS如何实现漫画中大雨滂沱的效果
      这篇文章主要讲解了“基于JS如何实现漫画中大雨滂沱的效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于JS如何实现漫画中大雨滂沱的效果”吧!演示技术栈最近用canvas有点上瘾,接着上次...
      99+
      2023-07-02
    • vue中如何基于html5实现drag drap的拖放效果
      这篇文章将为大家详细讲解有关vue中如何基于html5实现drag drap的拖放效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 事情是这样的,右边有各种控...
      99+
      2024-04-02
    • vue router如何实现自动判断左右翻页转场动画效果
      这篇文章将为大家详细讲解有关vue router如何实现自动判断左右翻页转场动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一 。首先父页面home.vue:<...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作