2016-12-02 9 views
2

Ich erstelle ein swipeable Menü und es funktioniert bis auf einen Aspekt. Ich möchte, dass das Menü jederzeit eine Höhe von 100% hat. Egal wie weit der Benutzer auf der Seite gescrollt hat. Wenn ich es jedoch auf height: 100%; einstelle, wird das Menü nicht überstreichen. Es scheint nur zu funktionieren, wenn die Höhe auf height: 100vh eingestellt ist, aber wie Sie in meiner Geige sehen werden, schob dies die #main Div den Bildschirm nach unten. Ich möchte, dass das Hauptdiv ganz oben ist und sich das Menü darüber öffnet.Geschwister div zeigt nicht mit 100% Höhe

Bitte beachten Sie, dass Sie nach links, um Swipe haben das Menü zu öffnen:

You can see the example here

ich es bin zu wollen, wie diese zu öffnen:

enter image description here

html, body { 
 
    padding: 0; margin: 0; 
 
} 
 
div.box-parent { 
 
    height: 100vh; 
 
    /*height: 100%;*/ 
 
} 
 
div.box { 
 
    width: 50%; 
 
    height: 100%; 
 
    background: #108040; 
 
    margin-left: -101%; 
 
} 
 
div.box.swipeleft { 
 
    background: #7ACEF4; 
 
    margin-left: 50%; 
 
} 
 
#main { 
 
    height: 800px; 
 
    width: 100%; 
 
    background: green; 
 
}
<div class="box-parent"> 
 
    <div class="box"></div> 
 
</div> 
 
<div id="main"></div>

Antwort

1

Warum auf der body die Swipe nicht erkennen und die .box eine fixed Position geben.

$(function(){ 
 
    $("body").on("swipeleft", swipeleftHandler); 
 
    
 
    function swipeleftHandler(event){ 
 
    $('#box').addClass("swipeleft"); 
 
    } 
 
    
 
}); 
 

 
$.mobile.loading().hide();
html, body { padding: 0; margin: 0; min-height:100%;} 
 
#box { 
 
    width: 50%; 
 
    height: 100%; 
 
    background: #108040; 
 
    position:fixed; 
 
    z-index:10; 
 
    top:0; bottom:0; 
 
    left:100%; 
 
    } 
 
    #box.swipeleft { 
 
    background: #7ACEF4; 
 
    left: 50%; 
 
    } 
 
    #main { 
 
    height: 800px; 
 
    width: 100%; 
 
    background: green; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> 
 
<div id="box"></div> 
 
<div id="main"></div>

Oder als jsFiddle

+0

@Paul funktioniert, aber '.nav-Panel' ist _behind_ der andere Inhalt. Es braucht nur einen 'Z-Index' größer als der Hauptinhalt. Hinzufügen '.Nav-Panel {Z-Index: 10;} 'und es wird funktionieren. – Moob

+0

Vielen Dank für die Überprüfung! Ich schätze es wirklich ! – Paul

+0

Wissen Sie warum, wenn ich mehr Javascript hinzugefügt habe, um dies mit einem Swipe zu schließen, warum das nur einmal funktioniert? Was ich meine ist, dass ich Swipe-Left und Swiperight einmal, aber dann, nachdem es nicht weiter wischen kann. – Paul

0

Ich habe nicht versucht, aber ein etwas anderer Ansatz, die funktionieren könnte:

.box-parent 
{ 
position:relative; 
} 

.box 
{ 
position:absolute; 
top:0; 
bottom:0; 
left:0 
right: /*fixed width here; try 50% */ 
} 
1

Ihren Code ein wenig Gereinigt bis zu einig unnötigen Elementen und Stile zu entfernen. Dies wird besser mit position: absolute; erreicht, so dass das Menü Ihren Inhalt überlappt und nicht Teil des Dokumentflusses ist.

JSFiddle Aktualisiert: https://jsfiddle.net/ua7q6uks/

+0

Die Sache ist, muss der nav (box-parent) mit Haupt ein Geschwisterelement sein. – Paul

+0

@Paul Gibt es einen besonderen Grund dafür? Wenn das der Fall ist, ".box-parent" überlappt immer "# main" und fängt alle Klicks ab, sodass Sie nicht mit Inhalten in '# main' interagieren können. Normalerweise befinden sich Slideout-Menüs im selben übergeordneten Container wie der Inhalt. –

+0

'# main' ist nur ein Teil des Inhalts. Mein Menü ist ein festes Element auf meiner Seite in einem Destop-Ansichtsfenster. Ich habe dann verschiedene Abschnitte ganz unten auf der Seite. Das Menü kann nicht nur in der einen Sektion sein. Dies ist mehr von dem, was die Seite eigentlich ist wie https://jsfiddle.net/43kjns4d/6/. – Paul

0

Hier ist ein voll funktionsfähiges ein, wo JS swipeleft und swiperight Show und die div verbergen, respectively. Diese werden auf HTML ausgeführt und .box hat eine feste Positionierung. Auch ein bisschen aufgeräumt und eine Überblendung für Looks hinzugefügt.

https://jsfiddle.net/ZheerH/43kjns4d/13/

$(function(){ 
 

 
$('html').on("swipeleft", function() { 
 
$('.box').addClass("swipeleft"); 
 
}); 
 

 
$('html').on("swiperight", function() { 
 
$('.box').removeClass("swipeleft"); 
 
}); 
 

 
}); 
 

 
$.mobile.loading().hide();
html, body { padding: 0; margin: 0; } 
 
div.box { 
 
    width: 50vw; 
 
    height: 100vh; 
 
    background: lightblue; 
 
    position:fixed; 
 
    left:100vw; 
 
    top:0; 
 
    z-index:999; 
 
    transition:left 0.6s ease; 
 
} 
 
div.box.swipeleft { 
 
    left:50vw; 
 
} 
 
#main { 
 
    height: 800px; 
 
    width: 100vw; 
 
    background: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> 
 
<div class="box"></div> 
 

 
<div id="main"></div>