如何在 jquery 中浮动模态窗口
How to float a modal window in jquery
我正在使用jquery UI创建一个浮动窗口。我能够创建窗口。但是我很难让它漂浮起来。我希望窗口应该在"正文"的右上角。(现在你可以在右边但底部看到它),我也想让它移动。当我滚动页面时,窗口也应该随之滚动。例如 http://manos.malihu.gr/tuts/jquery-floating-menu.html
这是我到目前为止所做的代码。
请在 http://jsfiddle.net/z8rW6/1/上找到代码
Javascript 代码:
$(document).ready(function(){
$("#dialog").dialog();
var $parent = $('#body');
var windowHeight = $(window).height();
var parentAbsoluteTop = $parent.offset().top;
var parentAbsoluteBottom = parentAbsoluteTop + $parent.height();
var topStop = parentAbsoluteTop + $( ".selector" ).dialog( "option", "height" );
$('#dialog').dialog({ width: 300,height: 600 }).dialog('widget').position({
my: 'right top',
at: 'right top',
of: $('#body')
});
$(window).scroll(function(event) {
var windowBottom = $(window).scrollTop() + windowHeight;
if (windowBottom < topStop)
$('.selector').dialog({ dialogClass: 'myPosition1' });
else if (windowBottom >= topStop && windowBottom <= parentAbsoluteBottom)
$('.selector').dialog({ dialogClass: 'myPosition2' });
else
$('.selector').dialog({ dialogClass: 'myPosition3' });
})
CSS代码:
#page{
width:800px;
margin:0 auto;
}
.myPosition1 {
position: 'absolute',
top: '0px',
bottom: 'auto',
Right: '0'
}
.myPosition2 {
position: 'fixed',
top: 'auto',
bottom: 'auto',
Right: '0'
}
.myPosition3 {
position: 'absolute',
top: 'auto',
bottom: '0px',
Right: '0'
}
#header{
border:1px solid blue;
height:15px;
margin:8px;
}
#body{
border:1px solid blue;
height:5600px;
margin:8px;
position: relative;
}
#footer{
border:1px solid blue;
height:15px;
margin:8px;
}
h1,h2{
padding:16px;
}
#debug {
position: fixed;
bottom: 0;
right: 0;
height: 100px;
width: 100px;
color: red;
}
网页代码:
<html>
<head>
<LINK href="css/style.css" rel="stylesheet" type="text/css">
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script language="javascript" type="text/javascript" src='javascript/behaviour.js'></script>
</head>
<body style="font-size:62.5%;">
<div id="page">
<div id="header"><h1>header</h1></div>
<div id="body" >
<h1>content top -> when scrolling up the box should STOP here (at the line right above this text)</h1>
<div id="dialog" title="Detailed FeedBack">I'm in a dialog </div>
<span style="position: absolute; bottom: 0; ">content bottom -> when scrolling down the box should STOP here (at the line right below this text)</span>
</div>
<div id="footer"><h1>footer</h1></div>
<div id="debug"></div>
</div>
</body>
</html>
:)所有这些答案都是处理您在技术上提出的问题的好方法......如何使用jQuery做到这一点。但是 - 使用非常简单的 CSS 要容易得多。
例:
<head>
<style type="text/css">
.myDialog {
padding: 5px 10px;
background: yellow;
border: 1px solid #999;
position: fixed; /* This is the magic - stays during scroll. */
top: 0; right: 0; /* These coordinates are now in
relation to the first parent
with non-static positioning (body) */
}
.hidden {
display: none;
}
</style>
</head>
<body>
<!-- The rest of your page -->
<!-- Put your dialog at the end of the body (or the beginning)
This way you don't have to worry about it getting hung up
within the positioning boxes of any other elements -->
<div class="myDialog hidden">
This is my dialog content!
</div>
</body>
<script type="text/javascript" language="javascript">
// Now you can just toggle on and off the "hidden"
// class to make the dialog hide/show.
$('#SomeButton').bind('click', function (ev) {
$('.myDialog').toggleClass('hidden');
});
</script>
完全相同的原则可以应用于您的模态对话框,使其随着页面的滚动而移动,诸如此类。
有关上述工作示例,请查看此jsFiddle:http://jsfiddle.net/WSZXL/
这
应该适用于您的 HTML,尽管您应该在 CSS 中增加 #footer
的高度(如 400px)以便能够确认它是否有效:
var $d;
$(document).ready(function(){
var dlg_width = 300;
var dlg_height = 200;
var dlg_offset_x = $("#page").width() - dlg_width + 100;
var dlg_margin_top = $("#header").outerHeight(true); // includeMargins=true
var dlg_margin_bottom = $("#footer").outerHeight(true); // includeMargins=true
$d = $('#dialog').dialog({
width: dlg_width,
height: dlg_height,
position: [dlg_offset_x, dlg_margin_top]
});
$(window).bind('scroll', function(evt){
var scrollTop = $(window).scrollTop();
var bottom = $(document).height() - scrollTop;
$d.dialog("option", {"position": [
dlg_offset_x,
((dlg_margin_top - scrollTop > 0) ?
dlg_margin_top - scrollTop :
((bottom - dlg_height > dlg_margin_bottom) ?
0 :
bottom - dlg_height - dlg_margin_bottom
)
)
]});
});
});
你可以在这里看到它:http://jsfiddle.net/5TFQy/10/
请注意,有一些怪癖:
- 对话框粘在
- 视口的右侧,而它应该粘在
#body
的右侧。我错过了什么,还是dialog()
的限制? - 完美地满足您的底蓝线要求。
#body
的边距和边框大小当然应该增加。试图保持
dlg_margin_bottom = $("#footer").outerHeight(true)
值不足以像素我希望这对您有所帮助:
http://jsfiddle.net/lytican/UxZKH/2/
相关文章:
- 点击AngularJS模态窗口捕捉背景事件
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 如何使用jquery关闭模态窗口,通过模拟模态's关闭按钮
- Angularjs - 观察模态窗口从另一个控制器关闭
- 模态窗口yii2中的Ajax验证数据
- Ajax 模态窗口可以访问父窗口 PHP 数据吗?
- 在选择(rails_admin)时更改时在模态窗口中添加新字段
- 在模态窗口上创建 cookie
- 如何在用户离开网页时显示模态窗口
- Magento时事通讯弹出窗口(模态窗口)在每个页面上触发.它应该只在主页上弹出
- 如何在 jquery 中浮动模态窗口
- 创建一个模态窗口以使用 AngularJS 加载数据
- Angular JS将msg广播到多个视图,包括模态窗口
- 模态窗口在电子上消失
- 如何使用 javascript 在模态窗口内重定向
- ExtJS 4.2.1 用于加载指示和模态窗口的不同 CSS 掩码
- 机器人可以单击在 javascript 中制作模态窗口的链接吗?
- 如何在 angularjs 模态窗口中运行 jquery
- Javascript 模态窗口例程每次单击都会执行更多时间
- 模态窗口(弹出窗口)警报在使用 angularJs 的错误字段上显示