我正在使用jquery拖放,使用websocket拖放。当用户拖动拖放项时,它将自动在其他用户屏幕上更新。像这个视频一样:https://youtu.be/JHndS1ps_f0
我想要当用户拖动成员时,其他用户不能拖动该成员。这是我的代码:
var socket = new WebSocket('ws://' + window.location.host + '/ws');
var id_user = $(".id_user").attr('data-id');
$(".item").draggable({
revert: true,
revertDuration: 0,
drag: function( event, ui ) {
var team_id_previous = $(this).attr('data-id-team');
var member_id = $(this).attr('data-id-member');
// Send to server
socket.send(
JSON.stringify({
team_id_previous: team_id_previous,
member_id: member_id,
user_id: id_user,
type: "drag"
})
);
}
});
从服务器监听味精:
socket.onmessage = function (e) {
var msg = JSON.parse(e.data);
var item = $("[data-id-member=" + msg.member_id + "][data-id-team=" + msg.team_id_previous + "]");
if (msg.type === "drag" && msg.user_id != id_user) {
item.draggable('disable');
item.css("background-color", "gainsboro");
}
};
如果我依次拖动,在此屏幕上拖动,然后在另一个屏幕上拖动,也可以将其禁用。但是,当许多人同时拖动一个成员时,等待时间几乎为0,那么两者都可以拖动。我该怎么办才能解决这个问题。谢谢。
答案 0 :(得分:0)
通过记住每个可拖动对象的负责人来让服务器进行仲裁。当您收到一条拖动消息时,请查阅负责人的地图以检查是否有人在拖动它;如果不是当前用户,则发送回取消消息,否则广播拖动。此外,如果没有可拖动的相关拖动项,请输入当前用户(套接字ID)作为其拖动项。当拖动停止(或断开连接)时,请删除相关的负责拖动项。