<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>百度地图测量工具测试</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script><script type="text/javascript"src="http://api.map.baidu.com/getscript?v=1.2&amp;ak=&amp;services=&amp;t=20130716024057"></script><link rel="stylesheet" type="text/css" href="http://api.map.baidu.com/res/12/bmap.css"><script type="text/javascript"src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
</head>
<body>
<div id="container" style="width: 100%; height: 340px; margin-bottom:20px"></div>
<div id="container1" style="width: 100%; height: 340px;"></div>
<script type="text/javascript">var map = new BMap.Map("container");var map1 = new BMap.Map("container1");map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);map1.centerAndZoom(new BMap.Point(116.404, 39.915), 15);var myDis = new BMapLib.DistanceTool(map);//开始测量myDis.open();//结束测量myDis.close();//在第二个地图上使用测量工具var myDis1 = new BMapLib.DistanceTool(map1);//开始测量myDis1.open();</script>
</body>
</html>

以上代码是同时在两个地图上使用测量工具,运行效果如下图所示

代码的本意是在第二个地图开启测量工具,但是却需要在第一个地图上点击才能进行测量。

修改DistanceTool.js后的效果

修改代码的逻辑就不分析了(因为我也忘了,也懒得去看了,因为这个用得也不多,该文章只是做个记录),附上修改后的JS文件

/*** @fileoverview 百度地图的测距工具类,对外开放。* 允许用户在地图上点击完成距离的测量。* 使用者可以自定义测距线段的相关样式,例如线宽、颜色、测距结果所用的单位制等等。* 主入口类是<a href="symbols/BMapLib.DistanceTool.html">DistanceTool</a>,* 基于Baidu Map API 1.2。** @author Baidu Map Api Group * @version 1.2*//** * @namespace BMap的所有library类均放在BMapLib命名空间下*/
var BMapLib = window.BMapLib = BMapLib || {};(function() {/*** 声明baidu包*/var baidu = baidu || {guid : "$BAIDU$"};(function() {// 一些页面级别唯一的属性,需要挂载在window[baidu.guid]上window[baidu.guid] = {};/*** 将源对象的所有属性拷贝到目标对象中* @name baidu.extend* @function* @grammar baidu.extend(target, source)* @param {Object} target 目标对象* @param {Object} source 源对象* @returns {Object} 目标对象*/baidu.extend = function (target, source) {for (var p in source) {if (source.hasOwnProperty(p)) {target[p] = source[p];}}    return target;};/*** @ignore* @namespace* @baidu.lang 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。* @property guid 对象的唯一标识*/baidu.lang = baidu.lang || {};/*** 返回一个当前页面的唯一标识字符串。* @function* @grammar baidu.lang.guid()* @returns {String} 当前页面的唯一标识字符串*/baidu.lang.guid = function() {return "TANGRAM__" + (window[baidu.guid]._counter ++).toString(36);};window[baidu.guid]._counter = window[baidu.guid]._counter || 1;/*** 所有类的实例的容器* key为每个实例的guid*/window[baidu.guid]._instances = window[baidu.guid]._instances || {};/*** Tangram继承机制提供的一个基类,用户可以通过继承baidu.lang.Class来获取它的属性及方法。* @function* @name baidu.lang.Class* @grammar baidu.lang.Class(guid)* @param {string} guid	对象的唯一标识* @meta standard* @remark baidu.lang.Class和它的子类的实例均包含一个全局唯一的标识guid。* guid是在构造函数中生成的,因此,继承自baidu.lang.Class的类应该直接或者间接调用它的构造函数。<br>* baidu.lang.Class的构造函数中产生guid的方式可以保证guid的唯一性,及每个实例都有一个全局唯一的guid。*/baidu.lang.Class = function(guid) {this.guid = guid || baidu.lang.guid();window[baidu.guid]._instances[this.guid] = this;};window[baidu.guid]._instances = window[baidu.guid]._instances || {};/*** 判断目标参数是否string类型或String对象* @name baidu.lang.isString* @function* @grammar baidu.lang.isString(source)* @param {Any} source 目标参数* @shortcut isString* @meta standard*             * @returns {boolean} 类型判断结果*/baidu.lang.isString = function (source) {return '[object String]' == Object.prototype.toString.call(source);};/*** 判断目标参数是否为function或Function实例* @name baidu.lang.isFunction* @function* @grammar baidu.lang.isFunction(source)* @param {Any} source 目标参数* @returns {boolean} 类型判断结果*/baidu.lang.isFunction = function (source) {return '[object Function]' == Object.prototype.toString.call(source);};/*** 重载了默认的toString方法,使得返回信息更加准确一些。* @return {string} 对象的String表示形式*/baidu.lang.Class.prototype.toString = function(){return "[object " + (this._className || "Object" ) + "]";};/*** 释放对象所持有的资源,主要是自定义事件。* @name dispose* @grammar obj.dispose()*/baidu.lang.Class.prototype.dispose = function(){delete window[baidu.guid]._instances[this.guid];for(var property in this){if (!baidu.lang.isFunction(this[property])) {delete this[property];}}this.disposed = true;};/*** 自定义的事件对象。* @function* @name baidu.lang.Event* @grammar baidu.lang.Event(type[, target])* @param {string} type	 事件类型名称。为了方便区分事件和一个普通的方法,事件类型名称必须以"on"(小写)开头。* @param {Object} [target]触发事件的对象* @meta standard* @remark 引入该模块,会自动为Class引入3个事件扩展方法:addEventListener、removeEventListener和dispatchEvent。* @see baidu.lang.Class*/baidu.lang.Event = function (type, target) {this.type = type;this.returnValue = true;this.target = target || null;this.currentTarget = null;};/*** 注册对象的事件监听器。引入baidu.lang.Event后,Class的子类实例才会获得该方法。* @grammar obj.addEventListener(type, handler[, key])* @param 	{string}   type         自定义事件的名称* @param 	{Function} handler      自定义事件被触发时应该调用的回调函数* @param 	{string}   [key]		为事件监听函数指定的名称,可在移除时使用。如果不提供,方法会默认为它生成一个全局唯一的key。* @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;};/*** 移除对象的事件监听器。引入baidu.lang.Event后,Class的子类实例才会获得该方法。* @grammar obj.removeEventListener(type, handler)* @param {string}   type     事件类型* @param {Function|string} handler  要移除的事件监听函数或者监听函数的key* @remark 	如果第二个参数handler没有被绑定到对应的自定义事件中,什么也不做。*/baidu.lang.Class.prototype.removeEventListener = function (type, handler) {if (baidu.lang.isFunction(handler)) {handler = handler.hashCode;} else if (!baidu.lang.isString(handler)) {return;}!this.__listeners && (this.__listeners = {});type.indexOf("on") != 0 && (type = "on" + type);var t = this.__listeners;if (!t[type]) {return;}t[type][handler] && delete t[type][handler];};/*** 派发自定义事件,使得绑定到自定义事件上面的函数都会被执行。引入baidu.lang.Event后,Class的子类实例才会获得该方法。* @grammar obj.dispatchEvent(event, options)* @param {baidu.lang.Event|String} event 	Event对象,或事件名称(1.1.1起支持)* @param {Object} options 扩展参数,所含属性键值会扩展到Event对象上(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 = {});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;};/*** 为类型构造器建立继承关系* @name baidu.lang.inherits* @function* @grammar baidu.lang.inherits(subClass, superClass[, className])* @param {Function} subClass 子类构造器* @param {Function} superClass 父类构造器* @param {string} className 类名标识* @remark 使subClass继承superClass的prototype,* 因此subClass的实例能够使用superClass的prototype中定义的所有属性和方法。<br>* 这个函数实际上是建立了subClass和superClass的原型链集成,并对subClass进行了constructor修正。<br>* <strong>注意:如果要继承构造函数,需要在subClass里面call一下,具体见下面的demo例子</strong>* @shortcut inherits* @meta standard* @see baidu.lang.Class*/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;if ("string" == typeof className) {proto._className = className;}};/*** @ignore* @namespace baidu.dom 操作dom的方法。*/baidu.dom = baidu.dom || {};/*** 从文档中获取指定的DOM元素* * @param {string|HTMLElement} id 元素的id或DOM元素* @meta standard* @return {HTMLElement} DOM元素,如果不存在,返回null,如果参数不合法,直接返回参数*/baidu._g = baidu.dom._g = function (id) {if (baidu.lang.isString(id)) {return document.getElementById(id);}return id;};/*** 从文档中获取指定的DOM元素* @name baidu.dom.g* @function* @grammar baidu.dom.g(id)* @param {string|HTMLElement} id 元素的id或DOM元素* @meta standard*             * @returns {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数*/baidu.g = 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;};/*** 在目标元素的指定位置插入HTML代码* @name baidu.dom.insertHTML* @function* @grammar baidu.dom.insertHTML(element, position, html)* @param {HTMLElement|string} element 目标元素或目标元素的id* @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd* @param {string} html 要插入的html* @remark* * 对于position参数,大小写不敏感<br>* 参数的意思:beforeBegin&lt;span&gt;afterBegin   this is span! beforeEnd&lt;/span&gt; afterEnd <br />* 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。* * @shortcut insertHTML* @meta standard*             * @returns {HTMLElement} 目标元素*/baidu.insertHTML = baidu.dom.insertHTML = function (element, position, html) {element = baidu.dom.g(element);var range,begin;if (element.insertAdjacentHTML) {element.insertAdjacentHTML(position, html);} else {// 这里不做"undefined" != typeof(HTMLElement) && !window.opera判断,其它浏览器将出错?!// 但是其实做了判断,其它浏览器下等于这个函数就不能执行了range = element.ownerDocument.createRange();// FF下range的位置设置错误可能导致创建出来的fragment在插入dom树之后html结构乱掉// 改用range.insertNode来插入html, by wenyuxiang @ 2010-12-14.position = position.toUpperCase();if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {range.selectNodeContents(element);range.collapse(position == 'AFTERBEGIN');} else {begin = position == 'BEFOREBEGIN';range[begin ? 'setStartBefore' : 'setEndAfter'](element);range.collapse(begin);}range.insertNode(range.createContextualFragment(html));}return element;};/*** 为目标元素添加className* @name baidu.dom.addClass* @function* @grammar baidu.dom.addClass(element, className)* @param {HTMLElement|string} element 目标元素或目标元素的id* @param {string} className 要添加的className,允许同时添加多个class,中间使用空白符分隔* @remark* 使用者应保证提供的className合法性,不应包含不合法字符,className合法字符参考:http://www.w3.org/TR/CSS2/syndata.html。* @shortcut addClass* @meta standard* 	            * @returns {HTMLElement} 目标元素*/baidu.ac = baidu.dom.addClass = function (element, className) {element = baidu.dom.g(element);var classArray = className.split(/\s+/),result = element.className,classMatch = " " + result + " ",i = 0,l = classArray.length;for (; i < l; i++){if ( classMatch.indexOf( " " + classArray[i] + " " ) < 0 ) {result += (result ? ' ' : '') + classArray[i];}}element.className = result;return element;};/*** @ignore* @namespace baidu.event 屏蔽浏览器差异性的事件封装。* @property target 	事件的触发元素* @property pageX 		鼠标事件的鼠标x坐标* @property pageY 		鼠标事件的鼠标y坐标* @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 目标元素或目标元素id* @param {string} type 事件类型* @param {Function} listener 需要添加的监听器* @remark*  1. 不支持跨浏览器的鼠标滚轮事件监听器添加<br>*  2. 改方法不为监听器灌入事件对象,以防止跨iframe事件挂载的事件对象获取失败            * @shortcut on* @meta standard* @see baidu.event.un*             * @returns {HTMLElement|window} 目标元素*/baidu.on = baidu.event.on = function (element, type, listener) {type = type.replace(/^on/i, '');element = baidu._g(element);var realListener = function (ev) {// 1. 这里不支持EventArgument,  原因是跨frame的事件挂载// 2. element是为了修正thislistener.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;};/*** 为目标元素移除事件监听器* @name baidu.event.un* @function* @grammar baidu.event.un(element, type, listener)* @param {HTMLElement|string|window} element 目标元素或目标元素id* @param {string} type 事件类型* @param {Function} listener 需要移除的监听器* @shortcut un* @meta standard*             * @returns {HTMLElement|window} 目标元素*/baidu.un = baidu.event.un = function (element, type, listener) {element = baidu._g(element);type = type.replace(/^on/i, '').toLowerCase();var lis = baidu.event._listeners, len = lis.length,isRemoveAll = !listener,item,realType, realListener;//如果将listener的结构改成json//可以节省掉这个循环,优化性能//但是由于un的使用频率并不高,同时在listener不多的时候//遍历数组的性能消耗不会对代码产生影响//暂不考虑此优化while (len--) {item = lis[len];// listener存在时,移除element的所有以listener监听的type类型事件// listener不存在时,移除element的所有type类型事件if (item[1] === type&& item[0] === element&& (isRemoveAll || item[2] === listener)) {realType = item[4];realListener = item[3];if (element.removeEventListener) {element.removeEventListener(realType, realListener, false);} else if (element.detachEvent) {element.detachEvent('on' + realType, realListener);}lis.splice(len, 1);}}            return element;};/*** 阻止事件的默认行为* @name baidu.event.preventDefault* @function* @grammar baidu.event.preventDefault(event)* @param {Event} event 事件对象* @meta standard*/baidu.preventDefault = baidu.event.preventDefault = function (event) {if (event.preventDefault) {event.preventDefault();} else {event.returnValue = false;}};})();/** * @exports DistanceTool as BMapLib.DistanceTool */var DistanceTool =/*** DistanceTool类的构造函数* @class 距离测算类,实现测距效果的<b>入口</b>。* 实例化该类后,即可调用该类提供的open* 方法开启测距状态。* * @constructor* @param {Map} map Baidu map的实例对象* @param {Json Object} opts 可选的输入参数,非必填项。可输入选项包括:<br />* {"<b>followText</b>" : {String} 测距过程中,提示框文字,* <br />"<b>unit</b>" : {String} 测距结果所用的单位制,可接受的属性为"metric"表示米制和"us"表示美国传统单位,* <br />"<b>lineColor</b>" : {String} 折线颜色,* <br />"<b>lineStroke</b>" : {Number} 折线宽度,* <br />"<b>opacity</b>" : {Number} 透明度,* <br />"<b>lineStyle</b>" : {String} 折线的样式,只可设置solid和dashed,* <br />"<b>secIcon</b>" : {BMap.Icon} 转折点的Icon,* <br />"<b>closeIcon</b>" : {BMap.Icon} 关闭按钮的Icon,* <br />"<b>cursor</b>" : {String} 跟随的鼠标样式}** @example <b>参考示例:</b><br />* var map = new BMap.Map("container");<br />map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);<br />var myDistanceToolObject = new BMapLib.DistanceTool(map, {lineStroke : 2});*/BMapLib.DistanceTool = function(map, opts){if (!map) {return;}//以下部分是添加的代码if( OperationMask._maskElement ){OperationMask._maskElement = null;}//以上部分是添加的代码/*** map对象* @private* @type {Map}*/this._map = map;opts = opts || {};/*** _opts是默认参数赋值。* 下面通过用户输入的opts,对默认参数赋值* @private* @type {Json}*/this._opts = baidu.extend(baidu.extend(this._opts || {}, {/*** 测距提示* @private* @type {String}*/tips : "测距",/*** 测距过程中,提示框文字* @private* @type {String}*/followText : "单击确定地点,双击结束",/*** 测距结果所用的单位制,可接受的属性为"metric"表示米制和"us"表示美国传统单位* @private* @type {String}*/unit : "metric",/*** 折线颜色* @private* @type {String}*/lineColor : "#ff6319",/*** 折线线宽* @private* @type {Number}*/lineStroke : 2,/*** 折线透明度* @private* @type {Number}*/opacity : 0.8,/*** 折线样式* @private* @type {String}*/lineStyle     : "solid",/*** 跟随鼠标样式* @private* @type {String}*/cursor : "http://api.map.baidu.com/images/ruler.cur",/*** 转折点的ICON样式* @private* @type {BMap.Icon}*/secIcon : null,/*** 转折点的ICON样式* @private* @type {BMap.Icon}*/closeIcon : null}), opts);/*** 跟随的title覆盖物* @private* @type {BMap.Label}*/this._followTitle = null;/*** 折线包含所有点的数组* @private* @type {Array}*/this._points = [];/*** 折线所包含的所有path数组* @private* @type {Array}*/this._paths = [];/*** 折线结点图片数组* @private* @type {Array}*/this._dots = [];/*** 折线测距包含所有线段的距离* @private* @type {Array}*/this._segDistance = [];/*** 覆盖物的数组* @private* @type {Array}*/this._overlays = [];/*** 是否在调用map.clearOverlays清除画线需要建立的相关overlay元素* @private* @type {Boolean}*/this._enableMassClear = true,/*** 单位制,存储语言包中定义的单位名称* @private* @type {Json}*/this._units = {// metric 表示米制metric : {/*** 米制的名称* @type {String}*/name : "metric",/*** 和米制的换算关系* @type {Number}*/conv : 1,/*** 米制单位下两个单位制之间的换算关系* @type {Number}*/incon : 1000,/*** 米制单位下较小单位* @type {String}*/u1 : "米",/*** 米制单位下较大单位* @type {String}*/u2 : "公里"},// us 表示美国传统单位,各参数意义同上metricus : {name : "us",conv : 3.2808,incon : 5279.856,u1 : "英尺",u2 : "英里"}};/*** 是否已经开启了测距状态* @private* @type {Boolean}*/this._isOpen = false;/*** 未点击任何一点时,鼠标移动时的跟随提示文字* @private* @type {String}*/this._startFollowText = "单击确定起点";/*** 地图移动的计时器* @private* @type {Object}*/this._movingTimerId = null;/*** 测距需要添加的CSS样式* @private* @type {Json}*/this._styles = {"BMapLib_diso" : "height:17px;width:5px;position:absolute;background:url(http://api.map.baidu.com/images/dis_box_01.gif) no-repeat left top","BMapLib_disi" : "color:#7a7a7a;position:absolute;left:5px;padding:0 4px 1px 0;line-height:17px;background:url(http://api.map.baidu.com/images/dis_box_01.gif) no-repeat right top" ,"BMapLib_disBoxDis" : "color:#ff6319;font-weight:bold"};if (this._opts.lineStroke <= 0) {this._opts.lineStroke = 2;}if (this._opts.opacity > 1) {this._opts.opacity = 1;} else if (this._opts.opacity < 0) {this._opts.opacity = 0;}if (this._opts.lineStyle != "solid" &&this._opts.lineStyle != "dashed") {this._opts.lineStyle = "solid";}if (!this._units[this._opts.unit]) {this._opts.unit = "metric";}this.text = "测距";}// 通过baidu.lang下的inherits方法,让DistanceTool继承baidu.lang.Classbaidu.lang.inherits(DistanceTool, baidu.lang.Class, "DistanceTool");/*** 地图区域的移动事件绑定* @return 无返回值*/DistanceTool.prototype._bind = function(){// 设置鼠标样式this._setCursor(this._opts.cursor);var me = this;// 在装载地图的页面元素上,绑定鼠标移动事件baidu.on(this._map.getContainer(), "mousemove", function(e){if (!me._isOpen) {return;}if (!me._followTitle) {return;}e = window.event || e;var t = e.target || e.srcElement;// 如果触发该事件的页面元素不是遮盖效果层,则返回,无操作if (t != OperationMask.getDom(me._map)) {me._followTitle.hide();return;}if (!me._mapMoving) {me._followTitle.show();}// 设置鼠标移动过程中,跟随的文字提示框的位置var pt = OperationMask.getDrawPoint(e, true);me._followTitle.setPosition(pt);});// 创建鼠标跟随的文字提示框if (this._startFollowText) {var t = this._followTitle = new BMap.Label(this._startFollowText, {offset : new BMap.Size(14, 16)});this._followTitle.setStyles({color : "#333", borderColor : "#ff0103"});}};/*** 开启地图的测距状态* @return {Boolean},开启测距状态成功,返回true;否则返回false。** @example <b>参考示例:</b><br />* myDistanceToolObject.open();*/DistanceTool.prototype.open = function(){// 判断测距状态是否已经开启if (this._isOpen == true){return true;}// 已有其他地图上的鼠标操作工具开启if (!!BMapLib._toolInUse) {return;}this._isOpen = true;BMapLib._toolInUse = true;// 判断是否是否在移动过程中if (this._mapMoving){delete this._mapMoving;}var me = this;// 增加鼠标在地图区域移动的事件// 通过binded参数,避免多次绑定if (!this._binded) {this._binded = true;// 绑定控件项事件this._bind();// 地图的移动过程中,需要隐藏相关的提示框this._map.addEventListener("moving", function(){me._hideCurrent();});}// 将文字提示框作为BMap.Label元素,提交给Map Api进行管理if (this._followTitle) {this._map.addOverlay(this._followTitle);this._followTitle.hide();}/*** 测距过程中,点击地图时,触发的操作* @ignore* @param {Object} e event对象*/var distClick = function(e) {var map = me._map;if (!me._isOpen) {return;}// 通过event对象,计算得出点击位置的物理坐标,poi为一个BMap.Point对象e = window.event || e;var poi = OperationMask.getDrawPoint(e, true);// 验证计算得出的该点的位置合理性if (!me._isPointValid(poi)) {return;}// 记录当前点的屏幕位置me._bind.initX = e.pageX || e.clientX || 0;me._bind.initY = e.pageY || e.clientY || 0;// 这个if循环内的计算是,判断当前这个点,与存储内的最后一个点的距离,// 如果距离过小,比如小于5,可以认为是用户的误点,可以忽略掉if (me._points.length > 0){var lstPx = map.pointToPixel(me._points[me._points.length - 1]);var thisPx = map.pointToPixel(poi);var dis = Math.sqrt(Math.pow(lstPx.x - thisPx.x, 2) + Math.pow(lstPx.y - thisPx.y, 2));if (dis < 5) {return;}}me._bind.x = e.layerX || e.offsetX || 0;me._bind.y = e.layerY || e.offsetY || 0;me._points.push(poi);// 添加测距结点me._addSecPoint(poi);// 调整跟踪鼠标的标签if (me._paths.length == 0) {me._formatTitle(1, me._opts.followText, me._getTotalDistance());}// 修改确定线的颜色if (me._paths.length > 0) {me._paths[me._paths.length - 1].show();me._paths[me._paths.length - 1].setStrokeOpacity(me._opts.opacity);}var path = new BMap.Polyline([poi, poi], {enableMassClear : me._enableMassClear});me._map.addOverlay(path);me._paths.push(path);me._overlays.push(path);// 测距模式下线样式固定path.setStrokeWeight(me._opts.lineStroke);path.setStrokeColor(me._opts.lineColor);path.setStrokeOpacity(me._opts.opacity / 2);path.setStrokeStyle(me._opts.lineStyle);           // 如果地图正在移动则隐藏掉if (me._mapMoving){path.hide();}if (me._points.length > 1) {var siblingPath = me._paths[me._points.length - 2];siblingPath.setPositionAt(1, poi);}// 生成节点旁边的距离显示框var disText = "";if (me._points.length > 1) {// 非起点的节点,显示当前的距离var segDis = me._setSegDistance(me._points[me._points.length - 2], me._points[me._points.length - 1]);var meters = me._getTotalDistance();disText = me._formatDisStr(meters);} else {disText = "起点";}                var disLabel = new BMap.Label(disText, {offset : new BMap.Size(10, -5), enableMassClear : me._enableMassClear});disLabel.setStyles({color : "#333", borderColor : "#ff0103"});me._map.addOverlay(disLabel);me._formatSegLabel(disLabel, disText);me._overlays.push(disLabel);poi.disLabel = disLabel;disLabel.setPosition(poi);/*** 测距过程中,每次点击底图添加节点时,派发事件的接口* @name DistanceTool#onaddpoint* @event* @param {Event Object} e 回调函数会返回event参数,包括以下返回值:* <br />{"<b>point</b> : {BMap.Point} 最新添加上的节点BMap.Point对象,* <br />"<b>pixel</b>:{BMap.pixel} 最新添加上的节点BMap.Pixel对象,* <br />"<b>index</b>:{Number} 最新添加的节点的索引,* <br />"<b>distance</b>:{Number} 截止最新添加的节点的总距离}** @example <b>参考示例:</b><br />* myDistanceToolObject.addEventListener("addpoint", function(e) {  alert(e.distance);  });*/// 生成名为onaddpoint的baidu.lang.Event对象// 并给该event对象添加上point、pixel、index和distance等属性字段// 然后在此刻,将绑定在onaddpoint上事件,全部赋予event参数,然后派发出去var event = new baidu.lang.Event("onaddpoint");event.point = poi;event.pixel = me._map.pointToPixel(poi);event.index = me._points.length - 1;event.distance = me._getTotalDistance().toFixed(0);me.dispatchEvent(event);};/*** 测距过程中,鼠标在地图上移动时,触发的操作* @ignore* @param {Object} e event对象*/var distMove = function(e) {if (!me._isOpen){return;}// 通过判断数组me._paths的长度,判断当前是否已经有测量节点// 也就是,如果没有节点,则还没有开始测量if (me._paths.length > 0) {// 通过event参数,计算当前点的位置e = window.event || e;var curX = e.pageX || e.clientX || 0;var curY = e.pageY || e.clientY || 0;if (typeof me._bind.initX == "undefined") {me._bind.x = e.layerX || e.offsetX || 0;me._bind.y = e.layerY || e.offsetY || 0;me._bind.initX = curX;me._bind.initY = curY;}var x = me._bind.x + curX - me._bind.initX;var y = me._bind.y + curY - me._bind.initY;// 修改最后一条折线的终点位置,使之随着鼠标移动画线var path = me._paths[me._paths.length - 1];var poi = me._map.pixelToPoint(new BMap.Pixel(x, y));path.setPositionAt(1, poi);if (!me._mapMoving) {path.show();}var dx = 0;var dy = 0;// 计算当前鼠标位置,是否靠近边界、或者已经出了边界// 如果在边界位置,则需要向对应的方向移动地图,来进行测量// 每次移动的距离,设定为8if (x < 10) {dx = 8;} else if (x > me._map.getSize().width - 10){dx = -8;}if (y < 10) {dy = 8;} else if (y > me._map.getSize().height - 10){dy = -8;}// 如果dx和dy都等于0,表明不需要移动地图if (dx != 0 || dy != 0){// 此时需要向一个方向,平移地图if (!distMove._movingTimerId){me._mapMoving = true;me._map.panBy(dx, dy, {noAnimation : true});                        me._movingTimerId = distMove._movingTimerId = setInterval(function(){me._map.panBy(dx, dy, {noAnimation : true});}, 30);// 地图移动过程中,隐藏线段和标签path.hide();me._followTitle && me._followTitle.hide();}} else {if (distMove._movingTimerId) {// 此时用户不在需要移动地图来测量,可以清除计时器clearInterval(distMove._movingTimerId);delete distMove._movingTimerId;delete me._movingTimerId;// 显示跟随提示框,并修改线路位置var lstP = me._paths[me._paths.length - 1];var poiN = me._map.pixelToPoint(new BMap.Pixel(x, y));if (!lstP) {return;}lstP.setPositionAt(1, poiN);lstP.show();if (me._followTitle) {me._followTitle.setPosition(poiN);me._followTitle.show();}me._bind.i = 0;me._bind.j = 0;delete me._mapMoving;}}// 实时更新文字提示框中的距离if (me._followTitle) {var td = me._getTotalDistance();var dis = me._map.getDistance(me._points[me._points.length - 1], poi);me._updateInstDis(me._followTitle, td + dis);}} else {// 此时用户还没有开始测量,只是鼠标随便在地图上移动if (me._followTitle) {me._followTitle.show();e = window.event || e;var t = e.target || e.srcElement;if (t != OperationMask.getDom()) {me._followTitle.hide();}}        }};/*** 测距要结束时,双击地图,触发的操作* @ignore* @param {Object} e event对象*/var distDblclick = function(e) {if (!me._isOpen) {return;}// 结束时,删除绑定的事件baidu.un(OperationMask.getDom(me._map), "click", distClick);baidu.un(document, "mousemove", distMove);baidu.un(OperationMask.getDom(me._map), "dblclick", distDblclick);            baidu.un(document, "keydown", distKeyDown);baidu.un(OperationMask.getDom(me._map), "mouseup", distMouseUp);// 调用close()关闭测距状态setTimeout(function(){me.close();}, 50);};/*** 测距时的键盘操作* @ignore* @param {Object} e event对象*/var distKeyDown = function(e){e = window.event || e;if (e.keyCode == 27){ // [ESC]退出本次测距me._clearCurData();setTimeout(function(){me.close();}, 50);}};/*** 测距过程中,鼠标弹起时,触发的操作* @ignore* @param {Object} e event对象*/var distMouseUp = function(e) {e = window.event || e;var ieVersion = 0;if (/msie (\d+\.\d)/i.test(navigator.userAgent)) {ieVersion = document.documentMode || + RegExp['\x241'];}if (ieVersion && e.button != 1 || e.button == 2){me.close();}};// 初始化存储数据me._initData();// 调整title的内容this._formatTitle();// 创建透明覆盖层,并设置鼠标样式OperationMask.show(this._map);this._setCursor(this._opts.cursor);// 绑定全部事件baidu.on(OperationMask.getDom(this._map), "click", distClick);baidu.on(document, "mousemove", distMove);baidu.on(OperationMask.getDom(this._map), "dblclick", distDblclick);baidu.on(document, "keydown", distKeyDown);baidu.on(OperationMask.getDom(this._map), "mouseup", distMouseUp);// 将绑定的事件、和对应的绑定对象,记录在数组中this.bindFunc = [{elem : OperationMask.getDom(this._map), type : "click", func : distClick}, {elem : OperationMask.getDom(this._map), type : "dblclick", func : distDblclick},{elem : document, type : "mousemove", func : distMove},{elem : document, type : "keydown", func : distKeyDown},{elem : OperationMask.getDom(this._map), type : "mouseup", func : distMouseUp}];return true;};/*** 画线结束时,派发drawend事件* @return 无返回值*/DistanceTool.prototype._dispatchLastEvent = function() {/*** 测距时,每次双击底图结束当前测距折线时,派发事件的接口* @name DistanceTool#ondrawend* @event* @param {Event Object} e 回调函数会返回event参数,包括以下返回值:* <br />{"<b>points</b> : {BMap.Point} 所有测量时,打下的节点BMap.Point对象,* <br />"<b>overlays</b>:{Array} 所有测量时,生成的线段BMap.Overlay对象,* <br />"<b>distance</b>:{Number} 测量解释时的最终距离}** @example <b>参考示例:</b><br />* myDistanceToolObject.addEventListener("drawend", function(e) {  alert(e.distance);  });*/// 生成名为ondrawend的baidu.lang.Event对象// 并给该event对象添加上points、overlays和distance等属性字段// 然后在此刻,将绑定在ondrawend上事件,全部赋予event参数,然后派发出去var event = new baidu.lang.Event("ondrawend");event.points = this._points ? this._points.slice(0) : [];event.overlays = this._paths ? this._paths.slice(0, this._paths.length - 1) : [];event.distance = this._getTotalDistance().toFixed(0);this.dispatchEvent(event);};/*** 关闭测距状态* @return 无返回值** @example <b>参考示例:</b><br />* myDistanceToolObject.close();*/DistanceTool.prototype.close = function(){if (this._isOpen == false){return;}this._isOpen = false;BMapLib._toolInUse = false;if (this._mapMoving){delete this._mapMoving;}var me = this;me._dispatchLastEvent();if (me._points.length < 2){// 不是有效绘制,清除所有内容me._clearCurData();} else {me._paths[me._paths.length - 1].remove();me._paths[me._paths.length - 1] = null;me._paths.length = me._paths.length - 1;// 移除最近一次标记var pt = me._points[me._points.length - 1];if (pt.disLabel){pt.disLabel.remove();}me._processLastOp();}OperationMask.hide();// 删除绑定的事件for (var i = 0, l = this.bindFunc.length; i < l; i ++){baidu.un(this.bindFunc[i].elem, this.bindFunc[i].type, this.bindFunc[i].func);}// 停止地图移动if (me._movingTimerId){clearInterval(me._movingTimerId);me._movingTimerId = null;}if (this._followTitle){this._followTitle.hide();}};/*** 清除本次测距的暂存数据* @return 无返回值*/DistanceTool.prototype._clearCurData = function(){for (var i = 0, l = this._points.length; i < l; i ++){if (this._points[i].disLabel){this._points[i].disLabel.remove();}}for (var i = 0, l = this._paths.length; i < l; i ++){this._paths[i].remove();}for (var i = 0, l = this._dots.length; i < l; i ++){this._dots[i].remove();}this._initData();};/*** 初始化存储数组* @return 无返回值*/DistanceTool.prototype._initData = function(){// 初始化point数组this._points.length = 0;// 初始化path数组this._paths.length = 0;// 初始化分段距离数组this._segDistance.length = 0;// 初始化结点图像数组this._dots.length = 0;};/*** 计算两点之间距离并存放在分段距离数组中* @param {Point}* @param {Point}* @return {Number} 两个地理点之间的距离*/DistanceTool.prototype._setSegDistance = function(pt0, pt1){if (!pt0 || !pt1){return;}var dis = this._map.getDistance(pt0, pt1);this._segDistance.push(dis);return dis;};/*** 获得总距离* @return {Number} 总距离*/DistanceTool.prototype._getTotalDistance = function(){var totalDis = 0;for (var i = 0, l = this._segDistance.length; i < l; i ++){totalDis += this._segDistance[i];}return totalDis;};/*** 将米制单位的数值换算成为目标单位下的数值* @type {Number} 需要转换的数值* @type {String} 字符串描述的目标单位,* "metric" 表示米制单位,* "us" 表示美国传统单位制* @return {Number} 转换后的数值*/DistanceTool.prototype._convertUnit = function(num, unit){unit = unit || "metric";if (this._units[unit]){return num * this._units[unit].conv;}return num;};/*** 添加测距结点* @param {BMap.Point} 节点* @return 无返回值*/DistanceTool.prototype._addSecPoint = function(pt){var ico = this._opts.secIcon ? this._opts.secIcon :new BMap.Icon("http://api.map.baidu.com/images/mapctrls.png", new BMap.Size(11, 11), {imageOffset: new BMap.Size(-26, -313)});var secPt = new BMap.Marker(pt, {icon : ico, clickable : false, baseZIndex : 3500000, zIndexFixed : true,enableMassClear : this._enableMassClear});this._map.addOverlay(secPt);this._dots.push(secPt);};/*** 格式化距离字符串* @param {Number} 距离* @return {String} 格式化的字符串*/DistanceTool.prototype._formatDisStr = function(distance){var u = this._opts.unit;var unit = this._units[u].u1;var dis = this._convertUnit(distance, u);if (dis > this._units[u].incon){dis = dis / this._units[u].incon;unit = this._units[u].u2;dis = dis.toFixed(1);} else {dis = dis.toFixed(0); }return dis + unit;};/*** 设置鼠标样式* @param {String} cursor 鼠标样式* @return 没有返回值*/DistanceTool.prototype._setCursor = function(cursor){// 由于webkit内核浏览器下,cursor设置后默认不会居中,所以需要对偏移值进行设置var csr = /webkit/.test(navigator.userAgent.toLowerCase()) ?"url(" + this._opts.cursor + ") 3 6, crosshair" :"url(" + this._opts.cursor + "), crosshair"OperationMask._setCursor(csr);};/*** 获取鼠标样式* @return {String} 跟随的鼠标样式*/DistanceTool.prototype._getCursor = function(){return this._opts.cursor;};/*** 调整分段距离样式* @param {BMap.Label} label 提示框的Label* @param {String} 需要填入的文字* @return 没有返回值*/DistanceTool.prototype._formatSegLabel = function(label, text){label.setStyle({"border" : "none", "padding" : "0"});label.setContent("<span style='" + this._styles.BMapLib_diso + "'><span style='" + this._styles.BMapLib_disi + "'>" + text + "</span></span>");};/*** 处理最后一次操作,当用户双击或测距被强行退出时调用* @return 没有返回值*/DistanceTool.prototype._processLastOp = function() {var me = this;// 删除上次移动临时数据delete me._bind.x;delete me._bind.y;delete me._bind.initX;delete me._bind.initY;// 验证路径if (me._paths.length > me._points.length - 1){var l = me._paths.length - 1;me._paths[l].remove();me._paths[l] = null;me._paths.length = l;}// 保存本次测距对象var disObj = {};disObj.points = me._points.slice(0);disObj.paths  = me._paths.slice(0);disObj.dots   = me._dots.slice(0);disObj.segDis = me._segDistance.slice(0);// 判断总距离和按钮位置var lstPx = me._map.pointToPixel(disObj.points[disObj.points.length - 1]);var prePx = me._map.pointToPixel(disObj.points[disObj.points.length - 2]);var btnOffset = [0, 0];var disOffset = [0, 0];if (lstPx.y - prePx.y >= 0){// 距离位于下端disOffset = [-5, 11];} else {// 距离位于上端disOffset = [-5, -35];}if (lstPx.x - prePx.x >= 0){// 按钮位于右侧btnOffset = [14, 0];} else {// 按钮位于左侧btnOffset = [-14, 0];}// 显示总距离var pt = disObj.points[disObj.points.length - 1];pt.disLabel = new BMap.Label("", {offset: new BMap.Size(-15, -40), enableMassClear: me._enableMassClear});pt.disLabel.setStyles({color: "#333", borderColor: "#ff0103"});me._map.addOverlay(pt.disLabel);pt.disLabel.setOffset(new BMap.Size(disOffset[0], disOffset[1]));pt.disLabel.setPosition(pt);me._formatTitle(2, "", "", pt.disLabel);// 添加关闭按钮var bico = this._opts.closeIcon ? this._opts.closeIcon :new BMap.Icon("http://api.map.baidu.com/images/mapctrls.gif", new BMap.Size(12, 12), {imageOffset: new BMap.Size(0, -14)});disObj.closeBtn = new BMap.Marker(disObj.points[disObj.points.length - 1], {icon : bico, offset : new BMap.Size(btnOffset[0], btnOffset[1]), baseZIndex : 3600000,enableMassClear : me._enableMassClear});me._map.addOverlay(disObj.closeBtn);disObj.closeBtn.setTitle("清除本次测距");// 点击关闭按钮,绑定关闭按钮事件disObj.closeBtn.addEventListener("click", function(e){// 关闭本次测距,清除相关存储和变量for (var i = 0, l = disObj.points.length; i < l; i ++){disObj.points[i].disLabel.remove();disObj.points[i].disLabel = null;}for (var i = 0, l = disObj.paths.length; i < l; i ++){disObj.paths[i].remove();disObj.paths[i] = null;}for (var i = 0, l = disObj.dots.length; i < l; i ++){disObj.dots[i].remove();disObj.dots[i] = null;}disObj.closeBtn.remove();disObj.closeBtn = null;stopBubble(e);/*** @ignore* 测距结束后,点击线段上最后一个节点旁的关闭按钮时,派发事件的接口* @name DistanceTool#onremovepolyline* @event* @param {Event Object} e 回调函数会返回event参数** @example <b>参考示例:</b><br />* myDistanceToolObject.addEventListener("removepolyline", function(e) {  alert(e.type);  });*/// 生成名为onremovepolyline的baidu.lang.Event对象// 然后在此刻,将绑定在onremovepolyline上事件,全部赋予event参数,然后派发出去var event = new baidu.lang.Event("onremovepolyline");me.dispatchEvent(event);});        me._initData();};/*** 生成测距过程中的文字提示框* @param {String} type* @param {String} text * @param {String} distance* @param {Label} label* @return 无返回值*/DistanceTool.prototype._formatTitle = function(type, text, distance, label){var title = label || this._followTitle;if (!title){return;}title.setStyle({"lineHeight" : "16px", "zIndex" : "85", "padding" : "3px 5px"});var t = this._startFollowText || "";var htmls = [];if (type == 1){// 测距过程中的提示title.setOffset(0, 25);var u = this._opts.unit;var unit = this._units[u].u1;var dis = this._convertUnit(distance, u);if (dis > this._units[u].incon){dis = dis / this._units[u].incon;unit = this._units[u].u2;dis = dis.toFixed(1);} else {dis = dis.toFixed(0);}htmls.push("<span>总长:<span style='" + this._styles.BMapLib_disBoxDis+"'>" + dis + "</span>" + unit + "</span><br />");htmls.push("<span style='color:#7a7a7a'>" + text + "</span>");} else if (type == 2) {// 结束时的总距离展示var u = this._opts.unit;var unit = this._units[u].u1;var dis = this._convertUnit(this._getTotalDistance(), u);if (dis > this._units[u].incon){dis = dis / this._units[u].incon;unit = this._units[u].u2;dis = dis.toFixed(1);} else{dis = dis.toFixed(0);}htmls.push("总长:<span style='" + this._styles.BMapLib_disBoxDis + "'>" + dis + "</span>" + unit);} else {title.setOffset(0, 25);htmls.push(t);}title.setContent(htmls.join(""));};/*** 更新label的距离* @param HTMLElement label的DOM元素* @param Number 距离*/DistanceTool.prototype._updateInstDis = function(label, dis){// 换算距离var u = this._opts.unit;var unit = this._units[u].u1;if (dis > this._units[u].incon){dis = dis / this._units[u].incon;unit = this._units[u].u2;dis = dis.toFixed(1);} else {dis = dis.toFixed(0);}// 修改Label的内容if (label) {var htmls = [];htmls.push("<span>总长:<span style='" + this._styles.BMapLib_disBoxDis + "'>" + dis + "</span>" + unit + "</span><br />");htmls.push("<span style='color:#7a7a7a'>" + this._opts.followText + "</span>");label.setContent(htmls.join(""));}};/*** 隐藏相关的线段和提示框文字* @return 无返回值*/DistanceTool.prototype._hideCurrent = function(){if (!this._isOpen){return;}if (this._paths.length > 0){var p = this._paths[this._paths.length - 1];p.hide();}this._followTitle && this._followTitle.hide();};/*** 验证传入点的位置合理性* @param {BMap.Point} pt 需要被验证的point点* @return 无返回值*/DistanceTool.prototype._isPointValid = function(pt){if (!pt){return false;}var mapBounds = this._map.getBounds();var sw = mapBounds.getSouthWest(),ne = mapBounds.getNorthEast();if (pt.lng < sw.lng ||pt.lng > ne.lng ||pt.lat < sw.lat ||pt.lat > ne.lat) {return false;}return true;};/*** OperationMask,透明覆盖层,在地图上进行鼠标绘制操作时使用,* 闭包,对外不暴露*/var OperationMask = {/*** map对象* @type {Map}*/_map : null,/*** HTML字符串* @type {String}*/_html : "<div style='background:transparent url(http://api.map.baidu.com/images/blank.gif);position:absolute;left:0;top:0;width:100%;height:100%;z-index:1000' unselectable='on'></div>",/*** html元素* @type {HTMLElement}*/_maskElement : null,/*** 鼠标指针* @type {String}*/_cursor: 'default',/*** 操作层是否在使用中* @type {Boolean}*/_inUse: false,/*** 透明覆盖层的显示** @param {Map} map map对象* @return 无返回值*/show : function(map) {if (!this._map) {this._map = map;}this._inUse = true;if (!this._maskElement) {this._createMask(map);}this._maskElement.style.display = 'block';},/*** 创建覆盖层** @param {Map} map map对象* @return 无返回值*/_createMask : function(map) {this._map = map;if (!this._map) {return;}baidu.insertHTML(this._map.getContainer(), "beforeEnd", this._html);var elem = this._maskElement = this._map.getContainer().lastChild;var stopAndPrevent = function(e) {stopBubble(e);return baidu.preventDefault(e);}baidu.on(elem, 'mouseup', function(e) {if (e.button == 2) {stopAndPrevent(e);}});baidu.on(elem, 'contextmenu', stopAndPrevent);elem.style.display = 'none';},/*** 获取当前绘制点的地理坐标** @param {Event} e e对象* @param {Boolean} n 是否向上查到相对于地图container元素的坐标位置* @return Point对象的位置信息*/getDrawPoint : function(e, n) {e = window.event || e;var x = e.layerX || e.offsetX || 0;var y = e.layerY || e.offsetY || 0;var t = e.target || e.srcElement;if (t != OperationMask.getDom(this._map) && n == true) {while (t && t != this._map.getContainer()) {if (!(t.clientWidth == 0 && t.clientHeight == 0 && t.offsetParent && t.offsetParent.nodeName.toLowerCase() == 'td')) {x += t.offsetLeft;y += t.offsetTop;}t = t.offsetParent;}}if (t != OperationMask.getDom(this._map) && t != this._map.getContainer()) {return;}if (typeof x === 'undefined' || typeof y === 'undefined') {return;}if (isNaN(x) || isNaN(y)) {return;}return this._map.pixelToPoint(new BMap.Pixel(x, y));},/*** 透明覆盖层的隐藏** @return 无返回值*/hide : function() {if (!this._map) {return;}this._inUse = false;if (this._maskElement) {this._maskElement.style.display = 'none';}},/*** 获取HTML容器** @param {Map} map map对象* @return HTML容器元素*/getDom : function(map) {if (!this._maskElement) {this._createMask(map);}return this._maskElement;},/*** 设置鼠标样式** @type {String} cursor 鼠标样式* @return 无返回值*/_setCursor : function(cursor) {this._cursor = cursor || 'default';if (this._maskElement) {this._maskElement.style.cursor = this._cursor;                }}};/*** 停止事件冒泡传播,* 闭包,对外不暴露** @type {Event} e e对象*/function stopBubble(e){var e = window.event || e;e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;};
})();

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. HDMI2.0 3:1转换器方案AG7210/AG7111

    HDMI2.0 3:1 Switch转换器方案,HDMI转接器设计方案,AG7111/AG7210性能参数对比,AG7210规格书,AG7210中文资料,AG7111规格书,AG7111中文资料,DEMO测试版 AG7210详细描述:AG7210允许三个HDMI或DVI视频流传输到一个显示接收器设备。 HDMI符合HDMI 2.0b规格,支持高…...

    2024/5/4 2:58:26
  2. Android_OntouchListener()的应用及Service功能音乐播放器实现

    阅读目录前言轨迹球功能实现:原理:关于安卓监听器:实现代码:功能演示注意事项:Service实现简单的播放器功能实现:Service概述:回调方法:实现代码:功能演示: 前言 本学期学习了移动软件开发课程后,自己尝试实现了两个小功能,一个是利用OntouchListener()实现轨迹球滑…...

    2024/4/15 4:34:25
  3. 常见几种通信原理

    移动通信原理工作原理GSMWCDMACDMA2000LTE 移动通信(Mobile communication)是移动体之间的通信,或移动体与固定体之间的通信。移动体可以是人,也可以是汽车、火车、轮船、收音机等在移动状态中的物体。 移动通信系统由两部分组成:(1) 空间系统;(2)地面系统:①卫星移动无线…...

    2024/4/19 20:55:27
  4. 阿里面试官:Java对象一定是在堆中分配吗?我被秒杀的体无完肤

    面试经历记得几年前有一次阿里去面试,问到了这么一个问题:Java中的对象都是在堆中分配吗?说明为什么!当时我被问得一脸懵逼,瞬间被秒杀得体无完肤,当时我压根就不知道他在考什么知识点,难道对象不是在堆中分配吗?最后就没然后了,回去等通知了。对象的分配几乎所有的对…...

    2024/4/19 22:54:30
  5. 动态面板:拖动滑块解锁(1)

    案例描述: 拖动滑块进行解锁验证。包含以下情形: 拖动滑块时,滑块仅允许水平拖动,且不可超出灰色边框两端; 拖动滑块时,有绿色的背景随滑块移动; 拖动滑块时,如果滑块到达最右端,显示白色文字“加载中”,等待半秒钟后显示白色文字“验证通过”,并且滑块上的图标变为…...

    2024/4/24 12:28:05
  6. 【努力学习】Java 笔记0.9

    Java笔记 高级类特性1Object类对象类型转换(Casting)==操作符与equals方法==equals()方法String对象的创建包装类(Wrapper)基本数据类的包装类作用toString()方法 Object类 Object类是所有Java类的根父类(基类) 多层继承,处于最高层的父类一定是Object类 如果在类的…...

    2024/4/24 12:28:07
  7. Nginx+PHP-FPM运行原理

    CGI common gateway interface (公共网关接口)请求模式:Web Brower(浏览器) ----(通过http协议传输)----> Http Server(服务器nginx/apache) -----> CGI Program -----> DbServer 与 CGI 通过 STDIN/STDOUT(标准的输入/输出)进行数据传递 nginx(动态加载模块) apache(…...

    2024/4/24 12:28:03
  8. springboot学习笔记五

    Docker 1、简介 Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像; 运行中的这个镜像称为容器,容器启动是非常快速的。2、核心概念 docker主机(Host…...

    2024/4/24 12:28:03
  9. 前端day01

    什么是网页 网页是指网站中的一页,通常是HTML格式的文件,他要通过浏览器来阅读 网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视屏等元素组成。通常我们看到的常见的.htm或.html后缀结尾的文件,因此将其称为HTML文件 什么是HTML 常文本标记语言,用来描述网页…...

    2024/4/24 12:28:01
  10. 23种设计模式知识要点

    1.单例模式(Singleton Pattern) 定义:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实 例。) 通用代码:(是线程安全的) public class Singleton { private stati…...

    2024/4/24 12:28:07
  11. 想入手一套群控,群控如何选择?给大家几条建议

    大家好! 首先给大家普及一下群控的发展史第一批群控最早是模拟器,什么雷电模拟器啊 夜神模拟器之类的 现在已经玩不了了,因为没有真机容易被检测 。 第二种就是脚本,是模拟器的升级版,模拟了设备信息,在电脑上控制上百个号同时运行。但是始终解决不了检测问题! 第三种就…...

    2024/5/2 17:49:15
  12. 阿里云服务器搭建frp -实现内网穿透

    阿里云服务器搭建frp -实现内网穿透什么是frp准备工作开始搭建服务端客户端 什么是frp frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。 准备工作 1.一台公网IP的…...

    2024/4/15 4:34:40
  13. idea 集成java-google-style 和 checkStyle

    idea 集成java-google-style 和 checkStyle 文章来源于 https://ningg.top/tool-personal-intellij-idea-java-code-style/ 由于原文章的google_checks.xml有问题,在idea中集成时报错,经修改后可用了,修改后文件如下 <?xml version="1.0"?> <!DOCTYPE …...

    2024/4/15 4:34:39
  14. python程序员小白的成长之路---python的变量基本使用

    python变量的基本使用 1,变量的使用 变量名=数据 说明: 变量名 -> 程序员自己命名 要求:1)标识符 2)不能是关键字 规范:1)见名知义 ​ 2)满足PEP8的命名规范(所有字母都小写,多个单词用下划线隔开) ​ 3)不使用系统提供的函数名,类型名,模块名…...

    2024/4/15 4:34:38
  15. 我这么讲线索二叉树,我三岁大的表弟笑了笑

    目录:1.线索二叉树的由来2.线索二叉树的概念和结构3.二叉树的线索化4.中序线索二叉树的代码实现5.遍历线索二叉树 1.线索二叉树的由来 我问表弟下面的一个问题:在n个结点一个二叉链表中,有多少个空指针域?表弟一脸蒙蔽,于是我解释道:既然有n个结点,那么总共应该有2n个指…...

    2024/4/15 4:34:37
  16. 第四节

    循环结构:while、do——while、for JDK1.5提供了foreach循环 特殊关键字:break、continue、return Break:在switch语句中,用于终止case语句,跳出switch分支结构;在循环结构中,用于终止循环语句,跳出循环结构;与标签语句配合使用从内层循环或内层程序块中退出 只能结束…...

    2024/4/18 9:26:04
  17. 解决:windows中使用Filezilla无法与虚拟机Ubuntu互传文件,错误:550 Permission denied

    1 首先确保Ubuntu和windows互ping成功; 2 确保Ubuntu中已安装vsftpd,即ftp服务器 3 重点:修改vsftpd,4 在Filezilla中与Ubuntu建立连接 5 关闭想要传输的文件,再拖动。 6 成功传输!...

    2024/4/15 4:34:35
  18. 基于空时自适应处理的机载MIMO雷达干扰抑制方法研究

    基于空时自适应处理的机载MIMO雷达干扰抑制方法研究 众所周知,多输入多输出(Multiple-input multiple-output, MIMO)雷达是最近这段时间以来被提出的一种新的雷达体制,相比于传统相控雷达体制在阵列孔径、分辨能力、可检测目标上限、杂波和干扰抑制潜力等方面上具有诸多优势。…...

    2024/4/22 11:22:42
  19. JAVA,为什么代码最后一句没有实现,而且代码没有标红,但是运行时显示有错。(刚开始学)

    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是…...

    2024/4/17 9:02:06
  20. Windows ❀ 批量ping网段命令

    批量ping网段命令 语法介绍: for /L %variable in (start,step,end) do command [command-parameters]variable 变量名 start 开始 step 步长 end 结束 command 命令 command-parameters 命令参数批量Ping介绍 for /L %d in (1,1,255) do ping 192.168.0.%d%d为有符号整数,取…...

    2024/4/21 10:17:31

最新文章

  1. C语言指针进阶_字符指针、指针数组、数组指针、函数指针等的介绍

    文章目录 前言一、字符指针二、指针数组三、 数组指针1. 数组名和 & 数组名2. 数组指针3. 数组指针解引用 四、数组指针的使用二维数组的传参说明数组指针使用小测验 五、数组传参和指针传参1. 一维数组传参总结2. 二维数组传参总结3. 一级指针传参4. 二级指针传参 六、函数…...

    2024/5/4 5:50:27
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二

    ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim&#xff0c;生成一个 turtle &#xff0c;设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...

    2024/5/3 15:22:43
  4. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/5/2 2:40:27
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57