Открытие JQuery Ui Dialog в MousePosition
Я хочу открыть диалоговое окно JQuery UI в позиции мыши.
в чем проблема с моим кодом?
<script type="text/javascript">
$(document).ready(function () {
var x;
var y;
$(document).mousemove(function (e) {
x = e.pageX;
y = e.pageY;
});
$("#d").dialog({
autoOpen: false,
show: "blind",
hide: "explode",
position: [x, y]
});
$("#c").bind("mouseover", function () {
$("#d").dialog('open'); // open
});
$("#c").bind("mouseleave", function () {
$("#d").dialog('close'); // open
});
});
</script>
Ответы
Ответ 1
Обновление x
и y
после их передачи (по значению) для установки диалога не будет иметь никакого эффекта, так как после этого переменные не будут связаны. Вам нужно будет обновить опцию позиции напрямую, например:
$(document).mousemove(function (e) {
$("#d").dialog("option", { position: [e.pageX, e.pageY] });
});
Вы можете проверить это здесь или гораздо более оптимизированную версию (так как вы пока показываете ее поверх #c
):
$(function () {
$("#d").dialog({
autoOpen: false,
show: "blind",
hide: "explode"
});
$("#c").hover(function () {
$("#d").dialog('open');
}, function () {
$("#d").dialog('close');
}).mousemove(function (e) {
$("#d").dialog("option", { position: [e.pageX+5, e.pageY+5] });
});
});
Вы можете протестировать эту версию здесь.
Ответ 2
Ответ Nick Craver работает, только нужно улучшить, чтобы поле всегда было рядом с курсором.
Ось Y должна быть вычтена с помощью scrollTop страницы.
Таким образом, эта строка становится:
$("#d").dialog("option", { position: [e.pageX+5, (e.pageY+5)-$(document).scrollTop()] });
Ответ 3
$("#d").dialog(
"option",
{
position:
{
my: 'left',
at: 'right',
of: event
}
}
);
Рабочий пример: http://jsbin.com/okosi4
Это решение работало лучше для меня, когда у меня была длинная страница, требующая прокрутки. Я нашел, что приведенные выше решения не очень хорошо работают с вертикальной прокруткой.
Подробнее о позиции