Правильно видаліть LoadMask після завершення завантаження GeoExt MapPanel

Я хотів би мати маску на всій сторінці, яка не видаляється, поки не буде повністю завантажена вся сторінка. Більш конкретно, у мене є карта, створена з OpenLayers і GeoExt, і я намагаюся використовувати ExtJS loadMask. Проте, я не зміг знайти якийсь інший спосіб це зробити, крім використання інструкції setTimeout, які я не хочу використовувати. Я мав набагато маску видалити, лише якщо сторінка повністю завантажена. Я намагався використати подія 'loadend' на карті openLayers, а також windows.onload та інше:

Моя карта та loadMask config:

var mask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."});
    mask.show();

    Ext.onReady(function() {
        var options = {
                controls: [new OpenLayers.Control.Navigation()], 
                maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
                units: 'm',
                allOverlays: false 
        }

        var map = new OpenLayers.Map(options);

        map.events.register("loadend", map , function() {
            mask.hide(); alert('howdy');
        });

var mapPanel = new GeoExt.MapPanel({
            title: "Map",
            map: map,
            id: 'mapPanel',
            layerStore: map.layers,
            //Set the map to be centered at specified      longitude/latitude, transform our layers (SRID=4326) to display properly on Google
            //base layers (SRID=900913)  
            center: new OpenLayers.LonLat(95.20, 30.34).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")),
            zoom: 7, 
            region: "center",
            tbar: [measureLength, '-', measureArea, '-'],
            bbar: [
            {
                xtype: "label",
                text: "Scale = 1 : "                        
            }

            ],
            items: [{
                xtype: "gx_zoomslider",
                vertical: true,
                height: 300,
                aggressive: true,
                x: 10,
                y: 20,
                plugins: new GeoExt.ZoomSliderTip()
            }]
        });

Схоже, ця подія ніколи не відбудеться, тому що я ніколи не отримую сповіщення. Я дійсно хочу отримати цю роботу, інші спроби були:

window.onload = mask.hide();

після Ext.onReady і в кінці тегу, але потім маска буде прихованою, перш ніж карта буде завантажена. Хтось може поділитися деяким розумінням, я дійсно ціную це!

elshae

2
До цих пір я пішов з рішенням LoadPanel. trac.osgeo.org/openlayers/wiki/Addins/LoadingPanel Це показує Маска завантаження кожен раз, коли я збільшую і зменшую шари карти, що насправді досить приємно. Я досі цікаво знати інші підходи до цієї проблеми якимось чином.
додано Автор elshae, джерело

1 Відповіді

Додайте подію 'onMapReady' одразу після таких елементів:

onMapReady: function() {
    Ext.getBody().unmask();
}
0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram