地图放大镜(Magnifying Glass)
来源:互联网 发布:chemdraw mac 编辑:程序博客网 时间:2024/04/28 01:29
在Google、Baidu和MAPABC地图中都有的效果,就是用鼠标滚轮上滚和下滚的时候会出一个平滑放大、缩小的红框动画效果,自己做还挺费劲的呢!看到MAPABC的AJAX API是OPENLAYERS 做核心,脸皮一厚就扣出来用了,整理了一下封装成控件,可以很方便的加到地图中。代码是经过压缩混淆的,有时间再研究整理吧,先这样。
在此感谢MAPABC,如果他们不是扣别人的,版本归他们所有,特此声明!
OpenLayers.Control.MagnifyingGlass = OpenLayers.Class(OpenLayers.Control, { autoActivate: true, initialize: function(){ OpenLayers.Control.prototype.initialize.apply(this, arguments); }, draw: function(){ OpenLayers.Control.prototype.draw.apply(this, arguments); this.handler = new OpenLayers.Handler.MouseWheel(this, { "down": this.magnifyingglassZoomOut, "up": this.magnifyingglassZoomIn }); this.initDiv(); }, initDiv: function(){ var a = OpenLayers.Util.createDiv("map_magnifyingglass"); a.style.borderRight = "medium none"; a.style.borderTop = "medium none"; a.style.borderLeft = "medium none"; a.style.borderBottom = "medium none"; a.style.width = "111px"; a.style.height = "74px"; a.style.display = "none"; a.style.unselectable = "on"; var c = OpenLayers.Util.createDiv(); c.style.lineHeight = "1px"; c.style.width = "4px"; c.style.height = "4px"; c.style.left = "0"; var b = OpenLayers.Util.createDiv(); b.style.lineHeight = "1px"; b.style.width = "4px"; b.style.height = "4px"; b.style.right = "0"; var d = OpenLayers.Util.createDiv(); d.style.lineHeight = "1px"; d.style.width = "4px"; d.style.height = "4px"; d.style.right = "0"; d.style.top = "40px"; var e = OpenLayers.Util.createDiv(); e.style.lineHeight = "1px"; e.style.width = "4px"; e.style.height = "4px"; e.style.left = "0"; e.style.top = "40px"; a.appendChild(c); a.appendChild(b); a.appendChild(d); a.appendChild(e); this.map.viewPortDiv.appendChild(a) }, bw_out: null, bw_in: null, variable: 1, getTimeout: function(a, b, c){ return window.setTimeout(function(){ b.apply(a) }, c) }, magnifyingglassZoomOut: function(a){ if (this.variable == 1) { var b = OpenLayers.Util.getElement("map_magnifyingglass"); if (b) { b.style.width = 111; b.style.height = 74; this.evt = a; this.out() } } }, magnifyingglassZoomIn: function(a){ if (this.variable == 1) { var b = OpenLayers.Util.getElement("map_magnifyingglass"); if (b) { b.style.width = "27px"; b.style.height = "24px"; this.evt = a; this.in_() } } }, out: function(){ this.Rx1(true) }, in_: function(){ this.Rx1(false) }, Rx1: function(a){ var b = OpenLayers.Util.getElement("map_magnifyingglass"); if (this.variable <= 4) { if (b) { var c = 1, d; if (a) { d = parseInt(b.style.width); obj_h = parseInt(b.style.height); c *= 15; if (d >= 30) { if (d && c) b.style.width = Math.abs(d - (c + 6)) + "px"; if (obj_h >= 25) if (obj_h && c) b.style.height = Math.abs(obj_h - c) + "px"; b.style.left = this.evt.xy.x - parseInt(b.style.width) / 2 + "px"; b.style.top = this.evt.xy.y - parseInt(b.style.height) / 2 + "px"; b.childNodes[0].style.borderWidth = "0px 2px 2px 0px"; b.childNodes[0].style.borderStyle = "solid"; b.childNodes[0].style.borderColor = "red"; b.childNodes[1].style.borderWidth = "0px 0px 2px 2px"; b.childNodes[1].style.borderStyle = "solid"; b.childNodes[1].style.borderColor = "red"; b.childNodes[2].style.borderWidth = "2px 0px 0px 2px"; b.childNodes[2].style.borderStyle = "solid"; b.childNodes[2].style.borderColor = "red"; b.childNodes[3].style.borderWidth = "2px 2px 0px 0px"; b.childNodes[3].style.borderStyle = "solid"; b.childNodes[3].style.borderColor = "red"; b.childNodes[2].style.top = b.style.height; b.childNodes[3].style.top = b.style.height; b.style.display = ""; b.style.zIndex = 1010 } this.variable++; this.bw_out = this.getTimeout(this, a ? this.out : this.in_, 60) } else { d = parseInt(b.style.width); obj_h = parseInt(b.style.height); c *= 15; if (d <= 111) { b.style.width = Math.abs(d + c) + "px"; if (obj_h <= 64) b.style.height = Math.abs(obj_h + c) + "px"; b.style.left = this.evt.xy.x - parseInt(b.style.width) / 2 + "px"; b.style.top = this.evt.xy.y - parseInt(b.style.height) / 2 + "px"; b.childNodes[0].style.borderWidth = "2px 0px 0px 2px"; b.childNodes[0].style.borderStyle = "solid"; b.childNodes[0].style.borderColor = "red"; b.childNodes[1].style.borderWidth = "2px 2px 0px 0px"; b.childNodes[1].style.borderStyle = "solid"; b.childNodes[1].style.borderColor = "red"; b.childNodes[2].style.borderWidth = "0px 2px 2px 0px"; b.childNodes[2].style.borderStyle = "solid"; b.childNodes[2].style.borderColor = "red"; b.childNodes[3].style.borderWidth = "0px 0px 2px 2px"; b.childNodes[3].style.borderStyle = "solid"; b.childNodes[3].style.borderColor = "red"; b.childNodes[2].style.top = b.style.height; b.childNodes[3].style.top = b.style.height; b.style.display = ""; b.style.zIndex = 1010 } this.variable++; this.bw_in = this.getTimeout(this, a ? this.out : this.in_, 100) } } } else { if (a) { window.clearTimeout(this.bw_out); this.bw_out = null } else { window.clearTimeout(this.bw_in); this.bw_in = null } this.variable = 1; b.style.display = "none"; b.style.zIndex = 0; b.style.width = "111px"; b.style.height = "74px" } }});
使用方法:
var glass = new OpenLayers.Control.MagnifyingGlass();map.addControl(glass);
懒了,没有写销毁方法,可能会存在内存泄露。
- 地图放大镜(Magnifying Glass)
- CB-9685 A fix for the magnifying glass popping up on iOS9 when longpr
- GIS地图放大镜
- Arcgis for android 地图放大镜
- Glass Carving-(set)
- BNUOJ33568 Glass Pyramid(DFS)
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 放大镜
- 线程例题2(如何实现下载进度条)
- 美好的时节,龌龊的现实
- LOVE WHAT I DO
- VC++程序从OpenCV2.1迁移到OpenCV2.2(vs2010+OpenCV2.2+windows7设置)
- vs2010新建项目窗口.点击没有反映.
- 地图放大镜(Magnifying Glass)
- HDU 2136 Largest prime factor
- 线程-----银行拨号
- Linux内核学习——路线图计划
- TinyXml心得
- OC门与OD门
- 事务与锁
- Linux内核学习——参考资料
- 编译Hadoop的append分支源码