You can use jquery's queue to queue animations against a different element, then they all queue in a single queue.
Adapting this answer and the info on the jquery help applying this to "body" gives you:
$.fn.moveToX = function(pos) {
var el = $(this);
$("body").queue(
function() {
el.animate({
left: pos + "px"
}, 500, () => {
$.dequeue(this);
});
});
}
$.fn.moveToY = function(pos) {
var el = $(this);
$("body").queue(
function() {
el.animate({
top: pos + "px"
}, 500, () => {
$.dequeue(this);
});
});
}
$("#d1").moveToX(100);
$("#d2").moveToX(200);
$("#d1").moveToY(50);
$("#d2").moveToY(100);
$("#d1").moveToX(0);
$("#d2").moveToX(0);
$("#d1").moveToY(0);
$("#d2").moveToY(0);
div {
position: absolute;
width: 50px;
height: 50px;
border: 1px solid magenta;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='d1'>1</div>
<div id='d2'>2</div>
To have multiple "single" queues (ie multiple queues that can have different elements applied to them (to give parallel animations)) you can supply the "queue[name]" parameter, eg:
$("body").queue("q1", function() { ...
$("body").queue("q2", function() { ...
so your move
methods can be easily extended to provide parallel animations
$.fn.moveToX = function(pos, q) {
var el = $(this);
$("body").queue(
q || "fx",
function() {
el.animate({
left: pos + "px"
}, 500, () => {
$.dequeue(this, q);
});
});
}
$.fn.moveToY = function(pos, q) {
var el = $(this);
$("body").queue(
q || "fx",
function() {
el.animate({
top: pos + "px"
}, 500, () => {
$.dequeue(this, q);
});
});
}
$("#d1").moveToX(100);
$("#d2").moveToX(200);
$("#d1").moveToY(50);
$("#d2").moveToY(100);
$("#d1").moveToX(0);
$("#d2").moveToX(0);
$("#d1").moveToY(0);
$("#d2").moveToY(0);
$("#d3").moveToX(250, "q3");
$("#d3").moveToY(50, "q3");
$("#d3").moveToX(300, "q3");
$("#d3").moveToY(0, "q3");
$("body").dequeue("q3"); // queue "fx" auto dequeues
div {
position: absolute;
width: 50px;
height: 50px;
border: 1px solid magenta;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='d1'>1</div>
<div id='d2'>2</div>
<div id='d3' style='left:300px;'>3</div>