最愛Java

          書山有路勤為徑,學海無涯苦作舟

          ExtJs----拖放

          先看最簡單的拖放:

          1new Ext.dd.DDProxy('block');
          2//對應的HTML部分代碼
          3<div id="block" style="background:red;">&nbsp;</div> 

          拖放組件的體系

              
          簡單來說,左面4個組件都是可以隨意拖動的。拖動起來后,直接把他們放到右面那些定義好的區域中。proxy表示可以拖動的對象,target表示拖動的目的地。

           1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
           2<HTML>
           3 <HEAD>
           4  <TITLE> New Document </TITLE>
           5        <link rel="stylesheet" type="text/css" href="ext-2.3.0/resources/css/ext-all.css" />
           6        <style type="text/css">
           7            .red-row{background-color:red!important;}
           8            .yellow-row{background-color:yellow!important;}
           9        
          </style>
          10        <script type="text/javascript" src="ext-2.3.0/adapter/ext/ext-base.js"></script>
          11        <script type="text/javascript" src="ext-2.3.0/ext-all.js"></script>
          12        <style type="text/css">
          13            HR {
          14                clear:both;
          15                visibility:hidden
          16            }

          17            .block {
          18                border:1px red solid;
          19                margin:10px;
          20                min-height:80px;
          21            }

          22            .item {
          23                border:1px green solid;
          24                background:green;
          25                float:left;
          26                margin:10px;
          27                width:50px;
          28                min-height:50px;
          29                text-align:center;
          30            }

          31        
          </style>
          32        <script type="text/javascript">
          33            Ext.onReady(function(){
          34                var proxy = new Ext.dd.DragSource('proxy',{group:'dd'});
          35
          36                proxy.afterDragDrop = function(target,e,id){
          37                    var destEl = Ext.get(id);
          38                    var srcEl = Ext.get(proxy.getEl());
          39                    srcEl.insertBefore(destEl);
          40                }
          ;
          41
          42                var target = new Ext.dd.DDTarget('target','dd');
          43            }
          );
          44        
          </script>
          45 </HEAD>
          46 <BODY>
          47    <div id="proxy" class="item">item</div>
          48    <hr/>
          49    <div id="target" class="block">
          50        <hr/>
          51    </div>
          52 </BODY>
          53</HTML>
          54
          55
          56

              在34,42行分別定義了可拖動的對象和對象存放的目標。兩者具有相同的分組標志dd。只有相同的目的地才能接受可拖放的對象。36-40行則是為拖放增加一些效果而已。

          拖放的事件
              
          startDrag, onDrag, onDragDrop, endDrag是第一類拖放事件函數,他們構成了拖放的主要過程:
                  startDrag(int x, int y):開始拖放事件,參數是x和y的坐標值。
                  onDrag(Event t):正在拖放事件,當拖放一個對象時觸發,參數是mousemove鼠標移動事件。
                  onDragDrop(Event e, String|DragDrop[] id):正在放下事件,當一個對象放到另一個DragDrop對象上時觸發,第一個參數是mouseup鼠標放開事件,第二個參數表示drop的目標位置。如果是在POINT模式下,就會傳入目標元素的id;如果是在INTERSECT模式下,則會傳入放下目標的拖放對象數組。
                  endDrag(Event e):拖放結束事件,在拖放操作結束之后觸發,參數是mouseup鼠標放開事件。
              
              onDragEnter, onDragOut, onDragOver, onInvalidDrag是第二類事件,他們細化了用戶拖動對象的過程。
                  onDragEnter(Event e, String|DragDrop[] id):進入drop區域事件,拖放過程中首次觸碰到drop區域時觸發。第一個參數是mousemove鼠標移動事件,第二個參數表示drop目標位置。如果是在POINT模式下,就會傳入目標元素的id;如果是在INTERSECT模式下,則會傳入放下目標的拖放對象數組。
                  onDragOut(Event e, String|DragDrop[] id):離開drop區域事件,拖放過程中從drop區域離開時觸發。第一個參數是mousemove鼠標移動事件,第二個參數表示drop目標位置。如果是在POINT模式下,就會傳入目標元素的id;如果是在INTERSECT模式下,則會傳入放下目標的拖放對象數組。
                  onDragOver(Event e, String|DragDrop[] id):在drop區域中拖放移動事件,當在drop區域拖放移動時觸發。第一個參數是mousemove鼠標移動事件,第二個參數表示drop目標位置。如果是在POINT模式下,就會傳入目標元素的id;如果是在INTERSECT模式下,則會傳入放下目標的拖放對象數組。
                  onInvalidDrop(Event e):不能drop事件,不在drop區域移動時觸發,參數是mousemove鼠標移動事件。

              onMouseDown和onMouseUp是第三類拖放事件函數,他們用于對原始鼠標事件進行提示,而且已經融合在前兩類拖放事件函數中了。
                  onMouseDown(Event e):鼠標按下事件,參數是mousedown鼠標按下事件。
                  onMouseUp(Event e):鼠標放開事件,參數是mouseup鼠標放開事件。  

          高級拖放----Basic

           1<script type="text/javascript">
           2
              Ext.onReady(function(){
           3    dd1 = new Ext.dd.DD("dd-demo-1");
           4    dd2 = new Ext.dd.DD("dd-demo-2");
           5    dd3 = new Ext.dd.DD("dd-demo-3");
           6    });
           7</
          script>
           8
           9 <BODY>
          10
              <div id="dd-demo-1" class="item"></div>
          11
              <div id="dd-demo-2" class="item"></div>
          12
              <div id="dd-demo-3" class="item"></div>
          13
           </BODY>
              
              以上是最基本的實例,創建了3個可拖動的對象。

          高級拖放----Handle
              
              
          根據以上示例,我們給三個div添加handler。

           1        <script type="text/javascript">
           2            Ext.onReady(function(){
           3                dd1 = new Ext.dd.DD("dd-demo-1");
           4                    dd1.setHandleElId("dd-handle-1a");
           5                    dd1.setHandleElId("dd-handle-1b");
           6                dd2 = new Ext.dd.DD("dd-demo-2");
           7                    dd2.setHandleElId("dd-handle-2");
           8                dd3 = new Ext.dd.DD("dd-demo-3");
           9                    dd3.setOuterHandleElId("dd-handler-3");
          10            }
          );
          11        
          </script>
          12 </HEAD>
          13 <BODY>
          14    <div id="dd-demo-1" class="item">
          15        <div id="dd-handle-1a" class="block">H1</div>
          16        <div id="dd-handle-1b" class="block">H2</div>
          17    </div>
          18    <div id="dd-demo-2" class="item">
          19        <div id="dd-handle-2" class="block">H</div>
          20    </div>
          21    <div id="dd-handler-3" class="item">Outer</div>
          22    <div id="dd-demo-3" class="item"></div>
          23 </BODY>
          24


          高級拖放----On Top

           1//為OnTop重寫監聽拖放事件的函數
           2Ext.ux.DDOnTop = function(id, sGroup, config) {
           3    Ext.ux.DDOnTop.superclass.constructor.apply(this, arguments);
           4};
           5
           6Ext.extends(Ext.ux.DDOnTop, Ext.dd.DD, {
           7    origZ:0,
           8
           9    startDrag:function(x,y){
          10        var style = this.getEl().style;
          11        this.origZ = style.zIndex;
          12        style.zIndex = 999;
          13    },
          14    endDrag:function(e) {
          15        this.getEl().style.zIndex = this.origZ;
          16    }
          17});

              然后只要創建Ext.ux.DDOnTop的對象就可以了。

          高級拖放----Proxy
              
          所謂代理(Proxy),就是拖放時原div不動,跟隨鼠標移動的是一個名為Proxy的拖放。如果需要拖動的對象十分復雜,每次都讓它跟隨鼠標移動,很可能會使瀏覽器負荷過大,甚至出現頁面停頓的現象。這時就需要使用代理來避免重復渲染復雜對象。
              為了使用代理,最簡單的方法就是把原來的Ext.dd.DD改成Ext.dd.DDProxy,如:
                   dd1 = new Ext.dd.DDProxy("dd-demo-1");
              這樣就會出現一個只有外框的空白Proxy,如果我們希望自定義Proxy的形式,也可以制作,如:
                  dd3 = new Ext.dd.DDProxy("dd-demo-3","default",{
                      dragElId : "dd-demo-3-proxy",
                      resizeFrame : false
                  });
              為了實現自定義Proxy,我們在創建DDProxy時需要設置3個參數。第一個參數是對應的div的id;第二個參數是拖放的組,只有同組的Drag才能放到同組的Drop上;第三個參數是附加參數。
              dragElId的值是我們自定義的proxy,而resizeFrame : false告訴EXT不用使proxy的大小與原div一樣。
              為了使proxy與dd-demo-3對應,我們還需要在HTML中加入:
                  <div id="dd-demo-proxy">proxy-3</div>

          高級拖放----Grid

          1dd1 = new Ext.dd.DD("dragDiv1");
          2dd1.setXConstraint(1000,1000,25
          );
          3dd1.setYConstraint(1000,1000,25);

              注意setXConstraint()和setYConstraint()兩個方法,其所帶的參數表示左側/上側最遠距離,右側/下側最遠距離,每次移動距離。
             

          posted on 2009-10-23 23:42 Brian 閱讀(3122) 評論(0)  編輯  收藏 所屬分類: JScript

          公告


          導航

          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 上思县| 会同县| 吴忠市| 密云县| 太仓市| 揭阳市| 东兰县| 三门峡市| 雅安市| 揭西县| 容城县| 同江市| 鹿泉市| 桂林市| 章丘市| 南郑县| 海口市| 板桥市| 盐边县| 墨玉县| 鸡西市| 日土县| 高台县| 磴口县| 肥城市| 民和| 桓台县| 牟定县| 宜兰市| 玛多县| 大同市| 镇沅| 延庆县| 礼泉县| 安陆市| 方城县| 盐城市| 循化| 遂平县| 石楼县| 八宿县|