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 {width: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>
实现了联网拖拽效果:
Socket.io应用之联网拖拽游戏的更多相关文章
- 微信小游戏下socket.io的使用
参考: 微信小游戏:socket.io 一 在微信小游戏 中使用socket.io报错 因为项目需求,后端要使用nodejs简单搭建一个服务器,通讯用json格式. 使用Egret提供的socket. ...
- canvas drag 实现拖拽拼图小游戏
博主一直心心念念想做一个小游戏- 前端时间终于做了一个小游戏,直到现在才来总结,哈哈- 以后要勤奋点更新博客! 实现原理 1.如何切图? 用之前的方法就是使用photoshop将图片切成相应大小的图 ...
- 使用NGUI实现拖拽功能(拼图小游戏)
上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...
- 使用UGUI实现拖拽功能(拼图小游戏)
实现方式 1.引入UGUI自带的事件系统 UnityEngine.EventSystems 2.为我们的类添加接口 IBeginDragHandler, IDragHandler, IEndDragH ...
- 基于node.js+socket.io+html5实现的斗地主游戏(1)概述
一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为 ...
- android五子棋游戏、资讯阅读、大学课程表、地图拖拽检测、小说搜索阅读app等源码
Android精选源码 Android 自动生成添加控件 android旋转动画.圆形进度条组合效果源码 一款很强的手机五子棋app源码 android地图拖拽区域检测效果源码 实现Android大学 ...
- 【原创】js实现一个可随意拖拽排序的菜单导航栏
1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换 ...
- Node学习笔记(三):基于socket.io web版你画我猜(二)
上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...
- dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.
http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...
随机推荐
- 智能合约语言 Solidity 教程系列9 - 错误处理
这是Solidity教程系列文章第9篇介绍Solidity 错误处理. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文 ...
- 网络IO超时的几种实现
一.select/poll/epoll int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,str ...
- Map集合、散列表、红黑树介绍
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合: Collection总览 List集合就这么简单[源码剖析] 原本我是打算继续将Collection下的 ...
- vmvare入门(1)使用移动,不要使用复制
1.复制虚拟机会产生新的自动网卡,原来的 System Eth0废了? 2.xftp链接的时候,要选择sftp方式连接,utf8编码.
- python基础——抽象类
python基础--抽象类 1 什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 2 为什么要有抽象 ...
- Python生成随机验证码
Python生成随机验证码,需要使用PIL模块. 安装: pip3 install pillow 基本使用 1.创建图片 from PIL import Image img = Image.new(m ...
- Codeforces Round #436 (Div. 2) D. Make a Permutation!
http://codeforces.com/contest/864/problem/D 题意: 给出n和n个数(ai <= n),要求改变其中某些数,使得这n个数为1到n的一个排列,首先保证修改 ...
- Hive:把一段包含中文的sql脚本粘贴到beeline client运行中文乱码
背景: 在做项目过程中不可能hive表中都是非中文字段.在最近做的项目中就遇到需要在beeline界面上执行查询脚本,但脚本中包含中文,正常一个脚本用文本写好后,粘贴到beeline窗口运行时,发现中 ...
- 对scrapy经典框架爬虫原理的理解
1,spider打开某网页,获取到一个或者多个request,经由scrapy engine传送给调度器schedulerrequest特别多并且速度特别快会在scheduler形成请求队列queue ...
- js常用正则表达式表单验证代码
方法一: var re=/正则表达式/; re.test($("txtid").val()) 方法二: $("txtid").val.match(/正则 ...