2011-06-27 3 views
14

Normalement, lorsque vous créez un élément data-role = "page" avec jQuery mobile, il prend en charge toute la zone de visualisation. Pour cette raison, je ne comprends pas comment créer une barre latérale. Je voudrais imiter ce qui suit, mais la source de vue ne nous aide pas beaucoup:Création d'une barre latérale dans jQuery mobile

http://jquerymobile.com/demos/1.0b1/docs/lists/index.html

Notez que lorsque vous cliquez sur un élément dans la liste, il se transforme en une barre latérale et montre une autre liste dans la principale zone de contenu. De plus, si l'affichage est suffisamment réduit, il affiche uniquement la zone de contenu principale. Existe-t-il une fonctionnalité spéciale dans jQuery mobile qui permet cela, ou y a-t-il une grande quantité de javascript opaque et de CSS derrière?

Répondre

13

Recherche sur la beta de Split Voir syntaxe vous pouvez contrôler la "Sidebar" comme ceci:

<div data-role="page" id="jqm-home" class="type-home"> 
    <div data-role="content"> 
     <div class="content-secondary"> 
      This would be the sidebar/split view on a tablet, 
      would show up stacked on a mobile device 
     </div><!-- end content-secondary -->  

     <div class="content-primary"> 
      This is the main content. 

      If Tablet device this would be to the right of the above content, 
      if mobile this would be below the above content. 

     </div><!-- end content-primary --> 
    </div><!-- end content --> 
</div><!-- end page --> 

Docs: http://jquerymobile.com/demos/1.0b1/ (clic droit pour afficher la source)

CSS Pertinent: http://jquerymobile.com/demos/1.0b1/docs/_assets/css/jqm-docs.css

Un article de l'ALA décent sur les requêtes des médias (ce qu'ils faisaient pour cela): http://www.alistapart.com/articles/responsive-web-design/

+0

Oui, j'ai vu cela aussi, mais je ne pense pas que ce soit là que la barre latérale est faite. Je crois que c'est le code pour diviser les deux listes distinctes montrées dans le lien que vous venez de donner. C'est pourquoi je ne pense pas que "view source" soit utile dans ce contexte ... il montre seulement à quoi ressemble la racine de la démo. –

+3

C'est en fait la façon dont la barre latérale est accomplie - jetez un oeil à http://jquerymobile.com/demos/1.0b1/docs/_assets/css/jqm-docs.css - qui est le css supplémentaire pour la démo - ils sont Il suffit d'utiliser les requêtes média pour pousser # contenu-secondaire vers la gauche s'il y a suffisamment d'espace sur l'écran. –

+0

Je suis corrigé, mais je suis toujours confus. Lorsque j'essaie d'émuler le code ci-dessus, cliquer sur n'importe quel lien dans la barre latérale provoque le remplacement de l'ensemble de la vue par le nouvel élément data-role = "page" auquel je suis lié. Le comportement souhaité (que la démo a) est de changer la zone de contenu principale et la barre latérale reste. Comment fonctionne la liaison? –

0

Vous devez ajouter ce code à un fichier javascript:

function setPositions(){ 
    var winwidth = $(window).width() 

    if(winwidth >= 750){ 
     $('.content-secondary').css({'float':'left','width':'35%'}); 
     $('.content-primary').css({'margin-left':'36%'}); 
    } 
    else{ 
     $('.content-secondary').css({'float':'none','width':'100%'}); 
     $('.content-primary').css({'margin-left':'0px'}); 
    } 
} 


$(function(){ 
    setDefaultTransition(); 
    $(window).bind("throttledresize", setPositions); 
}); 
+3

Ce n'est généralement pas une bonne idée de faire avec JavaScript ce qui devrait être fait avec CSS. –

+0

vous devriez le faire avec des requêtes de médias CSS à la place, s'il vous plaît lire: http://www.w3.org/TR/css3-mediaqueries/ –

+0

Je préfère utiliser js sur les requêtes de médias ... ... css devrait ** pas * * être utilisé pour gérer la logique (c'est ce que les requêtes média font effectivement) ... c'est le travail d'un langage de script, comme js ... ... ... le travail de css est de contenir des données (essentiellement une "base de données" des valeurs liées à la mise en page qui sont "interrogées" lors de l'analyse syntaxique) – dsdsdsdsd