Extjs學習筆記--(五,事件)


Extjs中事件包括瀏覽器事件(單機按鈕,鼠標移動等觸發)和內部事件(組件之間的聯動)

 

綁定瀏覽器事件的過程Ext.EventManager

要為元素綁定事件,通常會使用EventManager.on方法

Ext.EventManager.on(el,eventname,fn[,scope,options])

el要綁定的事件元素,可以為元素的id,element對象獲htmlelement對象

eventname一般情況下是事件的名稱,但是在一次定義多個事件時可以是一個對象,當eventname是事件名稱時,fn就是事件要觸發的函數,當eventname是對象時fn會被忽略

scope;作用域

options:事件觸發函數的配置對象

 

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link href="Extjs/resources/css/ext-all.css" rel="stylesheet" />
    <script src="Extjs/bootstrap.js"></script>
    <script src="Extjs/locale/ext-lang-zh_CN.js"></script>
</head>
    <body>
        <input type="text" id="input1" value="請輸入"/>
        <input type="text" id="input2" value="請輸入"/>
        <input type="text" id="input3" value="請輸入"/>
        <script type="text/javascript">

            var focus=function(e, el) {
                if (el.value == '請輸入')
                    el.value = '';
            }
            var blur = function (e, el) {
                if (el.value == '')
                    el.value = '請輸入';
            }
            //單項綁定事件
            Ext.EventManager.on("input1", "focus", focus);
            Ext.EventManager.on("input1", "blur", blur);
            //多項同時綁定
            Ext.EventManager.on("input2", {
                focus: focus,
                blur:blur
            })
            Ext.EventManager.on("input3", {
                focus: { fn: focus },
                blur: { fn: blur }
            })

            </script>

    </body>
</html>
View Code
        
        <div id="div1" style="background:red;height:200px;width:200px">
            
        </div>
        <script type="text/javascript">

            Ext.EventManager.on("div1","click", function(e) {
                alert(e.getXY());
            }, this, { delay: 3000 });
        </script>

 

封裝瀏覽器事件:Ext.EventObject

瀏覽器事件都要封裝成EventObjectImpl對象的實例才能傳遞給觸發函數

EventObject是Ext.EventObjectImpl的實例,相當於一個共享的瀏覽器事件封裝對象,使用setEvent方法將瀏覽器事件封裝成EventObject對象   后再傳遞給觸發函數,從而實現跨平台的處理,所以SetEvent是封裝瀏覽器事件的關鍵方法

EventObjectImpl對象除了提供了事件的基礎屬性外,還提供了一系列處理方法

getCharCode:返回事件的字符編碼

getKey:返回標准化后的鍵盤代碼

getPageX,getX:返回事件的x坐標

getPageY,getY:返回事件的y坐標

getXY:以數組格式返回事件坐標點

getPoint:以point對象格式返回事件的坐標點

getRealatedTarget:返回與事件目標節點相關的節點

getTarget:返回事件目標節點

getWheelDelta:返回標准化后的鼠標滾輪滾動值

hasModifier:如果鍵盤的ctrl,meta,shift,或者alt鍵按下返回true

injectEvent:使用EventObject對象的數據和一個新目標注入一個Dom事件

這是一個多層次的技術,不建議使用

isNavKeyPress:如果鍵盤按下的是Pageend,pageup,end,home,箭頭鍵,回車鍵,tab鍵,或者esc鍵,該值為true

isSpecialKey:如果鍵盤按下的是isNavKeyPress,ctl,backspace,shift,alt,pause等時,為true

preventDefault:組織瀏覽器的默認事件處理

stopEvent:停止事件,執行preventDefault方法,主要用於阻止瀏覽器右鍵菜單,以便使用自己的彈出菜單

stopPropagation:取消事件傳遞

within:檢測事件目標是否是指定對象,如果是則返回true,否則返回false

 

移除瀏覽器事件

EventManager提供了un,removeAll和purgeElement這3種移除瀏覽器事件的方法

1,un

從元素中移除一個事件

Ext.EventManager.un(el,eventname,fn,scope)

el是要移除事件的元素,它可以為元素id,element對象或htmlElement對象

eventname與綁定事件一樣,可以為事件名或配置對象,

fn為要移除的事件,如果沒有,則無法移除,

scope是函數的作用於,必須與綁定事件時一致,方法un是removeListener的簡寫

 

2,removeAll

從元素中移除所有事件

Ext.EventManager.removeAll(el)

el為要移除所有事件的元素

 

3,purgeElement

使用遞歸方式移除元素及其子節點的事件

Ext.EventManager.purgeElement(el[,eventname])

el是要移除事件的元素

eventname是事件的名稱,如果不設置則移除所有事件

 

內部事件對象Ext.util.Event

使用Event對象記錄他自己的信息,還提供了綁定時間,移除事件,觸發事件和清理緩存或延遲事件等方法,

要注意的是Event對象提供的方法只是框架內部使用的接口,而不是外部接口,因而不喲啊嘗試直接使用這些方法

1,addListener

綁定內部事件

2,removeListener

移除事件

3,clearListeners

使用迭代方式停止所有緩存或延時事件

4,Fire

觸發事件

 

為組件增加事件接口:Ext.util.Observable

為組件綁定事件

--1,在創建對象中配置listeners屬性

--2,創建組件后,使用on方法綁定

 為組件觸發事件

--使用fireEvent方法觸發事件

為組件移除事件

--如果組件存在瀏覽器事件,則移除事件時同時移除瀏覽器事件,該操作會使用到Observable對象的removeManagedListener方法

 

 

特定功能的事件對象

DelayedTask 對象只要勇於實現輸入緩沖的功能,在指定的事件間隔內,如果用戶沒有處罰事件,就會執行實際觸發函數

DelayedTask對象提供了一下兩個方法:

cancel:取消最后的隊列任務

delay:取消當前的任務,開始一個新的任務

 

一般任務:Ext.util.TaskRunner與Ext.TaskManager

taskManager對象時TaskRunner對象的一個實例,因而可以直接使用TaskManager對象執行任務

run:任務出發時執行的函數

interval:觸發任務的時間間隔,單位是毫秒

args:可選,為傳遞給觸發函數的參數數組

scope:可選,觸發函數的作用域

duration:可選,任務運行事件超過該值指定的時間后,任務會自動停止,其單位為毫秒

repeat:可選,為任務可執行的次數,超過此指定的次數,任務會 自動停止

TaskRunner對象提供了Start,stop,stopAll三個方法操作任務

 

 

封裝好的單機事件:Ext.util.ClickRepeater

封裝單機事件的作用是簡化代碼的書寫

ClickRepeater對象時從Observable對象繼承的對象因而擁有Observable對象的所有成員

它也定義了自己獨有的配置項

pressCls:單機時應用在元素上的樣式名稱,可實現特殊效果

accelerate:布爾值,如果true,interval和delay配置項會被忽略,操作會慢慢開始並逐漸加速

delay:在該值指定時間后才會再次出發事件

interval:指定觸發事件之間的間隔,默認值是20毫秒

listeners;可選,為對象,可為事件配置對象,可在這里綁定事件

preventDefault:布爾值,如果未true,組織默認的單機事件

stopDefault:布爾值,如果未true,停止默認的單擊事件

 

鍵盤事件

為元素綁定鍵盤事件:Ext.util.KeyMap

KeyMap 對象可以為元素設置一些按鍵,從而實現一些特殊功能,例如,可以在工具欄的按鈕上增加向下箭頭的按鍵,讓他打開子菜單

要使用KeyMap對象,可以在創建實例時定義好配置對象或者配置對象數組,也可以在創建后使用addBinding方法來增加,配置對象主要有一下配置項:

key:觸發事件的鍵盤代碼。可以是單一的鍵盤代碼,也可以是鍵盤代碼數組

shift:布爾值,為true時,可實現與shift鍵一起的組合鍵功能

alt:布爾值,為true時,可以實現與alt鍵一起的組合鍵功能

ctrl:布爾值,為true時,可以實現與ctrl鍵一起的組合鍵功能

handler(fn):事件的觸發函數,fn為別名

scope:觸發函數的作用域

defaultEventAction:事件的默認操作。可以設置為stopEvent,stopPropagation和 preventDefault,如果不設置則沒有默認操作 

 可以使用disable,enable和setDisabled開啟KeyMap對象,而方法isEnable可返回KeyMap的狀態,如果為開啟狀態,返回true

Demo--給html增加enter鍵按下,焦點改變事件

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
        <link href="Extjs/resources/css/ext-all.css" rel="stylesheet" />
    <script src="Extjs/bootstrap.js"></script>
    <script src="Extjs/locale/ext-lang-zh_CN.js"></script>
    <style>
        #form1 span{ height: 30px;width: 200px;display: block;}
    </style>
   
</head>
    <body>
        <div style="margin:20px 0 0 20px">
            <form id="form1">
                
                <span>姓名:<input name="name" type="text" value=""/></span>
                <span>性別:<input name="sex" type="radio" value="男"/><input name="sex" type="radio" value="女"/></span>
                <span>電子郵件:<input type="text" name="email" value=""/></span>
                <span>個人簡介:<textarea name="itro"></textarea></span>

            </form>

        </div>
          <script type="text/javascript">
              var els = Ext.query("#form1 input,textarea");
              Ext.create("Ext.util.KeyMap", "form1", {
                  key: 13,
                  fn: function (key, e) {
                      var el = e.target, target = els, ln = target.length;
                      for (var i = 0; i < ln; i++) {
                          if (target[i] == el) {
                              if (i + 1 == ln) {
                                  target[0].focus();
                              } else {
                                  target[i + 1].focus();
                              }
                          }
                      }
                  },
                  scope: Ext.getDom("form1")
              });
        </script>
    </body>
View Code

 

 

 鍵盤導航:Ext.util.KeyNav

KeyNav的作用是封裝鍵盤導航事件,從而輕松的在頁面中設置鍵盤導航。可用的導航包括回車鍵,空格鍵,4個方向鍵,tab鍵,esc鍵,pageup,pagedown,del,backspace,home,end

與keymap對象一樣,KeyNav也可以通過disabled,enable和setDisabled三個方法開啟或關閉其功能

 

 

 

 


免責聲明!

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



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