Zentrieren einer div mit einem "Loading..." spinner.gif mit jQuery und Ajax.BeginForm

Das Setup

Ich soll sehr einfach zu bedienen MVC-Assistenten. Die Kirsche auf dem Kuchen ist ein spinner gif angezeigt wird, wenn ich das ändern Schritt im Assistenten. Ich möchte es zentrieren auf der Seite, unabhängig von der Größe des browser-Fensters.

Können Sie dazu ein Beispiel an:

Beispiel-Assistent

BITTE NICHT DEN ASSISTENTEN ABGESCHLOSSEN HABEN, ES SEI DENN, SIE HABEN EINE ENZEPHALITIS...

Das Problem

Problem ist, ich habe einen zentrierten CSS-layout, gesteuert mit der folgenden Regel:

#PageContainer
{
    position:relative;
    width:800px;
    left:50%;   
    margin:0px 0px 0px -400px;
    text-align:left;
}

Und diese Regel scheint zu interagieren stark mit dem jquery-code, der zentriert das div mit dem spinner gif. Dh, es spielt keine center.

Den Code

Mein MVC-form-code:

    @using (Ajax.BeginForm(Model.Step.ActionName, 
             null, 
             new AjaxOptions { UpdateTargetId = "wizardStep", OnBegin="isValid", LoadingElementId="PleaseWait" }, 
             new {@name="wizardForm", @id="wizardForm" } ))
        { 
        @* do ajax stuff, see my "Loading... panel below *@

        <div id="PleaseWait" style="display:none;">
            Please Wait...
        </div>
        } 

jQuery-code ist:

<script type="text/javascript">
        jQuery.fn.center = function () {
            this.css("position", "absolute");
            this.css("top", ($(window).height() - this.height())/ 2 + $(window).scrollTop() + "px");
            this.css("left", ($(window).width() - this.width()) / 2 + $(window).scrollLeft() + "px");
            return this;
        }
        });
        function isValid() {
            $('#PleaseWait').center();
            if (true) //In case i whant to return true
            {
                return true;
            }
            else //I whant to return false
            {
                $('#PleaseWait').hide(); //Manually hide the LoadingElementId
                return false;
            }
        }   
</script>

Meine Analyse

Als jQuery-code legt fest, bis das div-panel, um eine absolute position, es hat daher eine absolute position in Bezug auf das erste übergeordnete Element, das nicht über die position statisch (Standard).

Daher als Ergebnis die Marge hack verwendet, um die Mitte der Seite, es ist etwas, das schleichend in die jQuery-Berechnung, stört den apple-Warenkorb.

Ie:

Die jQuery-Berechnung basiert auf der Größe der Fenster, aber die position der #Bittewarten-panel positioniert ist, mit Bezug auf die #PageContainer div (div ist Bestandteil des Layouts). Offensichtlich sind diese zwei ganz verschiedene Dinge. Daher dachte ich, ich würde damit durchkommen, herauszufinden, die Konstante Werte zu subtrahieren Sie Links und oben sind die Berechnungen für die #Bittewarten div.

Aber die Ergebnisse sind unvorhersehbar, und ich bin jetzt zu verwirrt, um es herauszufinden. Hilfe!!!

Jede Hilfe sehr geschätzt.

JOB GEMACHT!:

Problem sortiert. Siehe Jim angenommen wird, ist die Antwort für die Ideen, die meine follow-up zu beantworten, die für die volle Umsetzung.

InformationsquelleAutor awrigley | 2010-12-16

Schreibe einen Kommentar