一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

OpenLayers項(xiàng)目分析——(十)事件機(jī)制分析-睜眼瞎看-3sNews.Ne...

 Java修煉館 2011-05-03

(十)OpenLayers事件機(jī)制分析

  OpenLayers中的事件封裝是其一大亮點(diǎn),非常值得學(xué)習(xí)。說到事件機(jī)制,在宏觀上不得不涉及控件OpenLayers.Control類、OpenLayers. Marker類、OpenLayers.Icon類等。是這樣,在外觀上控件通過Marker和Icon表現(xiàn)出來,而事件包含在控件之后,用他們自己的話說就是:The controls that wrap handlers define the methods that correspond to these abstract events 。順便再說一句,控件實(shí)現(xiàn)的核心是handler類,每個(gè)控件中都包含對(duì)handler的引用,通過active和deactive兩個(gè)方法,實(shí)現(xiàn)動(dòng)態(tài)的激活和注銷。

  OpenLayers中的事件有兩種:一種是瀏覽器事件(比如onclick,onmouseup等),另一種是自定義的事件。自定義的事件像addLayer ,addControl等,不象瀏覽器事件會(huì)綁定相應(yīng)的dom節(jié)點(diǎn),它是與layer、map等關(guān)聯(lián)的。

  OpenLayers中支持的瀏覽器事件類型有(以常量的形式提供的): 

    BROWSER_EVENTS: [

        "mouseover", "mouseout",

        "mousedown", "mouseup", "mousemove", 

        "click", "dblclick",

        "resize", "focus", "blur" ] 

   看看構(gòu)造函數(shù)的的實(shí)現(xiàn)過程:

    initialize: function (object, element, eventTypes, fallThrough) {

        this.object     = object;

        this.element    = element;

        this.eventTypes = eventTypes;

        this.fallThrough = fallThrough;

        this.listeners  = {};

        // keep a bound copy of handleBrowserEvent() so that we can

        // pass the same function to both Event.observe() and .stopObserving()

        this.eventHandler = OpenLayers.Function.bindAsEventListener(

            this.handleBrowserEvent, this

        );

        // if eventTypes is specified, create a listeners list for each 

        // custom application event.

        if (this.eventTypes != null) {

            for (var i = 0; i < this.eventTypes.length; i++) {

                this.addEventType(this.eventTypes[i]);

            }

        }

        

        // if a dom element is specified, add a listeners list 

        // for browser events on the element and register them

        if (this.element != null) {

            this.attachToElement(element);

        }

    }

  可以這樣理解:

  initialize(object, element, eventTypes, fallThrough)方法會(huì)將以數(shù)組eventTypes的每個(gè)元素為key建立哈希表listeners,表中每個(gè)鍵對(duì)應(yīng)一個(gè)數(shù)組。還會(huì)給this.eventHandler賦值,它實(shí)際只是一個(gè)包裝了triggerEvent事件觸發(fā)函數(shù)的方法,所有的事件,包括瀏覽器事件和自定義事件都是通過它來中轉(zhuǎn)的。然后initialize將所有的瀏覽器事件放入listeners中,并為其綁定相應(yīng)的dom節(jié)點(diǎn)element和this.eventHandler事件處理函數(shù)OpenLayers.Event.observe(element, eventType, this.eventHandler),節(jié)點(diǎn)上事件觸發(fā)的時(shí)候會(huì)把事件傳給this.eventHandler,它調(diào)用triggerEvent,從而將事件傳出來。

  來看其他的成員函數(shù):

  addEventType:Add a new event type to this events object;

  attachToElement:把瀏覽器事件關(guān)聯(lián)到相應(yīng)的DOM元素上;

  register: Register an event on the events object.

        register: function (type, obj, func) {

           if (func != null) {

               if (obj == null)  {

                  obj = this.object;

              }

            var listeners = this.listeners[type];

            if (listeners != null) {

                listeners.push( {obj: obj, func: func} );

            }

        }

    }

其中,func參數(shù)是預(yù)先定義的回調(diào)函數(shù)。

  unregister:注銷方法;

  remove:Remove all listeners for a given event type. 

  triggerEvent:Trigger a specified registered event。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    97人妻精品免费一区二区| 成人精品网一区二区三区| 国产原创中文av在线播放| 亚洲综合日韩精品欧美综合区| 国产av一区二区三区四区五区| 亚洲一区二区精品免费视频| 白白操白白在线免费观看 | 国产精品推荐在线一区| 白白操白白在线免费观看| 国产一区二区在线免费| 好骚国产99在线中文| 国产又色又粗又黄又爽| 中文字幕一区二区三区大片| 久一视频这里只有精品| 欧美综合色婷婷欧美激情| 成人你懂的在线免费视频| 国产午夜福利片在线观看| 99久只有精品免费视频播放| 国产亚州欧美一区二区| 欧美日韩一级aa大片| 亚洲一区二区三区三州| 白丝美女被插入视频在线观看| 国产精品夜色一区二区三区不卡| 欧美一区日韩一区日韩一区| 日本加勒比中文在线观看| 午夜福利视频六七十路熟女| 国产午夜免费在线视频| 又大又长又粗又猛国产精品| 99久久精品视频一区二区| 精品一区二区三区人妻视频| 能在线看的视频你懂的| 日韩美成人免费在线视频| 邻居人妻人公侵犯人妻视频| 欧美日韩乱码一区二区三区| 国产亚洲神马午夜福利| 蜜臀人妻一区二区三区| 翘臀少妇成人一区二区| 邻居人妻人公侵犯人妻视频| 夫妻性生活黄色录像视频| 欧洲偷拍视频中文字幕| 亚洲国产成人爱av在线播放下载|