解决Ext.Window放大关闭后滚动条消失和滚动页面时最大化Window位置的方法

应用场景:
一个表格列表,点击表格上的某一行,弹出一个Ext.Window显示其他资料。(修改、显示详情等等),如下图:

很多情况下我们只是使用Ext的某一些功能,如Ext.Window.在你的页面长度没有越过一页,即没有滚动条的时候,使用Ext.Window是不会有任何问题的。但当你的页面长度超过一页,有滚动条时,使用Ext.Window会出现以下两个问题:
你可以试用一下: http://extjs.org.cn/extjs/mydemo/0007_window_position_error.html

1、Ext.Window放大后,再点击关闭按钮,页面右边的滚动条会消失,出现一条白边,页面不能滚动了。如下图:

2、向下拖动页面至某一个地方,弹出一个Ext.Window,这个时候如果点击放大,窗体会放大,但位置在最顶上,这时候你什么也不能操作,只能重新刷新页面。如下图

解决办法其实很简单,只要在Window中添加两个listeners就可以了。

  1. listeners: {   
  2.     close:function(w){   
  3.         //关键部分:关闭窗口前先还原,滚动条才不会消失   
  4.         w.restore();   
  5.     },   
  6.     maximize:function(w){      
  7.         //关键部分:最大化后需要将窗口重新定位,否则窗口会从最顶端开始最大化                          
  8.         w.setPosition(document.body.scrollLeft,document.body.scrollTop);   
  9.     }   
  10. }  

 

演示(demo)地址在文章最后.

效果图如下:

源代码包括:0007_window_position.html
0007_window_position.html

  1. <html>   
  2. <head>   
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
  4. <title>解决Ext.Window放大关闭后滚动条消失和滚动页面时最大化Window位置的方法</title>   
  5. <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css" />   
  6. <link rel="stylesheet" type="text/css" href="../examples/examples.css" />   
  7. <script type="text/javascript" src="../adapter/ext/ext-base.js"></script>   
  8. <script type="text/javascript" src="../ext-all.js"></script>   
  9. <script type="text/javascript">   
  10. /*  
  11.  * Copyright(c) extjs.org.cn | jamblues  
  12.  * Power by Jamblues & Micheal  
  13.  *   
  14.  * <A href="http://extjs.org.cn" target=_blank>http://extjs.org.cn</A>  
  15.  */  
  16. Ext.BLANK_IMAGE_URL = "../../resources/images/default/s.gif";    
  17. var tr_1 = "";   
  18. var class_1 = "";   
  19. function OpenWin(tr)   
  20. {   
  21.     //设置选中颜色开始   
  22.     if(tr_1 != "")   
  23.     {   
  24.     tr_1.style.backgroundColor = "";   
  25.     }   
  26.     tr_1 = tr;   
  27.     class_1 = tr.className;   
  28.     tr.style.backgroundColor = "#AECEF6";   
  29.     //设置选中颜色结束   
  30.        
  31.     Ext.onReady(function(){   
  32.         var win = new Ext.Window({                           
  33.                     layout:'fit',   
  34.                     width:480,   
  35.                     height:360,   
  36.                     resizable:true,   
  37.                     closeAction:'close',   
  38.                     plain: true,   
  39.                     maximizable: true,   
  40.                     listeners: {   
  41.                         close:function(w){   
  42.                             //关键部分:关闭窗口前先还原,滚动条才不会消失   
  43.                             w.restore();   
  44.                         },   
  45.                         maximize:function(w){      
  46.                             //关键部分:最大化后需要将窗口重新定位,否则窗口会从最顶端开始最大化                          
  47.                             w.setPosition(document.body.scrollLeft,document.body.scrollTop);   
  48.                         }   
  49.                     }   
  50.                 });               
  51.            win.show();   
  52.     });   
  53. }   
  54.   
  55. </script>   
  56.   
  57. </head>   
  58. <body>   
  59. <h1>解决Ext.Window放大关闭后滚动条消失和滚动页面时最大化Window位置的方法</h1>   
  60. <p>应用场景:一个表格列表,点击表格上的某一行,弹出一个Ext.Window显示其他资料。(修改、显示详情等等)   
  61. <br />很多情况下我们只是使用Ext的某一些功能,如Ext.Window.在你的页面长度没有越过一页,即没有滚动条的时候,使用Ext.Window是不会有任何问题的。但当你的页面长度超过一页,有滚动条时,使用Ext.Window会出现以下两个问题:   
  62. <br />   
  63. 1、Ext.Window放大后,再点击关闭按钮,页面右边的滚动条会消失,出现一条白边,页面不能滚动了。如下图:   
  64. <br />   
  65. 2、向下拖动页面至某一个地方,弹出一个Ext.Window,这个时候如果点击放大,窗体会放大,但位置在最顶上,这时候你什么也不能操作,只能重新刷新页面。   
  66. <br>   
  67.   
  68. <div id="data-gird">   
  69.   *双击行弹出新窗口   
  70.   <table width="100%" border="1" cellpadding="0" cellspacing="5">   
  71.     <tr>   
  72.       <th scope="col" style="text-align:center; font-weight:bold;">Company</th>   
  73.       <th scope="col" style="text-align:center; font-weight:bold;">Price</th>   
  74.       <th scope="col" style="text-align:center; font-weight:bold;">Change</th>   
  75.       <th scope="col" style="text-align:center; font-weight:bold;">% Change</th>   
  76.       <th scope="col" style="text-align:center; font-weight:bold;">Last Updated</th>   
  77.     </tr>   
  78.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  79.       <td>3m Co</td>   
  80.       <td>71.72</td>   
  81.       <td>0.02</td>   
  82.       <td>0.03</td>   
  83.       <td>9/1 12:00am</td>   
  84.     </tr>   
  85.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  86.       <td>Alcoa Inc</td>   
  87.       <td>29.01</td>   
  88.       <td>0.42</td>   
  89.       <td>1.47</td>   
  90.       <td>9/1 12:00am</td>   
  91.     </tr>   
  92.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  93.       <td>Altria Group Inc</td>   
  94.       <td>83.81</td>   
  95.       <td>0.28</td>   
  96.       <td>0.34</td>   
  97.       <td>9/1 12:00am</td>   
  98.     </tr>   
  99.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  100.       <td>American Express Company</td>   
  101.       <td>52.55</td>   
  102.       <td>0.01</td>   
  103.       <td>0.02</td>   
  104.       <td>9/1 12:00am</td>   
  105.     </tr>   
  106.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  107.       <td>American International Group, Inc.</td>   
  108.       <td>64.13</td>   
  109.       <td>0.31</td>   
  110.       <td>0.49</td>   
  111.       <td>9/1 12:00am</td>   
  112.     </tr>   
  113.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  114.       <td>AT&T Inc.</td>   
  115.       <td>31.61</td>   
  116.       <td>-0.48</td>   
  117.       <td>-1.54</td>   
  118.       <td>9/1 12:00am</td>   
  119.     </tr>   
  120.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  121.       <td>Boeing Co.</td>   
  122.       <td>75.43</td>   
  123.       <td>0.53</td>   
  124.       <td>0.71</td>   
  125.       <td>9/1 12:00am</td>   
  126.     </tr>   
  127.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  128.       <td>Caterpillar Inc.</td>   
  129.       <td>67.27</td>   
  130.       <td>0.92</td>   
  131.       <td>1.39</td>   
  132.       <td>9/1 12:00am</td>   
  133.     </tr>   
  134.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  135.       <td>Citigroup, Inc.</td>   
  136.       <td>49.37</td>   
  137.       <td>0.02</td>   
  138.       <td>0.04</td>   
  139.       <td>9/1 12:00am</td>   
  140.     </tr>   
  141.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  142.       <td>E.I. du Pont de Nemours and Company</td>   
  143.       <td>40.48</td>   
  144.       <td>0.51</td>   
  145.       <td>1.28</td>   
  146.       <td>9/1 12:00am</td>   
  147.     </tr>   
  148.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  149.       <td>Exxon Mobil Corp</td>   
  150.       <td>68.1</td>   
  151.       <td>-0.43</td>   
  152.       <td>-0.64</td>   
  153.       <td>9/1 12:00am</td>   
  154.     </tr>   
  155.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  156.       <td>General Electric Company</td>   
  157.       <td>34.14</td>   
  158.       <td>-0.08</td>   
  159.       <td>-0.23</td>   
  160.       <td>9/1 12:00am</td>   
  161.     </tr>   
  162.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  163.       <td>General Motors Corporation</td>   
  164.       <td>30.27</td>   
  165.       <td>1.09</td>   
  166.       <td>3.74</td>   
  167.       <td>9/1 12:00am</td>   
  168.     </tr>   
  169.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  170.       <td>Hewlett-Packard Co.</td>   
  171.       <td>36.53</td>   
  172.       <td>-0.03</td>   
  173.       <td>-0.08</td>   
  174.       <td>9/1 12:00am</td>   
  175.     </tr>   
  176.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  177.       <td>Honeywell Intl Inc</td>   
  178.       <td>38.77</td>   
  179.       <td>0.05</td>   
  180.       <td>0.13</td>   
  181.       <td>9/1 12:00am</td>   
  182.     </tr>   
  183.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  184.       <td>Intel Corporation</td>   
  185.       <td>19.88</td>   
  186.       <td>0.31</td>   
  187.       <td>1.58</td>   
  188.       <td>9/1 12:00am</td>   
  189.     </tr>   
  190.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  191.       <td>International Business Machines</td>   
  192.       <td>81.41</td>   
  193.       <td>0.44</td>   
  194.       <td>0.54</td>   
  195.       <td>9/1 12:00am</td>   
  196.     </tr>   
  197.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  198.       <td>Johnson & Johnson</td>   
  199.       <td>64.72</td>   
  200.       <td>0.06</td>   
  201.       <td>0.09</td>   
  202.       <td>9/1 12:00am</td>   
  203.     </tr>   
  204.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  205.       <td>JP Morgan & Chase & Co</td>   
  206.       <td>45.73</td>   
  207.       <td>0.07</td>   
  208.       <td>0.15</td>   
  209.       <td>9/1 12:00am</td>   
  210.     </tr>   
  211.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  212.       <td>McDonald's Corporation</td>   
  213.       <td>36.76</td>   
  214.       <td>0.86</td>   
  215.       <td>2.4</td>   
  216.       <td>9/1 12:00am</td>   
  217.     </tr>   
  218.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  219.       <td>Merck & Co., Inc.</td>   
  220.       <td>40.96</td>   
  221.       <td>0.41</td>   
  222.       <td>1.01</td>   
  223.       <td>9/1 12:00am</td>   
  224.     </tr>   
  225.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  226.       <td>Microsoft Corporation</td>   
  227.       <td>25.84</td>   
  228.       <td>0.14</td>   
  229.       <td>0.54</td>   
  230.       <td>9/1 12:00am</td>   
  231.     </tr>   
  232.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  233.       <td>Pfizer Inc</td>   
  234.       <td>27.96</td>   
  235.       <td>0.4</td>   
  236.       <td>1.45</td>   
  237.       <td>9/1 12:00am</td>   
  238.     </tr>   
  239.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  240.       <td>The Coca-Cola Company</td>   
  241.       <td>45.07</td>   
  242.       <td>0.26</td>   
  243.       <td>0.58</td>   
  244.       <td>9/1 12:00am</td>   
  245.     </tr>   
  246.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  247.       <td>The Home Depot, Inc.</td>   
  248.       <td>34.64</td>   
  249.       <td>0.35</td>   
  250.       <td>1.02</td>   
  251.       <td>9/1 12:00am</td>   
  252.     </tr>   
  253.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  254.       <td>The Procter & Gamble Company</td>   
  255.       <td>61.91</td>   
  256.       <td>0.01</td>   
  257.       <td>0.02</td>   
  258.       <td>9/1 12:00am</td>   
  259.     </tr>   
  260.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  261.       <td>United Technologies Corporation</td>   
  262.       <td>63.26</td>   
  263.       <td>0.55</td>   
  264.       <td>0.88</td>   
  265.       <td>9/1 12:00am</td>   
  266.     </tr>   
  267.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  268.       <td>Verizon Communications</td>   
  269.       <td>35.57</td>   
  270.       <td>0.39</td>   
  271.       <td>1.11</td>   
  272.       <td>9/1 12:00am</td>   
  273.     </tr>   
  274.     <tr style='cursor:pointer;' οndblclick='OpenWin(this);'>   
  275.       <td>Wal-Mart Stores, Inc.</td>   
  276.       <td>45.45</td>   
  277.       <td>0.73</td>   
  278.       <td>1.63</td>   
  279.       <td>9/1 12:00am</td>   
  280.     </tr>   
  281.   </table>   
  282. </div>   
  283.   
  284. <br />   
  285.   
  286. </body>   
  287. </html>  

 

演示(demo)地址:
有错误的地址:
http://extjs.org.cn/extjs/mydemo/0007_window_position_error.html
正确的地址:
http://extjs.org.cn/extjs/mydemo/0007_window_position.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值