亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? keymap.js

?? ext js demo ext學習資料
?? JS
字號:
/*
 * Ext JS Library 1.1 RC 1
 * Copyright(c) 2006-2007, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://www.extjs.com/license
 */

/**
 * @class Ext.KeyMap
 * Handles mapping keys to actions for an element. One key map can be used for multiple actions.
 * The constructor accepts the same config object as defined by {@link #addBinding}.
 * If you bind a callback function to a KeyMap, anytime the KeyMap handles an expected key
 * combination it will call the function with this signature (if the match is a multi-key
 * combination the callback will still be called only once): (String key, Ext.EventObject e)
 * A KeyMap can also handle a string representation of keys.<br />
 * Usage:
 <pre><code>
// map one key by key code
var map = new Ext.KeyMap("my-element", {
    key: 13, // or Ext.EventObject.ENTER
    fn: myHandler,
    scope: myObject
});

// map multiple keys to one action by string
var map = new Ext.KeyMap("my-element", {
    key: "a\r\n\t",
    fn: myHandler,
    scope: myObject
});

// map multiple keys to multiple actions by strings and array of codes
var map = new Ext.KeyMap("my-element", [
    {
        key: [10,13],
        fn: function(){ alert("Return was pressed"); }
    }, {
        key: "abc",
        fn: function(){ alert('a, b or c was pressed'); }
    }, {
        key: "\t",
        ctrl:true,
        shift:true,
        fn: function(){ alert('Control + shift + tab was pressed.'); }
    }
]);
</code></pre>
 * <b>Note: A KeyMap starts enabled</b>
 * @constructor
 * @param {String/HTMLElement/Ext.Element} el The element to bind to
 * @param {Object} config The config (see {@link #addBinding})
 * @param {String} eventName (optional) The event to bind to (defaults to "keydown")
 */
Ext.KeyMap = function(el, config, eventName){
    this.el  = Ext.get(el);
    this.eventName = eventName || "keydown";
    this.bindings = [];
    if(config){
        this.addBinding(config);
    }
    this.enable();
};

Ext.KeyMap.prototype = {
    /**
     * True to stop the event from bubbling and prevent the default browser action if the
     * key was handled by the KeyMap (defaults to false)
     * @type Boolean
     */
    stopEvent : false,

    /**
     * Add a new binding to this KeyMap. The following config object properties are supported:
     * <pre>
Property    Type             Description
----------  ---------------  ----------------------------------------------------------------------
key         String/Array     A single keycode or an array of keycodes to handle
shift       Boolean          True to handle key only when shift is pressed (defaults to false)
ctrl        Boolean          True to handle key only when ctrl is pressed (defaults to false)
alt         Boolean          True to handle key only when alt is pressed (defaults to false)
fn          Function         The function to call when KeyMap finds the expected key combination
scope       Object           The scope of the callback function
</pre>
     *
     * Usage:
     * <pre><code>
// Create a KeyMap
var map = new Ext.KeyMap(document, {
    key: Ext.EventObject.ENTER,
    fn: handleKey,
    scope: this
});

//Add a new binding to the existing KeyMap later
map.addBinding({
    key: 'abc',
    shift: true,
    fn: handleKey,
    scope: this
});
</code></pre>
     * @param {Object/Array} config A single KeyMap config or an array of configs
     */
	addBinding : function(config){
        if(config instanceof Array){
            for(var i = 0, len = config.length; i < len; i++){
                this.addBinding(config[i]);
            }
            return;
        }
        var keyCode = config.key,
            shift = config.shift, 
            ctrl = config.ctrl, 
            alt = config.alt,
            fn = config.fn,
            scope = config.scope;
        if(typeof keyCode == "string"){
            var ks = [];
            var keyString = keyCode.toUpperCase();
            for(var j = 0, len = keyString.length; j < len; j++){
                ks.push(keyString.charCodeAt(j));
            }
            keyCode = ks;
        }
        var keyArray = keyCode instanceof Array;
        var handler = function(e){
            if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) &&  (!alt || e.altKey)){
                var k = e.getKey();
                if(keyArray){
                    for(var i = 0, len = keyCode.length; i < len; i++){
                        if(keyCode[i] == k){
                          if(this.stopEvent){
                              e.stopEvent();
                          }
                          fn.call(scope || window, k, e);
                          return;
                        }
                    }
                }else{
                    if(k == keyCode){
                        if(this.stopEvent){
                           e.stopEvent();
                        }
                        fn.call(scope || window, k, e);
                    }
                }
            }
        };
        this.bindings.push(handler);  
	},

    /**
     * Shorthand for adding a single key listener
     * @param {Number/Array/Object} key Either the numeric key code, array of key codes or an object with the
     * following options:
     * {key: (number or array), shift: (true/false), ctrl: (true/false), alt: (true/false)}
     * @param {Function} fn The function to call
     * @param {Object} scope (optional) The scope of the function
     */
    on : function(key, fn, scope){
        var keyCode, shift, ctrl, alt;
        if(typeof key == "object" && !(key instanceof Array)){
            keyCode = key.key;
            shift = key.shift;
            ctrl = key.ctrl;
            alt = key.alt;
        }else{
            keyCode = key;
        }
        this.addBinding({
            key: keyCode,
            shift: shift,
            ctrl: ctrl,
            alt: alt,
            fn: fn,
            scope: scope
        })
    },

    // private
    handleKeyDown : function(e){
	    if(this.enabled){ //just in case
    	    var b = this.bindings;
    	    for(var i = 0, len = b.length; i < len; i++){
    	        b[i].call(this, e);
    	    }
	    }
	},
	
	/**
	 * Returns true if this KeyMap is enabled
	 * @return {Boolean} 
	 */
	isEnabled : function(){
	    return this.enabled;  
	},
	
	/**
	 * Enables this KeyMap
	 */
	enable: function(){
		if(!this.enabled){
		    this.el.on(this.eventName, this.handleKeyDown, this);
		    this.enabled = true;
		}
	},

	/**
	 * Disable this KeyMap
	 */
	disable: function(){
		if(this.enabled){
		    this.el.removeListener(this.eventName, this.handleKeyDown, this);
		    this.enabled = false;
		}
	}
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.亚洲激情.com| 色网综合在线观看| 波多野结衣精品在线| 欧美精品一区二区三区高清aⅴ | 国产成人精品综合在线观看| 欧美在线看片a免费观看| 久久久久9999亚洲精品| 日本不卡在线视频| 欧美性猛片aaaaaaa做受| 中文字幕第一区第二区| 美女视频黄久久| 欧美麻豆精品久久久久久| 1区2区3区欧美| 国产精品1024| 欧美精品一区二区久久久| 五月婷婷激情综合| 欧美亚洲国产一区在线观看网站| 综合自拍亚洲综合图不卡区| 成人免费高清在线观看| 久久久久久久久久久久久夜| 久久 天天综合| 欧美va亚洲va| 国产在线一区二区| 久久色在线观看| 精品一区二区免费在线观看| 日韩精品一区二区三区中文精品| 爽好久久久欧美精品| 欧美日韩一区二区三区在线看 | 亚洲精品一区二区三区影院 | 粉嫩绯色av一区二区在线观看| 久久色视频免费观看| 国产麻豆成人精品| 国产欧美日韩精品一区| 国产成人8x视频一区二区| 国产精品无圣光一区二区| 国产91高潮流白浆在线麻豆| 欧美激情一区二区三区蜜桃视频 | 狠狠色丁香久久婷婷综合丁香| 日韩免费一区二区| 国产一区二区三区四区五区入口 | 蜜桃免费网站一区二区三区| 日韩欧美的一区| 久久99国产精品尤物| 久久久久久久免费视频了| 成人一区在线观看| 一区二区三区美女视频| 欧美日韩精品一区二区天天拍小说| 午夜欧美大尺度福利影院在线看| 91精品中文字幕一区二区三区| 日本va欧美va瓶| 久久久亚洲精品石原莉奈| 成人18精品视频| av中文字幕在线不卡| 亚洲综合999| 精品国内二区三区| 99久久综合99久久综合网站| 午夜精品福利在线| 国产婷婷一区二区| 欧美三级欧美一级| 精品亚洲成a人在线观看| 亚洲天堂中文字幕| 日韩精品中文字幕在线不卡尤物| 成人午夜视频在线| 丝袜亚洲精品中文字幕一区| 日本一区二区免费在线观看视频| 欧美三级乱人伦电影| 国产电影一区二区三区| 亚洲午夜私人影院| 久久久精品人体av艺术| 欧美日韩综合在线免费观看| 国产精品主播直播| 亚洲国产视频在线| 国产精品黄色在线观看| 欧美一区二区三区视频在线| 91麻豆蜜桃一区二区三区| 六月丁香综合在线视频| 一区二区三区欧美亚洲| 国产欧美视频在线观看| 欧美日产在线观看| 99久久伊人精品| 国产曰批免费观看久久久| 亚洲福利视频一区二区| 中文字幕日本乱码精品影院| 日韩午夜在线观看视频| 欧美午夜视频网站| 99麻豆久久久国产精品免费优播| 精品在线免费观看| 青青草原综合久久大伊人精品 | 91精品国产麻豆国产自产在线 | k8久久久一区二区三区 | 91久久香蕉国产日韩欧美9色| 久久成人精品无人区| 亚洲成人一二三| 亚洲欧洲av一区二区三区久久| 亚洲一区二区三区四区在线免费观看 | 精品99久久久久久| 欧美精品一卡两卡| 在线观看三级视频欧美| 成人精品小蝌蚪| 国产成人在线视频免费播放| 国产原创一区二区三区| 精彩视频一区二区| 免费av成人在线| 人人爽香蕉精品| 日本aⅴ精品一区二区三区| 丝袜美腿高跟呻吟高潮一区| 亚洲国产精品一区二区尤物区| 中文字幕在线观看不卡视频| 中文字幕第一区第二区| 国产清纯白嫩初高生在线观看91 | 成人国产精品免费观看视频| 国产九色精品成人porny| 国产在线一区观看| 国产福利精品导航| 成人免费视频app| www.综合网.com| 一本高清dvd不卡在线观看| 在线观看亚洲专区| 欧美老肥妇做.爰bbww| 91精品国产麻豆| 久久久综合视频| 国产精品九色蝌蚪自拍| 一区二区免费看| 五月天久久比比资源色| 麻豆91在线看| 国产伦精品一区二区三区免费迷 | 欧美国产精品一区二区三区| 中文字幕在线观看一区| 一区二区免费在线| 日本乱人伦aⅴ精品| 欧美视频中文字幕| 精品久久五月天| 国产精品福利一区| 亚洲一区二区在线观看视频| 日韩黄色在线观看| 国产激情视频一区二区三区欧美 | 国产精品视频一二| 亚洲精品国产第一综合99久久| 亚洲444eee在线观看| 狠狠狠色丁香婷婷综合久久五月| 国产99久久久国产精品潘金| 一本久久精品一区二区| 日韩小视频在线观看专区| 欧美国产97人人爽人人喊| 一区二区三区精品| 国产麻豆精品theporn| 91黄视频在线| 久久久久亚洲综合| 一区二区三区在线视频观看58| 麻豆一区二区三区| 色噜噜狠狠色综合中国| 2019国产精品| 午夜婷婷国产麻豆精品| 国产a久久麻豆| 欧美精品久久99久久在免费线| 久久品道一品道久久精品| 亚洲国产一区二区三区| 国产不卡在线播放| 日韩三级在线观看| 夜夜爽夜夜爽精品视频| 国产成人在线影院 | 欧美日韩一区二区三区四区五区| 久久精品欧美一区二区三区麻豆| 一区二区国产盗摄色噜噜| 国产精品一区二区你懂的| 欧美挠脚心视频网站| 亚洲视频在线一区观看| 国产美女av一区二区三区| 欧美精品xxxxbbbb| 亚洲老妇xxxxxx| 成人性生交大片免费 | 欧美精品在线观看播放| 1区2区3区国产精品| 国产真实乱对白精彩久久| 日韩午夜电影在线观看| 一区二区日韩av| 91美女片黄在线观看91美女| 欧美国产欧美亚州国产日韩mv天天看完整| 青青草成人在线观看| 国产午夜亚洲精品理论片色戒| 日韩高清电影一区| 欧美三级日本三级少妇99| 亚洲精品国产一区二区精华液| 成人avav在线| 中文字幕乱码久久午夜不卡| 国产一区二区三区免费看| 欧美一级夜夜爽| 奇米精品一区二区三区在线观看| 欧美性生活影院| 亚洲一区二区三区不卡国产欧美| 一本一道综合狠狠老| 亚洲精品精品亚洲| 欧美自拍偷拍午夜视频| 一区二区三区免费网站| 在线观看国产一区二区| 亚洲综合丝袜美腿| 欧美另类videos死尸| 亚洲成年人影院| 日韩手机在线导航| 精品一区二区三区免费播放 |