zoukankan      html  css  js  c++  java
  • [OpenLayers] 控件系列之SelectFeature同时支持hover与click

           也许很多时候,selectfeature只需要hover或者click就能达到选择要素的目的,但是当你遇到某些境况,要让你两者兼得,就苦逼了.....因为clickFeature与overFeature互斥

    我是新手,在没看源码之前是苦憋了很久,那个痛苦。看完selectfeature源码,顿时有改的冲动,但是又怕影响其他人使用,最后选择了扩展.

    以下是clickFeature:

    clickFeature: function(feature) {
            if(!this.hover) {
                var selected = (OpenLayers.Util.indexOf(
                    feature.layer.selectedFeatures, feature) > -1);
                if(selected) {
                    if(this.toggleSelect()) {
                        this.unselect(feature);
                    } else if(!this.multipleSelect()) {
                        this.unselectAll({except: feature});
                    }
                } else {
                    if(!this.multipleSelect()) {
                        this.unselectAll({except: feature});
                    }
                    this.select(feature);
                }
            }
        },
    View Code

    以下是overFeature:

    overFeature: function(feature) {
            var layer = feature.layer;
            if(this.hover) {
                if(this.highlightOnly) {
                    this.highlight(feature);
                } else if(OpenLayers.Util.indexOf(
                    layer.selectedFeatures, feature) == -1) {
                    this.select(feature);
                }
            }
        },
    View Code

    以下是继承的SelectFeatureExtend

     1 /**
     2  * Class: OpenLayers.Control.SelectFeatureExtend
     3  * 
     4  * Overwrite the function clickFeature,let it works whether this.hover is false or true 
     5  *
     6  * Inherits from:
     7  *  - <OpenLayers.Control.SelectFeature>
     8  */
     9 OpenLayers.Control.SelectFeatureExtend = OpenLayers.Class(OpenLayers.Control.SelectFeature, {
    10     /**
    11      * Method: clickFeature
    12      * Called on click in a feature
    13      * responds whether this.hover is false or true.
    14      *
    15      * Parameters:
    16      * feature - {<OpenLayers.Feature.Vector>} 
    17      */
    18     clickFeature: function(feature) {
    19         var selected = (OpenLayers.Util.indexOf(
    20             feature.layer.selectedFeatures, feature) > -1);
    21         if(selected) {
    22             if(this.toggleSelect()) {
    23                 this.unselect(feature);
    24             } else if(!this.multipleSelect()) {
    25                 this.unselectAll({except: feature});
    26             }
    27         } else {
    28             if(!this.multipleSelect()) {
    29                 this.unselectAll({except: feature});
    30             }
    31             this.select(feature);
    32         }
    33     },
    34     CLASS_NAME: "OpenLayers.Strategy.SelectFeatureExtend"
    35 });
    View Code
  • 相关阅读:
    树莓派4B-安装docker
    树莓派4B-挂载硬盘
    树莓派4B-修改软件源
    树莓派4B-初始化网络-静态ip
    树莓派4B-下载系统
    爬虫之路: 字体反扒升级版
    annotations导入报错
    [转]微信小程序全局分享转发控制实现——从此无需页面单独配置
    ollydbg 条件断点语法格式
    c++ CreateThread传递char*参数乱码解决办法
  • 原文地址:https://www.cnblogs.com/gis2s/p/3314701.html
Copyright © 2011-2022 走看看