Рассмотрим следующий пример.
$(function() {
var myInt;
function createPos() {
return [Math.floor(Math.random() * (200 - 5 + 1)) + 5, Math.floor(Math.random() * (300 - 5 + 1)) + 5];
}
$("#dialog").dialog({
width: 200,
height: 150,
autoOpen: false,
draggable: true,
maxHeight: $(window).height() - 40,
maxWidth: $(window).width() - 40,
modal: true,
resizable: true,
position: createPos(),
open: function() {
myInt = setInterval(function() {
var posArr = createPos();
console.clear();
console.log(posArr);
$(".ui-dialog").css({
left: posArr[0] + "px",
top: posArr[1] + "px"
});
}, 1200);
},
close: function() {
clearInterval(myInt);
}
}).dialog("open");
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div id="dialog">
<p>My dialog</p>
</div>
Параметр position
можно изменить после открытия, но он не читается. Вы можете настроить CSS left
и top
родительского класса ui-dialog
.
Вы также можете использовать .animate()
:
$(function() {
var myInt;
function createPos() {
return [Math.floor(Math.random() * (200 - 5 + 1)) + 5, Math.floor(Math.random() * (300 - 5 + 1)) + 5];
}
$("#dialog").dialog({
width: 200,
height: 150,
autoOpen: false,
draggable: true,
maxHeight: $(window).height() - 40,
maxWidth: $(window).width() - 40,
modal: true,
resizable: true,
open: function() {
myInt = setInterval(function() {
var posArr = createPos();
console.clear();
console.log(posArr);
$(".ui-dialog").animate({
left: posArr[0] + "px",
top: posArr[1] + "px"
}, 1000);
}, 1200);
},
close: function() {
clearInterval(myInt);
}
}).dialog("open");
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div id="dialog">
<p>My dialog</p>
</div>