我有一个使用OpenLayers和GeoExt库的网站。 我的目标是为每个图层设置一个不透明度滑块(我有5个图层)。现在,它正在使用我的矢量图层,但不是我的WMS图层。我尝试使用基础层(打开街道地图),它运行正常。
这是创建图层的代码:
//This part is inside an "if success" in an ajax request.
map.addLayer(new OpenLayers.Layer.WMS(openlayers_wms_layer_analyses, CMCDataServer, {
layers: analysesWMSLayer[currentStatePeriod],
styles: analysesWMSStyle[currentStatePeriod],
format: "image/png",
transparent: true,
time: currentStateDate.getUTCFullYear() + "-" + ('0' + (currentStateDate.getUTCMonth() + 1)).slice(-2) + "-" + ('0' + currentStateDate.getUTCDate()).slice(-2) + "T" + timeChopArray[currentStateIndex] + ":00:00Z"
},
{
opacity: 0.73,
visibility: true
}));
Ext.getCmp('analyses_validity_display_extjs').setValue(extjs_gui_state_panel_valid_analyses);
Ext.getCmp('extjs_gui_legend_tab_panels').setActiveTab(0);
} else {
Ext.getCmp('analyses_validity_display_extjs').setValue(extjs_gui_state_panel_invalid_analyses);
Ext.Msg.alert(extjs_gui_analyses_missing_warning_title, extjs_gui_analyses_missing_warning);
Ext.getCmp('analyses_checkbox_extjs').setValue(false);
}
}
});
//This part is a little lower in my code, it's an "else" after the ajax request on top.
}else if(map.getLayersByName(openlayers_wms_layer_analyses).length!=0){
adjustStatePanelAnalysesValidity();
map.removeLayer(map.getLayersByName(openlayers_wms_layer_analyses)[0]);
}
adjustStatePanelProducts(checkbox, checked);
}
这是我的滑块代码:
new GeoExt.LayerOpacitySlider({
width: 100,
value: 100,
layer: map.getLayersByName(openlayers_wms_layer_analyses)[0],
aggressive: true,
style: {
position: 'absolute',
left: '150px'
}
}),
我正在使用与矢量图层滑块完全相同的代码,它工作正常。如果我将图层的名称更改为我的基础层,它也可以正常工作。我不能认为这是因为我没有选择正确的图层,因为我使用图层创建中使用的名称。如果您检查图层的删除方式,您会看到它使用与我相同的行,如下所示:map.removeLayer(map.getLayersByName(openlayers_wms_layer_analyses)[0]);
你有意想帮我吗?
更新:我在javascript控制台中写了map.getLayersByName(openlayers_wms_layer_analyses)[0]
。如果我没有选中框以查看图层,我会得到“未定义”,但是如果检查并且我可以看到图层,我会正确地看到图层。这意味着我的滑块应该工作..没有?
答案 0 :(得分:0)
最后,当创建图层时,GeoExt.LayerOpacitySlider似乎根本不起作用"在飞行中#34;。我认为它需要在创建滑块之前创建图层(这对我没有任何意义)。我想这是GeoExt中的一个错误。
我的解决方案是建立一个标准" Ext.Slider改变不透明度。如果您遇到同样的问题,这是完美的,这是我使用的代码:
new Ext.Slider({
width: 125,
value: 73,
listeners: {
change: function(analysesSlider, val) {
map.getLayersByName(openlayers_wms_layer_analyses)[0].setOpacity(val/100);
}},
style: 'position:absolute; left:135px;'
}),