Sha*_*hin 11 jquery jquery-ui jquery-ui-dialog
我想在鼠标位置打开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>
Run Code Online (Sandbox Code Playgroud)
Nic*_*ver 15
更新x和y通过它们(按值)设置对话框将没有任何效果,因为之后变量不相关.您需要直接更新位置选项,如下所示:
$(document).mousemove(function (e) {
$("#d").dialog("option", { position: [e.pageX, e.pageY] });
});
Run Code Online (Sandbox Code Playgroud)
你可以在这里测试它,或者更优化的版本(因为你只是在它上面显示它#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] });
});
});
Run Code Online (Sandbox Code Playgroud)
小智 9
Nick Craver的答案有效,只需要改进,以便盒子总是靠近光标.
需要通过页面的scrollTop减去Y轴.这条线变成:
$("#d").dialog("option", { position: [e.pageX+5, (e.pageY+5)-$(document).scrollTop()] });
Run Code Online (Sandbox Code Playgroud)
$("#d").dialog(
"option",
{
position:
{
my: 'left',
at: 'right',
of: event
}
}
);
Run Code Online (Sandbox Code Playgroud)
工作样本:http://jsbin.com/okosi4
当我有一个需要滚动的长页面时,这个解决方案对我来说效果更好.我发现上述解决方案在垂直滚动方面效果不佳.
详细了解位置选项