Socket.io应用之联网拖拽游戏

服务器端代码:

const express=require('express');
const http=require('http');
const sio=require('socket.io');
const app=express();
const server=http.createServer(app);
app.use(express.static(__dirname));
app.get('/',function(req,res){
    res.sendFile(__dirname+"/drag.html");
});
//使用socket.io实现双向通信
const io=sio.listen(server);
io.on('connection',function(socket){
    //socket对象是指当前浏览器和服务器间连接的socket对象
    //每一个客户端连接都有自己的一个socket对象
    //在服务器端,相应客户端的move事件
    socket.on('move',function(data){
        //console.log(data);
        //向其他所有的客户端发送一个moveall事件,传递坐标数据
        socket.broadcast.emit('moveall',data);
    })
});
server.listen(3000,function(){
    console.log('listening inport 3000...')
})

客户端代码:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
	<script src="socket.io.js"></script>
	<style type="text/css">
		#box {100px; height:100px; background:red;position:absolute;}
	</style>
</head>
<body>
	
	<div id="box">
	</div>
	<script type="text/javascript">
		//建立和服务器间的连接
		var socket=io.connect('http://localhost:3000');

		var box=document.getElementById('box');
		//定义全局变量
		var divX=0;//div的横坐标
		var divY=0;//div的纵坐标
		var mouseX=0;//鼠标 横坐标
		var mouseY=0;//鼠标纵坐标
		var sw=false;//表示开关
		//绑定mousedown事件,鼠标按下,获取到元素的坐标信息
		box.onmousedown=function(evt){
			var e=evt || window.event; //兼容ie和普通浏览器
			//获取div位置
			divX=this.offsetLeft;//获得不带单位的值
			divY=this.offsetTop;
			//获取鼠标位置
			mouseX= e.clientX;//e.pageX
			mouseY= e.clientY;//e.pageY
			//开启开关
			sw=true;
		};
		//绑定mousemove事件
		box.onmousemove=function(evt){
			var e=evt || window.event;
			//如果开关sw开启
			if(sw){
				//dis坐标变化值
				var disX= e.clientX-mouseX;
				var disY= e.clientY-mouseY;
				box.style.left=divX+disX+'px';
				box.style.top=divY+disY+'px';
			}
			//向服务器端发送move事件,同时将box的位置信息发送过去
			socket.emit('move',{
				x:box.offsetLeft,
				y:box.offsetTop
			});
		};
		//绑定mouseup事件
		document.onmouseup=function(){
				sw=false;
		}

		//注册moveall事件,以响应服务器端发送回来的moveall事件
		socket.on('moveall',function(data){
			//设置box坐标值即可
			box.style.left=data.x+"px";
			box.style.top=data.y+"px";

		});
	</script>
</body>
</html>

  实现了联网拖拽效果:

 

原文地址:https://www.cnblogs.com/yanxinhua/p/5820283.html