2010-07-01 35 views
0

我想做一個簡單的模態框,可以最小化到屏幕的右下角,所以我可以把它變成一個插件,但我不能讓簡單的CSS工作,並將其本身定位在右下角!以下是所有代碼,您可以立即將其粘貼並查看示例工作。jQuery .CSS不會將元素放置在右下角!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Minimize Window</title> 
<script src="http://www.fzilla.com/f/jquery"></script> 
<style> 
* {margin:0px; padding:0px;} 
body {font-family: SegoeUI, Helvetica, Arial, sans-serif; font-size:14px;} 
.window {position:fixed; height:auto; width:450px; border:1px solid #ccc; overflow:hidden;} 
.window.minimized {height:50px; bottom:100px; right:50px;} 
.window .top_bar {border-bottom:1px solid #ccc; padding:3px 5px;} 
.window .top_bar .title {font-size:1.4em; font-weight:600;} 
.window .top_bar .controls {font-weight:600; float:right;} 
.window .top_bar .controls a {cursor:pointer; color:#666;} 
</style> 
<script> 
$(document).ready(function(){ 
var initial_height = $(".window").height(); 
var windows_on = false; 
$(".minimize").click(function(){ 
    var t = $(this); 
    var tx = t.html(); 
    if (tx == "[-]") { 
    // code when minimizing and putting to bottom right 
    windows_on = false; 
    t.html("[+]"); 
    t.parents(".window").css({ "height": "50px", "bottom": "100px", "right":"50px" }); 
    t.parents(".window").addClass("minimized"); 
    } else { 
    // code when making bigger and centering 
    windows_on = true; 
    t.html("[-]"); 
    t.parents(".window").removeClass("minimized"); 
    t.parents(".window").css({ "height": "400" }); 
    center(); 
    } 
}); 
$(window).resize(function(){ if (windows_on) { center() } }); 
var w, h, aw, ah, y, x; 
function center() { 
    var t = $(".window"); 
    w = t.width(); 
    h = t.height(); 
    aw = $(window).width(); 
    ah = $(window).height(); 
    y = (ah - h)/2; 
    x = (aw - w)/2; 
    t.css({"top":y, "left":x}); 
} 
}); 
</script> 

</head> 

<body> 
<div class="window minimized"> 
<div class="top_bar"> 
    <span class="title">This is the title of our window</span> 
     <span class="controls"><a class="minimize">[+]</a></span> 
    </div><!-- top_bar --> 
    <div class="content"> 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dui tellus, feugiat id interdum id, tempor id felis. Nam id imperdiet nulla. Nunc auctor turpis id lectus mollis vel vehicula mauris porta. Nullam cursus mi at turpis viverra sed euismod metus elementum. Integer imperdiet, felis sit amet rhoncus eleifend, nisi orci convallis libero, in iaculis mauris sapien vel est.</p> 
     <p> Morbi urna mi, dapibus vitae tincidunt in, commodo vel enim. In porta laoreet elit id vehicula. Proin id augue mauris, vel commodo diam. Fusce a metus et est porta fringilla at congue enim. Nulla elit ligula, aliquam sit amet bibendum vitae, rutrum ac quam. Nunc diam erat, condimentum sed sagittis sed, posuere eu mi. Etiam sit amet nibh vel massa faucibus dictum et vel metus. Sed gravida commodo neque eu euismod. Fusce eget orci sed lacus hendrerit porttitor.</p> 
    </div><!-- content --> 
</div><!-- window --> 
</body> 
</html> 

任何建議將幫助!謝謝!

回答

1

在設置衝突的定位說明符(右側,底部)之前,您應該確保將top:和left:設置爲auto。否則,瀏覽器會根據情況選擇一個。

1

身體沒有heigth設置,因此可能不會填滿你的整個屏幕。 .window將在body-container大小的底部被分配 嘗試爲body元素設置heigth。

+0

沒有不是這種情況,我曾嘗試設置一個高度,它沒有改變任何東西。 – 2010-07-01 21:42:41

+0

@天使:它可能沒有解決它自己的問題,但它是你想要看作解決方案的*部分*的東西。除非你告訴它,'body' **不會**在一些(許多)瀏覽器上填充視口。 – 2010-07-01 21:44:48

0
  • 最小化設置高度,底部和右側屬性
  • 最大化,你設置的高度,然後中心(),即設置上和左屬性

這些都是內嵌樣式因而具有較高優先級比通過樣式表設置的屬性。

因此添加和刪除.minimized的優先級較低。

解決方案:

1 /套底部和右側爲自動最大化(因爲最小化設置)和頂部和減少時留下來的汽車(因爲中心()設置它們最大化時) 時。

$(".minimize").click(function(){ 
    var t = $(this); 
    var tx = t.html(); 
    if (tx == "[-]") { 
    // code when minimizing and putting to bottom right 
    windows_on = false; 
    t.html("[+]"); 
    t.parents(".window").css({ "height": "50px", "left": "auto", "top": "auto", "bottom": "100px", "right":"50px" }); 
    t.parents(".window").addClass("minimized"); 
    } else { 
    // code when making bigger and centering 
    windows_on = true; 
    t.html("[-]"); 
    t.parents(".window").removeClass("minimized"); 
    t.parents(".window").css({ "height": "400px" , "bottom": "auto", "right":"auto" }); 

    center(); 
    } 
}); 

2 /更好的:不要.toggle使用的CSS(),但只是.addClass()()如果你的CSS都行,這將有同樣的效果。獎金:您的JS文件中沒有更多硬編碼值。

1

這裏是一個完全可行的解決方案..

http://www.jsfiddle.net/wvgVv/

你並不需要在所有的中心法...

剛剛成立top/left.window到50%,使用負邊緣來居中它(基於窗口的大小)...

0

所以我試着切換隻使用CSS來做它,它的效果很好......但是,一旦我添加了中心腳本,它就打破了最小化選項,因爲即使我的if語句已被設置爲false,它仍然可以工作......下面是新代碼(非常流暢):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Minimize Window</title> 
<script src="http://www.fzilla.com/f/jquery"></script> 
<style> 
* {margin:0px; padding:0px;} 
body {font-family: SegoeUI, Helvetica, Arial, sans-serif; font-size:14px; height:1000px;} 
.window {position:fixed; height:auto; width:450px; bottom:auto; right:auto; left:auto; top:auto; border:1px solid #ccc; overflow:hidden;} 
.window.min {height:31px; bottom:50px; left:auto; top:auto; right:25px;} 
.window.max {height:auto; bottom:auto; left:40%; top:30%; right:auto;} 

.window .top_bar {border-bottom:1px solid #ccc; padding:3px 5px;} 
.window .top_bar .title {font-size:1.4em; font-weight:600;} 
.window .top_bar .controls {font-weight:600; float:right;} 
.window .top_bar .controls a {cursor:pointer; color:#666;} 
.window .content {padding:5px;} 
.window .content p {margin-bottom:1.2em;} 
</style> 
<script> 
$(document).ready(function(){ 
    var windows_on = false; 
    $(".minimize").toggle(function(){ 
     $(this).html("[-]"); 
     $(this).parents(".window").removeClass("min").addClass("max"); 
     windows_on = true; 
     center(); 
    }, 
    function() { 
     $(this).html("[+]"); 
     $(this).parents(".window").removeClass("max").addClass("min"); 
     windows_on = false; 
    }); 

    // code for positioning center! 
    $(window).resize(function(){ if (windows_on) { center() } }); 
    var w, h, aw, ah, y, x; 
    function center() { 
     var t = $(".window"); 
     w = t.width(); 
     h = t.height(); 
     aw = $(window).width(); 
     ah = $(window).height(); 
     y = (ah - h)/2; 
     x = (aw - w)/2; 
     t.css({"top":y, "left":x}); 
    } 
}); 
</script> 

</head> 

<body> 
<div class="window min"> 
    <div class="top_bar"> 
     <span class="title">This is the title of our window</span> 
     <span class="controls"><a class="minimize">[+]</a></span> 
    </div><!-- top_bar --> 
    <div class="content"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dui tellus, feugiat id interdum id, tempor id felis. Nam id imperdiet nulla. Nunc auctor turpis id lectus mollis vel vehicula mauris porta. Nullam cursus mi at turpis viverra sed euismod metus elementum. Integer imperdiet, felis sit amet rhoncus eleifend, nisi orci convallis libero, in iaculis mauris sapien vel est.</p> 
     <p> Morbi urna mi, dapibus vitae tincidunt in, commodo vel enim. In porta laoreet elit id vehicula. Proin id augue mauris, vel commodo diam. Fusce a metus et est porta fringilla at congue enim. Nulla elit ligula, aliquam sit amet bibendum vitae, rutrum ac quam. Nunc diam erat, condimentum sed sagittis sed, posuere eu mi. Etiam sit amet nibh vel massa faucibus dictum et vel metus. Sed gravida commodo neque eu euismod. Fusce eget orci sed lacus hendrerit porttitor.</p> 
    </div><!-- content --> 
</div><!-- window --> 
</body> 
</html> 
相關問題