zoukankan      html  css  js  c++  java
  • 【daydayup】ceshuChat

    时时当勉励,岁月不待人。珍惜时间伐~
    先看看项目运行的效果

    这个是在本地环境打开了两个8080端口进行模拟运行的。
    先放下作者的开源地址:https://github.com/ceshu/ceshuChat
    这个项目要首先运行服务端,服务端是基于node.js的socket.io,大多数实时聊天系统通常基于 socket 来构建的。
    服务器端的代码为
    package.json中只有socket.io一个插件

    {
      "dependencies": {
        "socket.io": "^1.7.1"
      }
    }
    

    在index.js引入socket.io连接客户端
    代码为

    //app.js
    var io = require('socket.io').listen(3000)
    io.on('connection', function (socket) {
    	console.log("客户端连接成功!")
    	socket.on('send', function (data) {
    		socket.broadcast.emit('receive', { "user": socket.id, "data": data })
    	})
    })
    

    接下来我们来看客户端的代码

    在vue+socket实现消息推送,后台已设定好socket消息,首先在vue项目中引入socket。在npm下载socket。

    npm install vue-socket.io
    

    客户端的index.html中引入socket.io.js

    <!DOCTYPE html>
    <html>
    
    	<head>
    		<meta charset="utf-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
    		<meta name="apple-mobile-web-app-capable" content="yes">
    		<meta name="apple-mobile-web-app-status-bar-style" content="black">
    		<title>ceshuChat客户端</title>
    	</head>
    	<script src="http://localhost:3000/socket.io/socket.io.js"></script>
    
    	<body>
    		<div id="app"></div>
    	</body>
    
    </html>
    

    接下来看main.js的代码
    main.js在入口中都引入了socket,以及Framework7Vue

    //main.js
    import Vue from 'vue'
    import VueSocketio from 'vue-socket.io'
    import Framework7 from 'framework7'
    import Framework7Vue from 'framework7-vue'
    import Framework7Theme from 'framework7/dist/css/framework7.ios.min.css'
    import Framework7ThemeColors from 'framework7/dist/css/framework7.ios.colors.min.css'
    import AppStyles from './css/app.css'
    import Routes from './routes.js'
    import App from './app'
    Vue.use(VueSocketio, 'http://localhost:3000')
    Vue.use(Framework7Vue)
    
    new Vue({
      el: '#app',
      template: '<app/>',
      framework7: {
        root: '#app',
        routes: Routes,
      },
      components: {
        app: App
      }
    });
    
    

    看App.vue入口文件

    <template>
    	<div id="app">
    		<f7-statusbar></f7-statusbar>
    		<f7-views>
    			<f7-view id="main-view" navbar-through :dynamic-navbar="true" main>
    				<f7-navbar v-if="$theme.ios">
    					<f7-nav-center sliding>ceshuChat客户端</f7-nav-center>
    					</f7-nav-right>
    				</f7-navbar>
    				<f7-pages>
    					<f7-page>
    
    						<f7-messages>
    							<f7-message v-for="message in messages" :text="message.text" :date="message.date" :name="message.name" :avatar="message.avatar" :type="message.type" :day="message.day" :time="message.time">
    							</f7-message>
    						</f7-messages>
    						<f7-messagebar placeholder="请输入..." send-link="发送" @submit="onSubmit"></f7-messagebar>
    
    					</f7-page>
    				</f7-pages>
    			</f7-view>
    		</f7-views>
    
    	</div>
    </template>
    
    <script>
    	export default {
    		data: function() {
    			return {
    				messages: []
    			}
    		},
    		sockets: {
    			connect: function() {},
    			customEmit: function(val) {}
    		},
    		created() {
    			this.$options.sockets.receive = (content) => {
    				this.messages.push({
    					name: content.user,
    					avatar:content.data.avatar,
    					text: content.data.text,
    					date: content.data.sendDate,
    					type: 'received',
    				})
    			}
    		},
    		methods: {
    			onSubmit: function(text, clear) {
    				if(text.trim().length === 0) return
    				let sendDate = (function() {
    					let now = new Date();
    					let hours = now.getHours();
    					let minutes = now.getMinutes()
    					let seconds = now.getSeconds();
    					return hours + ':' + minutes + ':' + seconds
    				})()
    				let avatar = require('./img/avatar.png')
    				let sendEmit = {
    					"text": text,
    					"avatar": avatar,
    					"sendDate": sendDate,
    				}
    				this.$socket.emit('send', sendEmit)
    				this.messages.push({
    					avatar: avatar,
    					text: text,
    					date: sendDate
    				})
    				clear()
    			}
    		}
    	}
    </script>
    <style>
    
    </style>
    

    先UI效果

    这个效果的实现还挺有意思的。

  • 相关阅读:
    10个用jQuery实现图片幻灯片/画廊效果和源码
    老赵面试题参考答案(二)
    C#的显式接口和隐式接口
    老赵面试题参考答案(三)
    C#中的参数传递:值类型(value type)和引用类型(reference type)
    word转换成html的方法
    老赵面试题参考答案(四)
    五个Metro UI 风格的网页设计
    老赵面试题参考答案(六)
    概要设计怎么写?
  • 原文地址:https://www.cnblogs.com/smart-girl/p/11354919.html
Copyright © 2011-2022 走看看