自定义的Openlayers.Popup.FreshCloud继承自Openlayers.Popup.Framed,实现了比较简洁的冒泡效果,详细代码如下

/**
* Class: OpenLayers.Popup.FramedCloud

* Inherits from: 
*  - <OpenLayers.Popup.Framed>
*/
OpenLayers.Popup.FreshCloud =
  OpenLayers.Class(OpenLayers.Popup.Framed, {       /** 
      * Property: contentDisplayClass
      * {String} The CSS class of the popup content div.
      */
      contentDisplayClass: "olFreshCloudPopupContent",       /**
      * APIProperty: autoSize
      * {Boolean} Framed Cloud is autosizing by default.
      */
      autoSize: true,       /**
      * APIProperty: panMapIfOutOfView
      * {Boolean} Framed Cloud does pan into view by default.
      */
      panMapIfOutOfView: true,       /**
      * APIProperty: imageSize
      * {<OpenLayers.Size>}
      */
      imageSize: new OpenLayers.Size(1276, 736),       /**
      * APIProperty: isAlphaImage
      * {Boolean} The FramedCloud does not use an alpha image (in honor of the 
      *     good ie6 folk out there)
      */
      isAlphaImage: false,       /** 
      * APIProperty: fixedRelativePosition
      * {Boolean} The Framed Cloud popup works in just one fixed position.
      */
      fixedRelativePosition: false,       /**
      * Property: positionBlocks
      * {Object} Hash of differen position blocks, keyed by relativePosition
      *     two-character code string (ie "tl", "tr", "bl", "br")
      */
      positionBlocks: {
          "tl": {
              'offset': new OpenLayers.Pixel(55, 0),
              'padding': new OpenLayers.Bounds(5, 35, 5, 5),
              'blocks': [
                { // top-left
                    size: new OpenLayers.Size('auto', 'auto'),
                    anchor: new OpenLayers.Bounds(0, 35, 5, 0),
                    position: new OpenLayers.Pixel(0, 0)
                },
                { //top-right
                    size: new OpenLayers.Size(5, 'auto'),
                    anchor: new OpenLayers.Bounds(null, 35, 0, 0),
                    position: new OpenLayers.Pixel(-1271, 0)
                },
                { //bottom-left
                    size: new OpenLayers.Size('auto', 5),
                    anchor: new OpenLayers.Bounds(0, 30, 5, null),
                    position: new OpenLayers.Pixel(0, -641)
                },
                { //bottom-right
                    size: new OpenLayers.Size(5, 5),
                    anchor: new OpenLayers.Bounds(null, 30, 0, null),
                    position: new OpenLayers.Pixel(-1271, -641)
                },
                { // stem
                    size: new OpenLayers.Size(42, 33),
                    anchor: new OpenLayers.Bounds(null, 0, 30, null),
                    position: new OpenLayers.Pixel(-5, -699)
                }
            ]
          },
          "tr": {
              'offset': new OpenLayers.Pixel(-50,0),
              'padding': new OpenLayers.Bounds(5, 35, 5, 5),
              'blocks': [
                { // top-left
                    size: new OpenLayers.Size('auto', 'auto'),
                    anchor: new OpenLayers.Bounds(0, 35, 5, 0),
                    position: new OpenLayers.Pixel(0, 0)
                },
                { //top-right
                    size: new OpenLayers.Size(5, 'auto'),
                    anchor: new OpenLayers.Bounds(null, 35, 0, 0),
                    position: new OpenLayers.Pixel(-1271, 0)
                },
                { //bottom-left
                    size: new OpenLayers.Size('auto', 5),
                    anchor: new OpenLayers.Bounds(0, 30, 5, null),
                    position: new OpenLayers.Pixel(0, -641)
                },
                { //bottom-right
                    size: new OpenLayers.Size(5, 5),
                    anchor: new OpenLayers.Bounds(null, 30, 0, null),
                    position: new OpenLayers.Pixel(-1271, -641)
                },
                { // stem
                    size: new OpenLayers.Size(42, 33),
                    anchor: new OpenLayers.Bounds(33, 0, null, null),
                    position: new OpenLayers.Pixel(-5, -699)
                }
            ]
          },
          "bl": {
              'offset': new OpenLayers.Pixel(52, 0),
              'padding': new OpenLayers.Bounds(4, 4, 4, 35),
              'blocks': [
                { // top-left
                    size: new OpenLayers.Size('auto', 'auto'),
                    anchor: new OpenLayers.Bounds(0, 5, 5, 30),
                    position: new OpenLayers.Pixel(0, 0)
                },
                { //top-right
                    size: new OpenLayers.Size(5, 'auto'),
                    anchor: new OpenLayers.Bounds(null, 5, 0, 30),
                    position: new OpenLayers.Pixel(-1271, 0)
                },
                { //bottom-left
                    size: new OpenLayers.Size('auto', 5),
                    anchor: new OpenLayers.Bounds(0, 0, 5, null),
                    position: new OpenLayers.Pixel(0, -641)
                },
                { //bottom-right
                    size: new OpenLayers.Size(5, 5),
                    anchor: new OpenLayers.Bounds(null, 0, 0, null),
                    position: new OpenLayers.Pixel(-1271, -641)
                },
                { // stem
                    size: new OpenLayers.Size(42, 32),
                    anchor: new OpenLayers.Bounds(null, null, 30, 2),
                    position: new OpenLayers.Pixel(-52, -697)
                }
            ]
          },
          "br": {
              'offset': new OpenLayers.Pixel(-50, 5),
              'padding': new OpenLayers.Bounds(5, 5, 0, 35),
              'blocks': [
                { // top-left
                    size: new OpenLayers.Size('auto', 'auto'),
                    anchor: new OpenLayers.Bounds(0, 5, 5, 30),
                    position: new OpenLayers.Pixel(0, 0)
                },
                { //top-right
                    size: new OpenLayers.Size(5, 'auto'),
                    anchor: new OpenLayers.Bounds(null, 5, 0, 30),
                    position: new OpenLayers.Pixel(-1271, 0)
                },
                { //bottom-left
                    size: new OpenLayers.Size('auto', 5),
                    anchor: new OpenLayers.Bounds(0, 0, 5, null),
                    position: new OpenLayers.Pixel(0, -641)
                },
                { //bottom-right
                    size: new OpenLayers.Size(5, 5),
                    anchor: new OpenLayers.Bounds(null, 0, 0, null),
                    position: new OpenLayers.Pixel(-1275, -641)
                },
                { // stem
                    size: new OpenLayers.Size(42, 32),
                    anchor: new OpenLayers.Bounds(30, null, null, 2),
                    position: new OpenLayers.Pixel(-52, -697)
                }
            ]
          }
      },       /**
      * APIProperty: minSize
      * {<OpenLayers.Size>}
      */
      minSize: new OpenLayers.Size(105, 10),       /**
      * APIProperty: maxSize
      * {<OpenLayers.Size>}
      */
      maxSize: new OpenLayers.Size(1200, 660),       /** 
      * Constructor: OpenLayers.Popup.FramedCloud
      * 
      * Parameters:
      * id - {String}
      * lonlat - {<OpenLayers.LonLat>}
      * contentSize - {<OpenLayers.Size>}
      * contentHTML - {String}
      * anchor - {Object} Object to which we'll anchor the popup. Must expose 
      *     a 'size' (<OpenLayers.Size>) and 'offset' (<OpenLayers.Pixel>) 
      *     (Note that this is generally an <OpenLayers.Icon>).
      * closeBox - {Boolean}
      * closeBoxCallback - {Function} Function to be called on closeBox click.
      */
      initialize: function (id, lonlat, contentSize, contentHTML, anchor, closeBox,
                        closeBoxCallback) {           this.imageSrc = OpenLayers.Util.getImageLocation('fresh-popup-relative.gif');
          OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments);
          this.contentDiv.className = this.contentDisplayClass;
      },       CLASS_NAME: "OpenLayers.Popup.FreshCloud"

}); 

JS文件地址:http://files.cnblogs.com/wanfeng/FreshCloud.js

图片地址: http://files.cnblogs.com/wanfeng/fresh-popup-relative.gif

openlayers中实现自定冒泡的效果的更多相关文章

  1. OpenLayers中的图层

    OpenLayers有多个不同的图层类,每一个都可以连接到不同的地图服务器.例如通过Layer.WMS类可以连接到WMS地图服务器,通过Layer.Google类可以连接到谷歌地图服务器.OpenLa ...

  2. 理解JavaScript中的事件处理 阻止冒泡event.stopPropagation();

    原文地址:http://www.cnblogs.com/binyong/articles/1750263.html 这篇文章对于了解Javascript的事件处理机制非常好,将它全文转载于此,以备不时 ...

  3. 在WPF中使用PlaneProjection模拟动态3D效果

    原文:在WPF中使用PlaneProjection模拟动态3D效果 虽然在WPF中也集成了3D呈现的功能,在简单的3D应用中,有时候并不需要真实光影的3D场景.毕竟使用3D引擎会消耗很多资源,有时候使 ...

  4. OpenLayers中的图层(转载)

    作者:田念明出处:http://www.cnblogs.com/nianming/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法 ...

  5. WPF中的事件及冒泡事件和隧道事件(预览事件)的区别

    WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别   WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 本文摘要: 1:什么是路由事件: 2:中断事件路 ...

  6. openlayers中单击获取要素

    openlayers中单击获取要素 分类专栏: GIS 总结 OpenLayers   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  7. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  8. 在IE6、IE7中实现块元素的inline-block效果

    在IE6.IE7中实现块元素的inline-block效果有以下两种方法: 1先使用display:inline-block属性触发layout,然后再定义display:inline让块元素呈现内联 ...

  9. bootstrap中table页面做省市区级联效果(级联库见前面级联编辑)(非select下拉框)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

随机推荐

  1. ARP 扫描主机学习笔记

    1.通用套接字地址结构与具体套接字地址结构之间可相互转化 1)通用转具体,某些函数将结果存储在通用套接字地址结构中,这时将通用转换为具体,具体通过访问成员名可以方便的得到结果. 2)具体转通用,为了消 ...

  2. MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的解决办法和原因

    这两天下载了MySQL5.7.11进行安装,发现到了初次使用输入密码的时候,不管怎样都进不去,即使按照网上说的在mysqld 下面添加skip-grant-tables也是不行,后来研究了两天,终于找 ...

  3. Angularjs directive

    .directive('mydir',function(){ return{ multiElement: true/false, priority: number, //default: 0 term ...

  4. U盘安装操作系统

    U盘安装操作系统 On 2010 年 4 月 27 日, in IT, by hr 写在前面 本文主要介绍如何使用U盘安装系统,无法使用光驱安装或者不想随身带着光盘,使用这招都很管用,而且备着这样一只 ...

  5. pthread_create 内存释放

    run() { pthread_attr_destroy(&m_attr);    pthread_detach(pthread_self()); }

  6. Linux运维入门到高级全套常用要点

    Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇................................................................. ...

  7. liunx之:解决liunx下dns配置重启失效的问题

    有时候能ping同ip地址,却ping不通域名,这就是dns没有配置的缘故. 但是DNS配置文件 /etc/resolv.conf 每次重启就会失效. 打开这个配置文件,发现有注释提示: Dynami ...

  8. Google Dapper-大规模分布式系统的基础跟踪设施

    [说明:本文是阅读Google论文"Dapper, a Large-Scale Distributed Systems Tracing Infrastructure"之后的一个简要 ...

  9. Request.UrlReferrer

    1:Request.UrlReferrer可以获取客户端上次请求的url,这样就可以实现类似“上一页”的功能等 2:刷新当前页面,不会改变Request.UrlReferrer的值 3:如果有A,B两 ...

  10. windows系统下在dos命令行kill掉被占用的pid (转)

    原文出自:http://www.2cto.com/os/201304/203771.html   windows系统下在dos命令行kill掉被占用的pid   1.开始-->运行-->c ...