Socket.IO和复杂的JSON以及Node.js、jQuery
我在这方面遇到了很多麻烦。我试图使它在移动方形div时,该div的位置通过Socket.IO中继到另一个页面,以便div实时移动。唯一的问题是我不知道该怎么做!那份文件翻过来只会把我弄糊涂 我的jQuery代码:Socket.IO和复杂的JSON以及Node.js、jQuery,jquery,node.js,socket.io,Jquery,Node.js,Socket.io,我在这方面遇到了很多麻烦。我试图使它在移动方形div时,该div的位置通过Socket.IO中继到另一个页面,以便div实时移动。唯一的问题是我不知道该怎么做!那份文件翻过来只会把我弄糊涂 我的jQuery代码: $(document).ready(function() { $("#mydiv").draggable().mousemove(function(){ var coord = $(this).position(); $("#left").val
$(document).ready(function() {
$("#mydiv").draggable().mousemove(function(){
var coord = $(this).position();
$("#left").val(coord.left);
$("#top").val(coord.top);
});
});
html:
X:
Y:
我甚至不知道从哪里开始使用socket.io,请帮忙
多谢各位 Socket.IO由两部分组成:
8080
的程序,当客户端连接时,它等待来自它的receive\u position
事件,当它收到一个事件时,通过update\u position
事件将该位置广播给所有其他连接的客户端
当访问根URL(/
)时,还有一些代码可以为index.htm
文件提供服务。大部分代码来自Socket.IO的“如何使用”页面;如果non-Socket.IO代码没有任何意义,那么您可能需要复习一下Node.js的基础知识
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
var lastPosition = { x: 0, y: 0 }; // whatever default data
io.sockets.on('connection', function (socket) {
socket.emit('update_position', lastPosition);
socket.on('receive_position', function (data) {
lastPosition = data;
socket.broadcast.emit('update_position', data); // send `data` to all other clients
});
});
现在服务器已经设置好,您需要一些客户端脚本来发送和接收div的位置。请将此代码放入index.htm
文件中
<script src="/socket.io/socket.io.js"></script>
<script>
$(document).ready(function() {
var socket = io.connect();
socket.on('update_position', function (data) {
var x = data.x;
var y = data.y;
// jquery code to move div here
});
$("#mydiv").draggable().mousemove(function(){
var coord = $(this).position();
$("#left").val(coord.left);
$("#top").val(coord.top);
socket.emit('receive_position', { x: coord.left, y: coord.top });
});
});
</script>
$(文档).ready(函数(){
var socket=io.connect();
socket.on('update_position',函数(数据){
var x=data.x;
var y=data.y;
//将div移到此处的jquery代码
});
$(“#mydiv”).draggable().mousemove(函数(){
var coord=$(this.position();
$(“#左”).val(左坐标);
$(“#top”).val(coord.top);
emit('receive_position',{x:coord.left,y:coord.top});
});
});
当拖动div时,此代码发送一个接收位置
事件;服务器获取此事件,并向所有其他客户端发送具有相同x和y值的update\u position
事件;当他们收到这些数据时,他们会更新div
希望这能帮助你开始;如果您有任何问题,请在评论中告诉我。Socket.IO由两部分组成:
8080
的程序,当客户端连接时,它等待来自它的receive\u position
事件,当它收到一个事件时,通过update\u position
事件将该位置广播给所有其他连接的客户端
当访问根URL(/
)时,还有一些代码可以为index.htm
文件提供服务。大部分代码来自Socket.IO的“如何使用”页面;如果non-Socket.IO代码没有任何意义,那么您可能需要复习一下Node.js的基础知识
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
var lastPosition = { x: 0, y: 0 }; // whatever default data
io.sockets.on('connection', function (socket) {
socket.emit('update_position', lastPosition);
socket.on('receive_position', function (data) {
lastPosition = data;
socket.broadcast.emit('update_position', data); // send `data` to all other clients
});
});
现在服务器已经设置好,您需要一些客户端脚本来发送和接收div的位置。请将此代码放入index.htm
文件中
<script src="/socket.io/socket.io.js"></script>
<script>
$(document).ready(function() {
var socket = io.connect();
socket.on('update_position', function (data) {
var x = data.x;
var y = data.y;
// jquery code to move div here
});
$("#mydiv").draggable().mousemove(function(){
var coord = $(this).position();
$("#left").val(coord.left);
$("#top").val(coord.top);
socket.emit('receive_position', { x: coord.left, y: coord.top });
});
});
</script>
$(文档).ready(函数(){
var socket=io.connect();
socket.on('update_position',函数(数据){
var x=data.x;
var y=data.y;
//将div移到此处的jquery代码
});
$(“#mydiv”).draggable().mousemove(函数(){
var coord=$(this.position();
$(“#左”).val(左坐标);
$(“#top”).val(coord.top);
emit('receive_position',{x:coord.left,y:coord.top});
});
});
当拖动div时,此代码发送一个接收位置
事件;服务器获取此事件,并向所有其他客户端发送具有相同x和y值的update\u position
事件;当他们收到这些数据时,他们会更新div
希望这能帮助你开始;如果您有任何问题,请在评论中告诉我。如果我在我的应用程序中使用这个/它的变体来获利,可以吗?奇怪的是,它不是双向的。似乎最新打开的localhost页面控制了所有这些内容。我怎样才能使它们彼此平等?我认为这可能与默认的定位有关,但我不确定……当然,我不介意你用这段代码做什么。打开的最后一页将具有默认位置;您需要使用已设置的最后一个已知位置呈现页面,或者使用('connection')回调中的最后一个已知位置向新连接的客户端发送
update\u position
事件。它如何知道最后一个位置?当它进入服务器时,把它存储在一个变量中。如果我在应用程序中使用这个/这个变量来获利,可以吗?奇怪的是,它不是双向的。似乎最新打开的localhost页面控制了所有这些内容。我怎样才能使它们彼此平等?我认为这可能与默认的定位有关,但我不确定……当然,我不介意你用这段代码做什么。打开的最后一页将具有默认位置;您需要使用已设置的最后一个已知位置呈现页面,或者使用io.sockets.on('connection')
回调中的最后一个已知位置向新连接的客户端发送update\u position
事件。它如何知道最后一个位置?当它进入服务器时,将其存储在变量中。