(function (root, factory) { if (typeof exports === 'object') { module.exports = factory(); } else if (typeof define === 'function' && define.amd) { define(factory); } else { root.BMapLib = root.BMapLib || {}; root.BMapLib.TextIconOverlay = root.BMapLib.TextIconOverlay || factory(); } })(this, function() { var T, baidu = T = baidu || {version: "1.3.8"}; var context = {} //鎻愬嚭guid锛岄槻姝㈠湪涓庤€佺増鏈琓angram娣风敤鏃� //鍦ㄤ笅涓€琛岄敊璇殑淇敼context[undefined] baidu.guid = "$BAIDU$"; //Tangram鍙兘琚斁鍦ㄩ棴鍖呬腑 //涓€浜涢〉闈㈢骇鍒敮涓€鐨勫睘鎬э紝闇€瑕佹寕杞藉湪context[baidu.guid]涓� context[baidu.guid] = context[baidu.guid] || {}; /** * @ignore * @namespace baidu.dom 鎿嶄綔dom鐨勬柟娉曘€� */ baidu.dom = baidu.dom || {}; /** * 浠庢枃妗d腑鑾峰彇鎸囧畾鐨凞OM鍏冪礌 * @name baidu.dom.g * @function * @grammar baidu.dom.g(id) * @param {string|HTMLElement} id 鍏冪礌鐨刬d鎴朌OM鍏冪礌 * @shortcut g,T.G * @meta standard * @see baidu.dom.q * * @returns {HTMLElement|null} 鑾峰彇鐨勫厓绱狅紝鏌ユ壘涓嶅埌鏃惰繑鍥瀗ull,濡傛灉鍙傛暟涓嶅悎娉曪紝鐩存帴杩斿洖鍙傛暟 */ baidu.dom.g = function (id) { if ('string' == typeof id || id instanceof String) { return document.getElementById(id); } else if (id && id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) { return id; } return null; }; // 澹版槑蹇嵎鏂规硶 baidu.g = baidu.G = baidu.dom.g; /** * 鑾峰彇鐩爣鍏冪礌鎵€灞炵殑document瀵硅薄 * @name baidu.dom.getDocument * @function * @grammar baidu.dom.getDocument(element) * @param {HTMLElement|string} element 鐩爣鍏冪礌鎴栫洰鏍囧厓绱犵殑id * @meta standard * @see baidu.dom.getWindow * * @returns {HTMLDocument} 鐩爣鍏冪礌鎵€灞炵殑document瀵硅薄 */ baidu.dom.getDocument = function (element) { element = baidu.dom.g(element); return element.nodeType == 9 ? element : element.ownerDocument || element.document; }; /** * @ignore * @namespace baidu.lang 瀵硅瑷€灞傞潰鐨勫皝瑁咃紝鍖呮嫭绫诲瀷鍒ゆ柇銆佹ā鍧楁墿灞曘€佺户鎵垮熀绫讳互鍙婂璞¤嚜瀹氫箟浜嬩欢鐨勬敮鎸併€� */ baidu.lang = baidu.lang || {}; /** * 鍒ゆ柇鐩爣鍙傛暟鏄惁string绫诲瀷鎴朣tring瀵硅薄 * @name baidu.lang.isString * @function * @grammar baidu.lang.isString(source) * @param {Any} source 鐩爣鍙傛暟 * @shortcut isString * @meta standard * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate * * @returns {boolean} 绫诲瀷鍒ゆ柇缁撴灉 */ baidu.lang.isString = function (source) { return '[object String]' == Object.prototype.toString.call(source); }; // 澹版槑蹇嵎鏂规硶 baidu.isString = baidu.lang.isString; /** * 浠庢枃妗d腑鑾峰彇鎸囧畾鐨凞OM鍏冪礌 * **鍐呴儴鏂规硶** * * @param {string|HTMLElement} id 鍏冪礌鐨刬d鎴朌OM鍏冪礌 * @meta standard * @return {HTMLElement} DOM鍏冪礌锛屽鏋滀笉瀛樺湪锛岃繑鍥瀗ull锛屽鏋滃弬鏁颁笉鍚堟硶锛岀洿鎺ヨ繑鍥炲弬鏁� */ baidu.dom._g = function (id) { if (baidu.lang.isString(id)) { return document.getElementById(id); } return id; }; // 澹版槑蹇嵎鏂规硶 baidu._g = baidu.dom._g; /** * @ignore * @namespace baidu.browser 鍒ゆ柇娴忚鍣ㄧ被鍨嬪拰鐗规€х殑灞炴€с€� */ baidu.browser = baidu.browser || {}; if (/msie (\d+\.\d)/i.test(navigator.userAgent)) { //IE 8涓嬶紝浠ocumentMode涓哄噯 //鍦ㄧ櫨搴︽ā鏉夸腑锛屽彲鑳戒細鏈�$锛岄槻姝㈠啿绐侊紝灏�$1 鍐欐垚 \x241 /** * 鍒ゆ柇鏄惁涓篿e娴忚鍣� * @property ie ie鐗堟湰鍙� * @grammar baidu.browser.ie * @meta standard * @shortcut ie * @see baidu.browser.firefox,baidu.browser.safari,baidu.browser.opera,baidu.browser.chrome,baidu.browser.maxthon */ baidu.browser.ie = baidu.ie = document.documentMode || + RegExp['\x241']; } /** * 鑾峰彇鐩爣鍏冪礌鐨刢omputed style鍊笺€傚鏋滃厓绱犵殑鏍峰紡鍊间笉鑳借娴忚鍣ㄨ绠楋紝鍒欎細杩斿洖绌哄瓧绗︿覆锛圛E锛� * * @author berg * @name baidu.dom.getComputedStyle * @function * @grammar baidu.dom.getComputedStyle(element, key) * @param {HTMLElement|string} element 鐩爣鍏冪礌鎴栫洰鏍囧厓绱犵殑id * @param {string} key 瑕佽幏鍙栫殑鏍峰紡鍚� * * @see baidu.dom.getStyle * * @returns {string} 鐩爣鍏冪礌鐨刢omputed style鍊� */ baidu.dom.getComputedStyle = function(element, key){ element = baidu.dom._g(element); var doc = baidu.dom.getDocument(element), styles; if (doc.defaultView && doc.defaultView.getComputedStyle) { styles = doc.defaultView.getComputedStyle(element, null); if (styles) { return styles[key] || styles.getPropertyValue(key); } } return ''; }; /** * 鎻愪緵缁檚etStyle涓巊etStyle浣跨敤 */ baidu.dom._styleFixer = baidu.dom._styleFixer || {}; /** * 鎻愪緵缁檚etStyle涓巊etStyle浣跨敤 */ baidu.dom._styleFilter = baidu.dom._styleFilter || []; /** * 涓鸿幏鍙栧拰璁剧疆鏍峰紡鐨勮繃婊ゅ櫒 * @private * @meta standard */ baidu.dom._styleFilter.filter = function (key, value, method) { for (var i = 0, filters = baidu.dom._styleFilter, filter; filter = filters[i]; i++) { if (filter = filter[method]) { value = filter(key, value); } } return value; }; /** * @ignore * @namespace baidu.string 鎿嶄綔瀛楃涓茬殑鏂规硶銆� */ baidu.string = baidu.string || {}; /** * 灏嗙洰鏍囧瓧绗︿覆杩涜椹煎嘲鍖栧鐞� * @name baidu.string.toCamelCase * @function * @grammar baidu.string.toCamelCase(source) * @param {string} source 鐩爣瀛楃涓� * @remark * 鏀寔鍗曡瘝浠モ€�-_鈥濆垎闅� * @meta standard * * @returns {string} 椹煎嘲鍖栧鐞嗗悗鐨勫瓧绗︿覆 */ baidu.string.toCamelCase = function (source) { //鎻愬墠鍒ゆ柇锛屾彁楂榞etStyle绛夌殑鏁堢巼 thanks xianwei if (source.indexOf('-') < 0 && source.indexOf('_') < 0) { return source; } return source.replace(/[-_][^-_]/g, function (match) { return match.charAt(1).toUpperCase(); }); }; /** * 鑾峰彇鐩爣鍏冪礌鐨勬牱寮忓€� * @name baidu.dom.getStyle * @function * @grammar baidu.dom.getStyle(element, key) * @param {HTMLElement|string} element 鐩爣鍏冪礌鎴栫洰鏍囧厓绱犵殑id * @param {string} key 瑕佽幏鍙栫殑鏍峰紡鍚� * @remark * * 涓轰簡绮剧畝浠g爜锛屾湰妯″潡榛樿涓嶅浠讳綍娴忚鍣ㄨ繑鍥炲€艰繘琛屽綊涓€鍖栧鐞嗭紙濡備娇鐢╣etStyle鏃讹紝涓嶅悓娴忚鍣ㄤ笅鍙兘杩斿洖rgb棰滆壊鎴杊ex棰滆壊锛夛紝涔熶笉浼氫慨澶嶆祻瑙堝櫒鐨刡ug鍜屽樊寮傛€э紙濡傝缃甀E鐨刦loat灞炴€у彨styleFloat锛宖irefox鍒欐槸cssFloat锛夈€�<br /> * baidu.dom._styleFixer鍜宐aidu.dom._styleFilter鍙互涓烘湰妯″潡鎻愪緵鏀寔銆�<br /> * 鍏朵腑_styleFilter鑳藉棰滆壊鍜宲x杩涜褰掍竴鍖栧鐞嗭紝_styleFixer鑳藉display锛宖loat锛宱pacity锛宼extOverflow鐨勬祻瑙堝櫒鍏煎鎬ug杩涜澶勭悊銆� * @shortcut getStyle * @meta standard * @see baidu.dom.setStyle,baidu.dom.setStyles, baidu.dom.getComputedStyle * * @returns {string} 鐩爣鍏冪礌鐨勬牱寮忓€� */ baidu.dom.getStyle = function (element, key) { var dom = baidu.dom; element = dom.g(element); key = baidu.string.toCamelCase(key); //computed style, then cascaded style, then explicitly set style. var value = element.style[key] || (element.currentStyle ? element.currentStyle[key] : "") || dom.getComputedStyle(element, key); // 鍦ㄥ彇涓嶅埌鍊肩殑鏃跺€欙紝鐢╢ixer杩涜淇 if (!value) { var fixer = dom._styleFixer[key]; if(fixer){ value = fixer.get ? fixer.get(element) : baidu.dom.getStyle(element, fixer); } } /* 妫€鏌ョ粨鏋滆繃婊ゅ櫒 */ if (fixer = dom._styleFilter) { value = fixer.filter(key, value, 'get'); } return value; }; // 澹版槑蹇嵎鏂规硶 baidu.getStyle = baidu.dom.getStyle; if (/opera\/(\d+\.\d)/i.test(navigator.userAgent)) { /** * 鍒ゆ柇鏄惁涓簅pera娴忚鍣� * @property opera opera鐗堟湰鍙� * @grammar baidu.browser.opera * @meta standard * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome */ baidu.browser.opera = + RegExp['\x241']; } /** * 鍒ゆ柇鏄惁涓簑ebkit鍐呮牳 * @property isWebkit * @grammar baidu.browser.isWebkit * @meta standard * @see baidu.browser.isGecko */ baidu.browser.isWebkit = /webkit/i.test(navigator.userAgent); /** * 鍒ゆ柇鏄惁涓篻ecko鍐呮牳 * @property isGecko * @grammar baidu.browser.isGecko * @meta standard * @see baidu.browser.isWebkit */ baidu.browser.isGecko = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent); /** * 鍒ゆ柇鏄惁涓ユ牸鏍囧噯鐨勬覆鏌撴ā寮� * @property isStrict * @grammar baidu.browser.isStrict * @meta standard */ baidu.browser.isStrict = document.compatMode == "CSS1Compat"; /** * 鑾峰彇鐩爣鍏冪礌鐩稿浜庢暣涓枃妗e乏涓婅鐨勪綅缃� * @name baidu.dom.getPosition * @function * @grammar baidu.dom.getPosition(element) * @param {HTMLElement|string} element 鐩爣鍏冪礌鎴栫洰鏍囧厓绱犵殑id * @meta standard * * @returns {Object} 鐩爣鍏冪礌鐨勪綅缃紝閿€间负top鍜宭eft鐨凮bject銆� */ baidu.dom.getPosition = function (element) { element = baidu.dom.g(element); var doc = baidu.dom.getDocument(element), browser = baidu.browser, getStyle = baidu.dom.getStyle, // Gecko 1.9鐗堟湰浠ヤ笅鐢╣etBoxObjectFor璁$畻浣嶇疆 // 浣嗘槸鏌愪簺鎯呭喌涓嬫槸鏈塨ug鐨� // 瀵逛簬杩欎簺鏈塨ug鐨勬儏鍐� // 浣跨敤閫掑綊鏌ユ壘鐨勬柟寮� BUGGY_GECKO_BOX_OBJECT = browser.isGecko > 0 && doc.getBoxObjectFor && getStyle(element, 'position') == 'absolute' && (element.style.top === '' || element.style.left === ''), pos = {"left":0,"top":0}, viewport = (browser.ie && !browser.isStrict) ? doc.body : doc.documentElement, parent, box; if(element == viewport){ return pos; } if(element.getBoundingClientRect){ // IE and Gecko 1.9+ //褰揌TML鎴栬€匓ODY鏈塨order width鏃�, 鍘熺敓鐨刧etBoundingClientRect杩斿洖鍊兼槸涓嶇鍚堥鏈熺殑 //鑰冭檻鍒伴€氬父鎯呭喌涓� HTML鍜孊ODY鐨刡order鍙細璁炬垚0px,鎵€浠ュ拷鐣ヨ闂. box = element.getBoundingClientRect(); pos.left = Math.floor(box.left) + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft); pos.top = Math.floor(box.top) + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop); // IE浼氱粰HTML鍏冪礌娣诲姞涓€涓猙order锛岄粯璁ゆ槸medium锛�2px锛� // 浣嗘槸鍦↖E 6 7 鐨勬€紓妯″紡涓嬶紝鍙互琚玥tml { border: 0; } 杩欐潯css瑙勫垯瑕嗙洊 // 鍦↖E7鐨勬爣鍑嗘ā寮忎笅锛宐order姘歌繙鏄�2px锛岃繖涓€奸€氳繃clientLeft 鍜� clientTop鍙栧緱 // 浣嗘槸銆傘€傘€傚湪IE 6 7鐨勬€紓妯″紡锛屽鏋滅敤鎴蜂娇鐢╟ss瑕嗙洊浜嗛粯璁ょ殑medium // clientTop鍜宑lientLeft涓嶄細鏇存柊 pos.left -= doc.documentElement.clientLeft; pos.top -= doc.documentElement.clientTop; var htmlDom = doc.body, // 鍦ㄨ繖閲岋紝涓嶄娇鐢╡lement.style.borderLeftWidth锛屽彧鏈塩omputedStyle鏄彲淇$殑 htmlBorderLeftWidth = parseInt(getStyle(htmlDom, 'borderLeftWidth')), htmlBorderTopWidth = parseInt(getStyle(htmlDom, 'borderTopWidth')); if(browser.ie && !browser.isStrict){ pos.left -= isNaN(htmlBorderLeftWidth) ? 2 : htmlBorderLeftWidth; pos.top -= isNaN(htmlBorderTopWidth) ? 2 : htmlBorderTopWidth; } } else { // safari/opera/firefox parent = element; do { pos.left += parent.offsetLeft; pos.top += parent.offsetTop; // safari閲岄潰锛屽鏋滈亶鍘嗗埌浜嗕竴涓猣ixed鐨勫厓绱狅紝鍚庨潰鐨刼ffset閮戒笉鍑嗕簡 if (browser.isWebkit > 0 && getStyle(parent, 'position') == 'fixed') { pos.left += doc.body.scrollLeft; pos.top += doc.body.scrollTop; break; } parent = parent.offsetParent; } while (parent && parent != element); // 瀵筨ody offsetTop鐨勪慨姝� if(browser.opera > 0 || (browser.isWebkit > 0 && getStyle(element, 'position') == 'absolute')){ pos.top -= doc.body.offsetTop; } // 璁$畻闄や簡body鐨剆croll parent = element.offsetParent; while (parent && parent != doc.body) { pos.left -= parent.scrollLeft; // see https://bugs.opera.com/show_bug.cgi?id=249965 if (!browser.opera || parent.tagName != 'TR') { pos.top -= parent.scrollTop; } parent = parent.offsetParent; } } return pos; }; /** * @ignore * @namespace baidu.event 灞忚斀娴忚鍣ㄥ樊寮傛€х殑浜嬩欢灏佽銆� * @property target 浜嬩欢鐨勮Е鍙戝厓绱� * @property pageX 榧犳爣浜嬩欢鐨勯紶鏍噚鍧愭爣 * @property pageY 榧犳爣浜嬩欢鐨勯紶鏍噛鍧愭爣 * @property keyCode 閿洏浜嬩欢鐨勯敭鍊� */ baidu.event = baidu.event || {}; /** * 浜嬩欢鐩戝惉鍣ㄧ殑瀛樺偍琛� * @private * @meta standard */ baidu.event._listeners = baidu.event._listeners || []; /** * 涓虹洰鏍囧厓绱犳坊鍔犱簨浠剁洃鍚櫒 * @name baidu.event.on * @function * @grammar baidu.event.on(element, type, listener) * @param {HTMLElement|string|window} element 鐩爣鍏冪礌鎴栫洰鏍囧厓绱爄d * @param {string} type 浜嬩欢绫诲瀷 * @param {Function} listener 闇€瑕佹坊鍔犵殑鐩戝惉鍣� * @remark * 1. 涓嶆敮鎸佽法娴忚鍣ㄧ殑榧犳爣婊氳疆浜嬩欢鐩戝惉鍣ㄦ坊鍔�<br> 2. 鏀规柟娉曚笉涓虹洃鍚櫒鐏屽叆浜嬩欢瀵硅薄锛屼互闃叉璺╥frame浜嬩欢鎸傝浇鐨勪簨浠跺璞¤幏鍙栧け璐� * @shortcut on * @meta standard * @see baidu.event.un * * @returns {HTMLElement|window} 鐩爣鍏冪礌 */ baidu.event.on = function (element, type, listener) { type = type.replace(/^on/i, ''); element = baidu.dom._g(element); var realListener = function (ev) { // 1. 杩欓噷涓嶆敮鎸丒ventArgument, 鍘熷洜鏄法frame鐨勪簨浠舵寕杞� // 2. element鏄负浜嗕慨姝his listener.call(element, ev); }, lis = baidu.event._listeners, filter = baidu.event._eventFilter, afterFilter, realType = type; type = type.toLowerCase(); // filter杩囨护 if(filter && filter[type]){ afterFilter = filter[type](element, type, realListener); realType = afterFilter.type; realListener = afterFilter.listener; } // 浜嬩欢鐩戝惉鍣ㄦ寕杞� if (element.addEventListener) { element.addEventListener(realType, realListener, false); } else if (element.attachEvent) { element.attachEvent('on' + realType, realListener); } // 灏嗙洃鍚櫒瀛樺偍鍒版暟缁勪腑 lis[lis.length] = [element, type, listener, realListener, realType]; return element; }; // 澹版槑蹇嵎鏂规硶 baidu.on = baidu.event.on; /** * 杩斿洖涓€涓綋鍓嶉〉闈㈢殑鍞竴鏍囪瘑瀛楃涓层€� * @name baidu.lang.guid * @function * @grammar baidu.lang.guid() * @version 1.1.1 * @meta standard * * @returns {String} 褰撳墠椤甸潰鐨勫敮涓€鏍囪瘑瀛楃涓� */ (function(){ //涓嶇洿鎺ヤ娇鐢╳indow锛屽彲浠ユ彁楂�3鍊嶅乏鍙虫€ц兘 var guid = context[baidu.guid]; baidu.lang.guid = function() { return "TANGRAM__" + (guid._counter ++).toString(36); }; guid._counter = guid._counter || 1; })(); /** * 鎵€鏈夌被鐨勫疄渚嬬殑瀹瑰櫒 * key涓烘瘡涓疄渚嬬殑guid * @meta standard */ context[baidu.guid]._instances = context[baidu.guid]._instances || {}; /** * 鍒ゆ柇鐩爣鍙傛暟鏄惁涓篺unction鎴朏unction瀹炰緥 * @name baidu.lang.isFunction * @function * @grammar baidu.lang.isFunction(source) * @param {Any} source 鐩爣鍙傛暟 * @version 1.2 * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate * @meta standard * @returns {boolean} 绫诲瀷鍒ゆ柇缁撴灉 */ baidu.lang.isFunction = function (source) { // chrome涓�,'function' == typeof /a/ 涓簍rue. return '[object Function]' == Object.prototype.toString.call(source); }; /** * * @ignore * @class Tangram缁ф壙鏈哄埗鎻愪緵鐨勪竴涓熀绫伙紝鐢ㄦ埛鍙互閫氳繃缁ф壙baidu.lang.Class鏉ヨ幏鍙栧畠鐨勫睘鎬у強鏂规硶銆� * @name baidu.lang.Class * @grammar baidu.lang.Class(guid) * @param {string} guid 瀵硅薄鐨勫敮涓€鏍囪瘑 * @meta standard * @remark baidu.lang.Class鍜屽畠鐨勫瓙绫荤殑瀹炰緥鍧囧寘鍚竴涓叏灞€鍞竴鐨勬爣璇唃uid銆俫uid鏄湪鏋勯€犲嚱鏁颁腑鐢熸垚鐨勶紝鍥犳锛岀户鎵胯嚜baidu.lang.Class鐨勭被搴旇鐩存帴鎴栬€呴棿鎺ヨ皟鐢ㄥ畠鐨勬瀯閫犲嚱鏁般€�<br>baidu.lang.Class鐨勬瀯閫犲嚱鏁颁腑浜х敓guid鐨勬柟寮忓彲浠ヤ繚璇乬uid鐨勫敮涓€鎬э紝鍙婃瘡涓疄渚嬮兘鏈変竴涓叏灞€鍞竴鐨刧uid銆� * @meta standard * @see baidu.lang.inherits,baidu.lang.Event */ baidu.lang.Class = function(guid) { this.guid = guid || baidu.lang.guid(); context[baidu.guid]._instances[this.guid] = this; }; context[baidu.guid]._instances = context[baidu.guid]._instances || {}; /** * 閲婃斁瀵硅薄鎵€鎸佹湁鐨勮祫婧愶紝涓昏鏄嚜瀹氫箟浜嬩欢銆� * @name dispose * @grammar obj.dispose() */ baidu.lang.Class.prototype.dispose = function(){ delete context[baidu.guid]._instances[this.guid]; for(var property in this){ if (!baidu.lang.isFunction(this[property])) { delete this[property]; } } this.disposed = true; }; /** * 閲嶈浇浜嗛粯璁ょ殑toString鏂规硶锛屼娇寰楄繑鍥炰俊鎭洿鍔犲噯纭竴浜涖€� * @return {string} 瀵硅薄鐨凷tring琛ㄧず褰㈠紡 */ baidu.lang.Class.prototype.toString = function(){ return "[object " + (this._className || "Object" ) + "]"; }; /** * @ignore * @class 鑷畾涔夌殑浜嬩欢瀵硅薄銆� * @name baidu.lang.Event * @grammar baidu.lang.Event(type[, target]) * @param {string} type 浜嬩欢绫诲瀷鍚嶇О銆備负浜嗘柟渚垮尯鍒嗕簨浠跺拰涓€涓櫘閫氱殑鏂规硶锛屼簨浠剁被鍨嬪悕绉板繀椤讳互"on"(灏忓啓)寮€澶淬€� * @param {Object} [target]瑙﹀彂浜嬩欢鐨勫璞� * @meta standard * @remark 寮曞叆璇ユā鍧楋紝浼氳嚜鍔ㄤ负Class寮曞叆3涓簨浠舵墿灞曟柟娉曪細addEventListener銆乺emoveEventListener鍜宒ispatchEvent銆� * @meta standard * @see baidu.lang.Class */ baidu.lang.Event = function (type, target) { this.type = type; this.returnValue = true; this.target = target || null; this.currentTarget = null; }; /** * 娉ㄥ唽瀵硅薄鐨勪簨浠剁洃鍚櫒銆傚紩鍏aidu.lang.Event鍚庯紝Class鐨勫瓙绫诲疄渚嬫墠浼氳幏寰楄鏂规硶銆� * @grammar obj.addEventListener(type, handler[, key]) * @param {string} type 鑷畾涔変簨浠剁殑鍚嶇О * @param {Function} handler 鑷畾涔変簨浠惰瑙﹀彂鏃跺簲璇ヨ皟鐢ㄧ殑鍥炶皟鍑芥暟 * @param {string} [key] 涓轰簨浠剁洃鍚嚱鏁版寚瀹氱殑鍚嶇О锛屽彲鍦ㄧЩ闄ゆ椂浣跨敤銆傚鏋滀笉鎻愪緵锛屾柟娉曚細榛樿涓哄畠鐢熸垚涓€涓叏灞€鍞竴鐨刱ey銆� * @remark 浜嬩欢绫诲瀷鍖哄垎澶у皬鍐欍€傚鏋滆嚜瀹氫箟浜嬩欢鍚嶇О涓嶆槸浠ュ皬鍐�"on"寮€澶达紝璇ユ柟娉曚細缁欏畠鍔犱笂"on"鍐嶈繘琛屽垽鏂紝鍗�"click"鍜�"onclick"浼氳璁や负鏄悓涓€绉嶄簨浠躲€� */ baidu.lang.Class.prototype.addEventListener = function (type, handler, key) { if (!baidu.lang.isFunction(handler)) { return; } !this.__listeners && (this.__listeners = {}); var t = this.__listeners, id; if (typeof key == "string" && key) { if (/[^\w\-]/.test(key)) { throw("nonstandard key:" + key); } else { handler.hashCode = key; id = key; } } type.indexOf("on") != 0 && (type = "on" + type); typeof t[type] != "object" && (t[type] = {}); id = id || baidu.lang.guid(); handler.hashCode = id; t[type][id] = handler; }; /** * 绉婚櫎瀵硅薄鐨勪簨浠剁洃鍚櫒銆傚紩鍏aidu.lang.Event鍚庯紝Class鐨勫瓙绫诲疄渚嬫墠浼氳幏寰楄鏂规硶銆� * @grammar obj.removeEventListener(type, handler) * @param {string} type 浜嬩欢绫诲瀷 * @param {Function|string} handler 瑕佺Щ闄ょ殑浜嬩欢鐩戝惉鍑芥暟鎴栬€呯洃鍚嚱鏁扮殑key * @remark 濡傛灉绗簩涓弬鏁癶andler娌℃湁琚粦瀹氬埌瀵瑰簲鐨勮嚜瀹氫箟浜嬩欢涓紝浠€涔堜篃涓嶅仛銆� */ baidu.lang.Class.prototype.removeEventListener = function (type, handler) { if (typeof handler != "undefined") { if ( (baidu.lang.isFunction(handler) && ! (handler = handler.hashCode)) || (! baidu.lang.isString(handler)) ){ return; } } !this.__listeners && (this.__listeners = {}); type.indexOf("on") != 0 && (type = "on" + type); var t = this.__listeners; if (!t[type]) { return; } if (typeof handler != "undefined") { t[type][handler] && delete t[type][handler]; } else { for(var guid in t[type]){ delete t[type][guid]; } } }; /** * 娲惧彂鑷畾涔変簨浠讹紝浣垮緱缁戝畾鍒拌嚜瀹氫箟浜嬩欢涓婇潰鐨勫嚱鏁伴兘浼氳鎵ц銆傚紩鍏aidu.lang.Event鍚庯紝Class鐨勫瓙绫诲疄渚嬫墠浼氳幏寰楄鏂规硶銆� * @grammar obj.dispatchEvent(event, options) * @param {baidu.lang.Event|String} event Event瀵硅薄锛屾垨浜嬩欢鍚嶇О(1.1.1璧锋敮鎸�) * @param {Object} options 鎵╁睍鍙傛暟,鎵€鍚睘鎬ч敭鍊间細鎵╁睍鍒癊vent瀵硅薄涓�(1.2璧锋敮鎸�) * @remark 澶勭悊浼氳皟鐢ㄩ€氳繃addEventListenr缁戝畾鐨勮嚜瀹氫箟浜嬩欢鍥炶皟鍑芥暟涔嬪锛岃繕浼氳皟鐢ㄧ洿鎺ョ粦瀹氬埌瀵硅薄涓婇潰鐨勮嚜瀹氫箟浜嬩欢銆備緥濡傦細<br> myobj.onMyEvent = function(){}<br> myobj.addEventListener("onMyEvent", function(){}); */ baidu.lang.Class.prototype.dispatchEvent = function (event, options) { if (baidu.lang.isString(event)) { event = new baidu.lang.Event(event); } !this.__listeners && (this.__listeners = {}); // 20100603 娣诲姞鏈柟娉曠殑绗簩涓弬鏁帮紝灏� options extend鍒癳vent涓幓浼犻€� options = options || {}; for (var i in options) { event[i] = options[i]; } var i, t = this.__listeners, p = event.type; event.target = event.target || this; event.currentTarget = this; p.indexOf("on") != 0 && (p = "on" + p); baidu.lang.isFunction(this[p]) && this[p].apply(this, arguments); if (typeof t[p] == "object") { for (i in t[p]) { t[p][i].apply(this, arguments); } } return event.returnValue; }; baidu.lang.inherits = function (subClass, superClass, className) { var key, proto, selfProps = subClass.prototype, clazz = new Function(); clazz.prototype = superClass.prototype; proto = subClass.prototype = new clazz(); for (key in selfProps) { proto[key] = selfProps[key]; } subClass.prototype.constructor = subClass; subClass.superClass = superClass.prototype; // 绫诲悕鏍囪瘑锛屽吋瀹笴lass鐨則oString锛屽熀鏈病鐢� if ("string" == typeof className) { proto._className = className; } }; // 澹版槑蹇嵎鏂规硶 baidu.inherits = baidu.lang.inherits; /** * 鍥剧墖鐨勮矾寰� * @private * @type {String} */ var _IMAGE_PATH = 'http://api.map.baidu.com/library/TextIconOverlay/1.2/src/images/m'; /** * 鍥剧墖鐨勫悗缂€鍚� * @private * @type {String} */ var _IMAGE_EXTENSION = 'png'; /** *@exports TextIconOverlay as BMapLib.TextIconOverlay */ /** * TextIconOverlay * @class 姝ょ被琛ㄧず鍦板浘涓婄殑涓€涓鐩栫墿锛岃瑕嗙洊鐗╃敱鏂囧瓧鍜屽浘鏍囩粍鎴愶紝浠嶰verlay缁ф壙銆傛枃瀛楅€氬父鏄暟瀛楋紙0-9锛夋垨瀛楁瘝锛圓-Z 锛夛紝鑰屾枃瀛椾笌鍥炬爣涔嬮棿鏈変竴瀹氱殑鏄犲皠鍏崇郴銆� *璇ヨ鐩栫墿閫傜敤浜庝互涓嬬被浼肩殑鍦烘櫙锛氶渶瑕佸湪鍦板浘涓婃坊鍔犱竴绯诲垪瑕嗙洊鐗╋紝杩欎簺瑕嗙洊鐗╀箣闂寸敤涓嶅悓鐨勫浘鏍囧拰鏂囧瓧鏉ュ尯鍒嗭紝鏂囧瓧鍙兘琛ㄧず浜嗚瑕嗙洊鐗╃殑鏌愪竴灞炴€у€硷紝鏍规嵁璇ユ枃瀛楀拰涓€瀹氱殑鏄犲皠鍏崇郴锛岃嚜鍔ㄥ尮閰嶇浉搴旈鑹插拰澶у皬鐨勫浘鏍囥€� * *@constructor *@param {Point} position 琛ㄧず涓€涓粡绾害鍧愭爣浣嶇疆銆� *@param {String} text 琛ㄧず璇ヨ鐩栫墿鏄剧ず鐨勬枃瀛椾俊鎭€� *@param {Json Object} options 鍙€夊弬鏁帮紝鍙€夐」鍖呮嫭锛�<br /> *"<b>styles</b>":{Array<IconStyle>} 涓€缁勫浘鏍囬鏍笺€傚崟涓浘琛ㄩ鏍煎寘鎷互涓嬪嚑涓睘鎬э細<br /> * url {String} 鍥剧墖鐨剈rl鍦板潃銆�(蹇呴€�)<br /> * size {Size} 鍥剧墖鐨勫ぇ灏忋€傦紙蹇呴€夛級<br /> * anchor {Size} 鍥炬爣瀹氫綅鍦ㄥ湴鍥句笂鐨勪綅缃浉瀵逛簬鍥炬爣宸︿笂瑙掔殑鍋忕Щ鍊硷紝榛樿鍋忕Щ鍊间负鍥炬爣鐨勪腑蹇冧綅缃€傦紙鍙€夛級<br /> * offset {Size} 鍥剧墖鐩稿浜庡彲瑙嗗尯鍩熺殑鍋忕Щ鍊硷紝姝ゅ姛鑳界殑浣滅敤绛夊悓浜嶤SS涓殑background-position灞炴€с€傦紙鍙€夛級<br /> * textSize {Number} 鏂囧瓧鐨勫ぇ灏忋€傦紙鍙€夛紝榛樿10锛�<br /> * textColor {String} 鏂囧瓧鐨勯鑹层€傦紙鍙€夛紝榛樿black锛�<br /> */ var TextIconOverlay = function(position, text, options){ try { BMap; } catch (e) { throw Error('Baidu Map JS API is not ready yet!'); } T.lang.inherits(TextIconOverlay, BMap.Overlay, "TextIconOverlay"); this._position = position; this._text = text; this._options = options || {}; this._styles = this._options['styles'] || []; (!this._styles.length) && this._setupDefaultStyles(); }; TextIconOverlay.prototype._setupDefaultStyles = function(){ var sizes = [53, 56, 66, 78, 90]; for(var i = 0, size; size = sizes[i]; i++){ this._styles.push({ url:_IMAGE_PATH + i + '.' + _IMAGE_EXTENSION, size: new BMap.Size(size, size) }); }//for寰幆鐨勭畝娲佸啓娉� }; /** *缁ф壙Overlay鐨刬ntialize鏂规硶锛岃嚜瀹氫箟瑕嗙洊鐗╂椂蹇呴』銆� *@param {Map} map BMap.Map鐨勫疄渚嬪寲瀵硅薄銆� *@return {HTMLElement} 杩斿洖瑕嗙洊鐗╁搴旂殑HTML鍏冪礌銆� */ TextIconOverlay.prototype.initialize = function(map){ this._map = map; this._domElement = document.createElement('div'); this._updateCss(); this._updateText(); this._updatePosition(); this._bind(); this._map.getPanes().markerMouseTarget.appendChild(this._domElement); return this._domElement; }; /** *缁ф壙Overlay鐨刣raw鏂规硶锛岃嚜瀹氫箟瑕嗙洊鐗╂椂蹇呴』銆� *@return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype.draw = function(){ this._map && this._updatePosition(); }; /** *鑾峰彇璇ヨ鐩栫墿涓婄殑鏂囧瓧銆� *@return {String} 璇ヨ鐩栫墿涓婄殑鏂囧瓧銆� */ TextIconOverlay.prototype.getText = function(){ return this._text; }; /** *璁剧疆璇ヨ鐩栫墿涓婄殑鏂囧瓧銆� *@param {String} text 瑕佽缃殑鏂囧瓧锛岄€氬父鏄瓧姣岮-Z鎴栨暟瀛�0-9銆� *@return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype.setText = function(text){ if(text && (!this._text || (this._text.toString() != text.toString()))){ this._text = text; this._updateText(); this._updateCss(); this._updatePosition(); } }; /** *鑾峰彇璇ヨ鐩栫墿鐨勪綅缃€� *@return {Point} 璇ヨ鐩栫墿鐨勭粡绾害鍧愭爣銆� */ TextIconOverlay.prototype.getPosition = function () { return this._position; }; /** *璁剧疆璇ヨ鐩栫墿鐨勪綅缃€� *@param {Point} position 瑕佽缃殑缁忕含搴﹀潗鏍囥€� *@return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype.setPosition = function (position) { if(position && (!this._position || !this._position.equals(position))){ this._position = position; this._updatePosition(); } }; /** *鐢辨枃瀛椾俊鎭幏鍙栭鏍兼暟缁勭殑瀵瑰簲绱㈠紩鍊笺€� *鍐呴儴榛樿鐨勫搴斿嚱鏁颁负鏂囧瓧杞崲涓烘暟瀛楅櫎浠�10鐨勭粨鏋滐紝姣斿鏂囧瓧8杩斿洖绱㈠紩0锛屾枃瀛�25杩斿洖绱㈠紩2. *濡傛灉闇€瑕佽嚜瀹氫箟鏄犲皠鍏崇郴锛岃瑕嗙洊璇ュ嚱鏁般€� *@param {String} text 鏂囧瓧銆� *@param {Array<IconStyle>} styles 涓€缁勫浘鏍囬鏍笺€� *@return {Number} 瀵瑰簲鐨勭储寮曞€笺€� */ TextIconOverlay.prototype.getStyleByText = function(text, styles){ var count = parseInt(text); var index = parseInt(count / 10); index = Math.max(0, index); index = Math.min(index, styles.length - 1); return styles[index]; } /** *鏇存柊鐩稿簲鐨凜SS銆� *@return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype._updateCss = function(){ if (!this._domElement) { return } var style = this.getStyleByText(this._text, this._styles); this._domElement.style.cssText = this._buildCssText(style); }; /** *鏇存柊瑕嗙洊鐗╃殑鏄剧ず鏂囧瓧銆� *@return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype._updateText = function(){ if (this._domElement) { this._domElement.innerHTML = this._text; } }; /** *璋冩暣瑕嗙洊鐗╁湪鍦板浘涓婄殑浣嶇疆鏇存柊瑕嗙洊鐗╃殑鏄剧ず鏂囧瓧銆� *@return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype._updatePosition = function(){ if (this._domElement && this._position) { var style = this._domElement.style; var pixelPosition= this._map.pointToOverlayPixel(this._position); pixelPosition.x -= Math.ceil(parseInt(style.width) / 2); pixelPosition.y -= Math.ceil(parseInt(style.height) / 2); style.left = pixelPosition.x + "px"; style.top = pixelPosition.y + "px"; } }; /** * 涓鸿瑕嗙洊鐗╃殑HTML鍏冪礌鏋勫缓CSS * @param {IconStyle} 涓€涓浘鏍囩殑椋庢牸銆� * @return {String} 鏋勫缓瀹屾垚鐨凜SSTEXT銆� */ TextIconOverlay.prototype._buildCssText = function(style) { //鏍规嵁style鏉ョ‘瀹氫竴浜涢粯璁ゅ€� var url = style['url']; var size = style['size']; var anchor = style['anchor']; var offset = style['offset']; var textColor = style['textColor'] || 'black'; var textSize = style['textSize'] || 10; var csstext = []; if (T.browser["ie"] < 7) { csstext.push('filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(' + 'sizingMethod=scale,src="' + url + '");'); } else { csstext.push('background-image:url(' + url + ');'); var backgroundPosition = '0 0'; (offset instanceof BMap.Size) && (backgroundPosition = offset.width + 'px' + ' ' + offset.height + 'px'); csstext.push('background-position:' + backgroundPosition + ';'); } if (size instanceof BMap.Size){ if (anchor instanceof BMap.Size) { if (anchor.height > 0 && anchor.height < size.height) { csstext.push('height:' + (size.height - anchor.height) + 'px; padding-top:' + anchor.height + 'px;'); } if(anchor.width > 0 && anchor.width < size.width){ csstext.push('width:' + (size.width - anchor.width) + 'px; padding-left:' + anchor.width + 'px;'); } } else { csstext.push('height:' + size.height + 'px; line-height:' + size.height + 'px;'); csstext.push('width:' + size.width + 'px; text-align:center;'); } } csstext.push('cursor:pointer; color:' + textColor + '; position:absolute; font-size:' + textSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); return csstext.join(''); }; /** * 褰撻紶鏍囩偣鍑昏瑕嗙洊鐗╂椂浼氳Е鍙戣浜嬩欢 * @name TextIconOverlay#click * @event * @param {Event Object} e 鍥炶皟鍑芥暟浼氳繑鍥瀍vent鍙傛暟锛屽寘鎷互涓嬭繑鍥炲€硷細 * <br />"<b>type</b> : {String} 浜嬩欢绫诲瀷 * <br />"<b>target</b>锛歿BMapLib.TextIconOverlay} 浜嬩欢鐩爣 * */ /** * 褰撻紶鏍囪繘鍏ヨ瑕嗙洊鐗╁尯鍩熸椂浼氳Е鍙戣浜嬩欢 * @name TextIconOverlay#mouseover * @event * @param {Event Object} e 鍥炶皟鍑芥暟浼氳繑鍥瀍vent鍙傛暟锛屽寘鎷互涓嬭繑鍥炲€硷細 * <br />"<b>type</b> : {String} 浜嬩欢绫诲瀷 * <br />"<b>target</b>锛歿BMapLib.TextIconOverlay} 浜嬩欢鐩爣 * <br />"<b>point</b> : {BMap.Point} 鏈€鏂版坊鍔犱笂鐨勮妭鐐笲Map.Point瀵硅薄 * <br />"<b>pixel</b>锛歿BMap.pixel} 鏈€鏂版坊鍔犱笂鐨勮妭鐐笲Map.Pixel瀵硅薄 * * @example <b>鍙傝€冪ず渚嬶細</b><br /> * myTextIconOverlay.addEventListener("mouseover", function(e) { alert(e.point); }); */ /** * 褰撻紶鏍囩寮€璇ヨ鐩栫墿鍖哄煙鏃朵細瑙﹀彂璇ヤ簨浠� * @name TextIconOverlay#mouseout * @event * @param {Event Object} e 鍥炶皟鍑芥暟浼氳繑鍥瀍vent鍙傛暟锛屽寘鎷互涓嬭繑鍥炲€硷細 * <br />"<b>type</b> : {String} 浜嬩欢绫诲瀷 * <br />"<b>target</b>锛歿BMapLib.TextIconOverlay} 浜嬩欢鐩爣 * <br />"<b>point</b> : {BMap.Point} 鏈€鏂版坊鍔犱笂鐨勮妭鐐笲Map.Point瀵硅薄 * <br />"<b>pixel</b>锛歿BMap.pixel} 鏈€鏂版坊鍔犱笂鐨勮妭鐐笲Map.Pixel瀵硅薄 * * @example <b>鍙傝€冪ず渚嬶細</b><br /> * myTextIconOverlay.addEventListener("mouseout", function(e) { alert(e.point); }); */ /** * 涓鸿瑕嗙洊鐗╃粦瀹氫竴绯诲垪浜嬩欢 * 褰撳墠鏀寔click mouseover mouseout * @return 鏃犺繑鍥炲€笺€� */ TextIconOverlay.prototype._bind = function(){ if (!this._domElement){ return; } var me = this; var map = this._map; var BaseEvent = T.lang.Event; function eventExtend(e, be){ var elem = e.srcElement || e.target; var x = e.clientX || e.pageX; var y = e.clientY || e.pageY; if (e && be && x && y && elem){ var offset = T.dom.getPosition(map.getContainer()); be.pixel = new BMap.Pixel(x - offset.left, y - offset.top); be.point = map.pixelToPoint(be.pixel); } return be; }//缁欎簨浠跺弬鏁板鍔爌ixel鍜宲oint涓や釜鍊� T.event.on(this._domElement,"mouseover", function(e){ me.dispatchEvent(eventExtend(e, new BaseEvent("onmouseover"))); }); T.event.on(this._domElement,"mouseout", function(e){ me.dispatchEvent(eventExtend(e, new BaseEvent("onmouseout"))); }); T.event.on(this._domElement,"click", function(e){ me.dispatchEvent(eventExtend(e, new BaseEvent("onclick"))); }); }; return TextIconOverlay; });