📄 util.js
字号:
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license. * See http://svn.openlayers.org/trunk/openlayers/release-license.txt * for the full text of the license. *//** * Namespace: Util */OpenLayers.Util = {};/** * Function: getElement * This is the old $() from prototype */OpenLayers.Util.getElement = function() { var elements = []; for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') { element = document.getElementById(element); } if (arguments.length == 1) { return element; } elements.push(element); } return elements;};/** * Maintain $() from prototype */if ($ == null) { var $ = OpenLayers.Util.getElement;}/** * APIFunction: extend * Copy all properties of a source object to a destination object. Modifies * the passed in destination object. * * Parameters: * destination - {Object} The object that will be modified * source - {Object} The object with properties to be set on the destination * * Returns: * {Object} The destination object. */OpenLayers.Util.extend = function(destination, source) { if(destination && source) { for(var property in source) { destination[property] = source[property]; } /** * IE doesn't include the toString property when iterating over an object's * properties with the for(property in object) syntax. Explicitly check if * the source has its own toString property. */ if(source.hasOwnProperty && source.hasOwnProperty('toString')) { destination.toString = source.toString; } } return destination;};/** * Function: removeItem * Remove an object from an array. Iterates through the array * to find the item, then removes it. * * Parameters: * array - {Array} * item - {Object} * * Return * {Array} A reference to the array */OpenLayers.Util.removeItem = function(array, item) { for(var i=0; i < array.length; i++) { if(array[i] == item) { array.splice(i,1); //break;more than once?? } } return array;};/** * Function: clearArray * *Deprecated*. This function will disappear in 3.0. * Please use "array.length = 0" instead. * * Parameters: * array - {Array} */OpenLayers.Util.clearArray = function(array) { var msg = "OpenLayers.Util.clearArray() is Deprecated." + " Please use 'array.length = 0' instead."; OpenLayers.Console.warn(msg); array.length = 0;};/** * Function: indexOf * Seems to exist already in FF, but not in MOZ. * * Parameters: * array - {Array} * obj - {Object} * * Returns: * {Integer} The index at, which the object was found in the array. * If not found, returns -1.v */OpenLayers.Util.indexOf = function(array, obj) { for(var i=0; i < array.length; i++) { if (array[i] == obj) return i; } return -1; };/** * Function: modifyDOMElement * * Modifies many properties of a DOM element all at once. Passing in * null to an individual parameter will avoid setting the attribute. * * Parameters: * id - {String} The element id attribute to set. * px - {<OpenLayers.Pixel>} The left and top style position. * sz - {<OpenLayers.Size>} The width and height style attributes. * position - {String} The position attribute. eg: absolute, * relative, etc. * border - {String} The style.border attribute. eg: * solid black 2px * overflow - {String} The style.overview attribute. * opacity - {Float} Fractional value (0.0 - 1.0) */OpenLayers.Util.modifyDOMElement = function(element, id, px, sz, position, border, overflow, opacity) { if (id) { element.id = id; } if (px) { element.style.left = px.x + "px"; element.style.top = px.y + "px"; } if (sz) { element.style.width = sz.w + "px"; element.style.height = sz.h + "px"; } if (position) { element.style.position = position; } if (border) { element.style.border = border; } if (overflow) { element.style.overflow = overflow; } if (opacity) { element.style.opacity = opacity; element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')'; }};/** * Function: createDiv * Creates a new div and optionally set some standard attributes. * Null may be passed to each parameter if you do not wish to * set a particular attribute.d * * Note: zIndex is NOT set * * Parameters: * id - {String} An identifier for this element. If no id is * passed an identifier will be created * automatically. * px - {<OpenLayers.Pixel>} The element left and top position. * sz - {<OpenLayers.Size>} The element width and height. * imgURL - {String} A url pointing to an image to use as a * background image. * position - {String} The style.position value. eg: absolute, * relative etc. * border - {String} The the style.border value. * eg: 2px solid black * overflow - {String} The style.overflow value. Eg. hidden * opacity - {Float} Fractional value (0.0 - 1.0) * * Returns: * {DOMElement} A DOM Div created with the specified attributes. */OpenLayers.Util.createDiv = function(id, px, sz, imgURL, position, border, overflow, opacity) { var dom = document.createElement('div'); if (imgURL) { dom.style.backgroundImage = 'url(' + imgURL + ')'; } //set generic properties if (!id) { id = OpenLayers.Util.createUniqueID("OpenLayersDiv"); } if (!position) { position = "absolute"; } OpenLayers.Util.modifyDOMElement(dom, id, px, sz, position, border, overflow, opacity); return dom;};/** * Function: createImage * Creates an img element with specific attribute values. * * Parameters: * id - {String} The id field for the img. If none assigned one will be * automatically generated. * px - {<OpenLayers.Pixel>} The left and top positions. * sz - {<OpenLayers.Size>} The style.width and style.height values. * imgURL - {String} The url to use as the image source. * position - {String} The style.position value. * border - {String} The border to place around the image. * delayDisplay - {Boolean} If true waits until the image has been * loaded. * opacity - {Float} Fractional value (0.0 - 1.0) * * Returns: * {DOMElement} A DOM Image created with the specified attributes. */OpenLayers.Util.createImage = function(id, px, sz, imgURL, position, border, opacity, delayDisplay) { var image = document.createElement("img"); //set generic properties if (!id) { id = OpenLayers.Util.createUniqueID("OpenLayersDiv"); } if (!position) { position = "relative"; } OpenLayers.Util.modifyDOMElement(image, id, px, sz, position, border, null, opacity); if(delayDisplay) { image.style.display = "none"; OpenLayers.Event.observe(image, "load", OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, image)); OpenLayers.Event.observe(image, "error", OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, image)); } //set special properties image.style.alt = id; image.galleryImg = "no"; if (imgURL) { image.src = imgURL; } return image;};/** * Function: setOpacity * Deprecated. * This function has been deprecated. Instead, please use * OpenLayers.Util.modifyDOMElement() * or * OpenLayers.Util.modifyAlphaImageDiv() * * Set the opacity of a DOM Element * Note that for this function to work in IE, elements must "have layout" * according to: * http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/haslayout.asp * * Parameters: * element - {DOMElement} Set the opacity on this DOM element * opacity - {Float} Opacity value (0.0 - 1.0) */OpenLayers.Util.setOpacity = function(element, opacity) { OpenLayers.Util.modifyDOMElement(element, null, null, null, null, null, null, opacity);}/** * Function: onImageLoad */OpenLayers.Util.onImageLoad = function() { // The complex check here is to solve issues described in #480. // Every time a map view changes, it increments the 'viewRequestID' // property. As the requests for the images for the new map view are sent // out, they are tagged with this unique viewRequestID. // // If an image has no viewRequestID property set, we display it regardless, // but if it does have a viewRequestID property, we check that it matches // the viewRequestID set on the map. // // If the viewRequestID on the map has changed, that means that the user // has changed the map view since this specific request was sent out, and // therefore this tile does not need to be displayed (so we do not execute // this code that turns its display on). // if (!this.viewRequestID || (this.map && this.viewRequestID == this.map.viewRequestID)) { this.style.backgroundColor = null; this.style.display = ""; }};/** * Property: onImageLoadErrorColor * {String} The color tiles with load errors will turn. * Default is "pink" */OpenLayers.Util.onImageLoadErrorColor = "pink";/** * Property: onImageLoadErrorColor * {Integer} How many times should we try to reload an image before giving up? * Default is 0 */OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0;/** * Function: onImageLoadError */OpenLayers.Util.onImageLoadError = function() { this._attempts = (this._attempts) ? (this._attempts + 1) : 1; if(this._attempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS) { this.src = this.src; } else { this.style.backgroundColor = OpenLayers.Util.onImageLoadErrorColor; } this.style.display = "";};/** * Function: alphaHack * Checks whether it's necessary (and possible) to use the png alpha * hack which allows alpha transparency for png images under Internet * Explorer. * * Returns: * {Boolean} true if alpha has is necessary and possible, false otherwise. */OpenLayers.Util.alphaHack = function() { var arVersion = navigator.appVersion.split("MSIE"); var version = parseFloat(arVersion[1]); var filter = false; // IEs4Lin dies when trying to access document.body.filters, because // the property is there, but requires a DLL that can't be provided. This // means that we need to wrap this in a try/catch so that this can // continue. try { filter = document.body.filters; } catch (e) { } return ( filter && (version >= 5.5) && (version < 7) );}/** * Function: modifyAlphaImageDiv * * div - {DOMElement} Div containing Alpha-adjusted Image * id - {String} * px - {<OpenLayers.Pixel>} * sz - {<OpenLayers.Size>} * imgURL - {String} * position - {String} * border - {String} * sizing {String} 'crop', 'scale', or 'image'. Default is "scale" * opacity - {Float} Fractional value (0.0 - 1.0) */ OpenLayers.Util.modifyAlphaImageDiv = function(div, id, px, sz, imgURL, position, border, sizing, opacity) { OpenLayers.Util.modifyDOMElement(div, id, px, sz); var img = div.childNodes[0]; if (imgURL) { img.src = imgURL; } OpenLayers.Util.modifyDOMElement(img, div.id + "_innerImage", null, sz, "relative", border); if (opacity) { div.style.opacity = opacity; div.style.filter = 'alpha(opacity=' + (opacity * 100) + ')'; } if (OpenLayers.Util.alphaHack()) { div.style.display = "inline-block"; if (sizing == null) { sizing = "scale"; } div.style.filter = "progid:DXImageTransform.Microsoft" + ".AlphaImageLoader(src='" + img.src + "', " + "sizingMethod='" + sizing + "')"; if (div.style.opacity) { div.style.filter += " alpha(opacity=" + div.style.opacity * 100 + ")"; } img.style.filter = "progid:DXImageTransform.Microsoft" + ".Alpha(opacity=0)"; }};/** * Function: createAlphaImageDiv * * id - {String} * px - {<OpenLayers.Pixel>} * sz - {<OpenLayers.Size>} * imgURL - {String} * position - {String} * border - {String} * sizing {String} 'crop', 'scale', or 'image'. Default is "scale" * delayDisplay{Boolean} * * Returns: * {DOMElement} A DOM Div created with a DOM Image inside it. If the hack is * needed for transparency in IE, it is added. */ OpenLayers.Util.createAlphaImageDiv = function(id, px, sz, imgURL, position, border, sizing, opacity, delayDisplay) { var div = OpenLayers.Util.createDiv(); var img = OpenLayers.Util.createImage(null, null, null, null, null, null, null, false); div.appendChild(img); if (delayDisplay) { img.style.display = "none"; OpenLayers.Event.observe(img, "load", OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, div)); OpenLayers.Event.observe(img, "error", OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, div)); } OpenLayers.Util.modifyAlphaImageDiv(div, id, px, sz, imgURL, position, border, sizing, opacity); return div;};/** * Function: upperCaseObject * Creates a new hashtable and copies over all the keys from the * passed-in object, but storing them under an uppercased * version of the key at which they were stored. * * Parameters: * object - {Object} * * Returns: * {Object} A new Object with all the same keys but uppercased */OpenLayers.Util.upperCaseObject = function (object) { var uObject = {}; for (var key in object) { uObject[key.toUpperCase()] = object[key]; } return uObject;};/** * Function: applyDefaults * Takes a hashtable and copies any keys that don't exist from * another hashtable, by analogy with OpenLayers.Util.extend() from * Prototype.js.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -