• [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
  • 相关阅读:
    PostGIS解压版安装
    gulp监听文件变化,并拷贝到指定目录
    pre在火狐中不换行
    Undefined symbols for architecture i386: "_crc32", referenced from:
    响应式自动化开发流程-Windows 版
    Gulp入门教程
    SVG折线图
    git-版本控制
    log4j
    CSS:描述样式
  • 原文地址:https://www.cnblogs.com/gis2s/p/3314701.html
Copyright © 2020-2023  润新知