jQuery easyui layout布局自適應瀏覽器大小(轉)


首先解釋一下標題的含義,當我們用jQuery easyui layout 進行布局的時候,可能會遇到這樣一個問題,那就是當手工調整瀏覽器大小,或者最大化、還原窗口的時候,layout的某個區域不能填充因為瀏覽器擴大而產生的空白區域,這時候看起來就比較別扭了。當然了,如果你的layout是直接放在body標簽上的,且沒有嵌套的layout的話,是不會出現layout不能自適應大小的情況的。

 

當布局比較復雜,勢必就會要layout嵌套起來使用,這時候出現的頁面不能自適應大小的情況就讓我不能忍受,這個問題困擾了我幾天時間,好在有萬能的網絡,問題總會得到解決,下面就將自己這兩天查資料以及自己實踐的經驗介紹給大家,希望對以后遇到同樣問題的朋友有所幫助。但是此處並不做深入分析,因為我也不熟悉jQuery和easyui。

先寫一個有嵌套的layout,父級基於body,包含north,center,west,east,south五個區域,子級layout基於父級的center區域,如果你打開頁面的時候,瀏覽器不是最大化,然后手工調整瀏覽器大小,就會發現問題所在,點擊此處查看演示

其實,layout繼承自panel,而panel有個fit屬性,只要設置為true,layout就能自適應父元素的大小而變化,所以只要加上fit=”true”基本就可以解決問題,點擊此處查看演示,相對於不能自適應的情況,變動的代碼只有下面一行:

這種解決方案應該是最簡單的了,不過在非IE瀏覽器下面,大家可能會發現,反復調整瀏覽器大小,特別是縮小瀏覽器的時候,子級的layout就會出現滾動條,一時半會兒也沒查出是什么原因導致的。所以網上還有一種較為復雜的解決方案,那就是利用jQuery的resize事件對瀏覽器窗口監聽,當瀏覽器被調整時重新設置某些頁面元素大小,要自適應大小的話,只要設置成跟父元素同寬就可以了,下面是JS代碼:

 1 var settime = null;
 2 function redraw(){
 3 $('#wrap').layout('resize');
 4 $('#subWrap').layout('panel', 'north').panel('resize',{width:$('#subWrap').width()});
 5 $('#subWrap').layout('panel', 'center').panel('resize',{width:$('#subWrap').width()});
 6 $('#subWrap').layout('resize');
 7 }
 8 $(function(){
 9 $(window).resize(function(){
10 if(settime != null)
11 clearTimeout(settime);
12 settime=setTimeout("redraw()",100);
13 });
14 var p1 = $('body').layout('panel','west').panel({
15 onCollapse:function(){
16 if(settime != null)
17 clearTimeout(settime);
18 settime=setTimeout("redraw()",100);
19 },
20 onExpand:function(){
21 if(settime != null)
22 clearTimeout(settime);
23 settime=setTimeout("redraw()",100);
24 },
25 onResize:function(width,height){
26 if(settime != null)
27 clearTimeout(settime);
28 settime=setTimeout("redraw()",100);
29 }
30 });
31 var p2 = $('body').layout('panel','east').panel({
32 onCollapse:function(){
33 if(settime != null)
34 clearTimeout(settime);
35 settime=setTimeout("redraw()",100);
36 },
37 onExpand:function(){
38 if(settime != null)
39 clearTimeout(settime);
40 settime=setTimeout("redraw()",100);
41 },
42 onResize:function(width,height){
43 if(settime != null)
44 clearTimeout(settime);
45 settime=setTimeout("redraw()",100);
46 }
47 });
48 });

 

 

當然了,用jQuery的resize監聽對於這樣的頁面還是不夠,因為當我,展開活收縮父級layout的west和east區域,或是是拉動west和est與center之間的split調整大小的時候,子級的layout依舊會出現不能自動填充的情況,所以對於這些事件,統統需要捕捉處理子級layout的布局問題,這也是我上面的js代碼為何出了監聽window的resize事件外還監聽了其它幾個事件的原因,相當麻煩?如果有更好的解決方案,歡迎大家提出來。最后調整好的頁面演示在這里

2011年11月13號更新:

使用子級layout使用fit=’true’的屬性后,基本可以使頁面保持自適應,就是在非IE瀏覽器下面,拉伸瀏覽器后,再還原包含子級layout的region便會含有滾動條。為了解決這個滾動條問題使用了jquery的resize事件,其實在不必這么大費周折,只要讓包含自己layout的region上使用overflow:hidden就可以了,這也算個折中而簡單的解決方案吧。
演示頁面看這里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM