让我们看看如何添加侧栏。我们的APP可能包含两种侧栏,一个在左边,另一个在右边。我们应该在body的开始处添加侧栏的htmlbody
:
- <body>
- <!-- First, we need to add Panel's overlay that will overlays app while panel is opened -->
- <div class="panel-overlay"></div>
- <!-- Left panel -->
- <div class="panel panel-left">
- ... panel content goes here ...
- </div>
- <!-- Right panel -->
- <div class="panel panel-right">
- ... panel content goes here ...
- </div>
- ...
- </body>
在我们添加侧栏后,我们需要为每个侧栏选择打开效果。可能有两种效果:"Reveal"(侧栏从整个App的内容中移出)和"Cover"(侧栏覆盖App的内容)。如果您想要使用"Reveal"效果应该向侧栏添加 "panel-reveal" 类, 如果要使用"Cover"效果则添加 "panel-cover" 类:
- <body>
- <!-- First, we need to add Panel's overlay that will overlays app while panel is opened -->
- <div class="panel-overlay"></div>
- <!-- Left panel, let it be with reveal effect -->
- <div class="panel panel-left panel-reveal">
- ... panel content goes here ...
- </div>
- <!-- Right panel, with cover effect -->
- <div class="panel panel-right panel-cover">
- ... panel content goes here ...
- </div>
- ...
- </body>
Ok, 现在当我们的App里有侧栏,我们需要知道如何打开/关闭它们:
为了打开侧栏,我们需要添加"open-panel" 类到任意HTML元素上(最好加到链接节点上)
为了关闭侧栏,我们需要添加"close-panel" 类到任意HTML元素上(最好加到链接节点上)
如果你的App里有两个侧栏,链接默认将打开/关闭左侧栏
如果你想要指定哪个侧栏被开启/关闭,那么它可以通过HTML元素上额外的属性data-panel="left"完成。
根据以上注意点:
- <body>
- <!-- Panels Overlay -->
- <div class="panel-overlay"></div>
- <!-- Left Panel with Reveal effect -->
- <div class="panel panel-left panel-reveal">
- <div class="content-block">
- <p>Left Panel content here</p>
- <!-- Click on link with "close-panel" class will close panel -->
- <p><a href="#" class="close-panel">Close me</a></p>
- <!-- Click on link with "open-panel" and data-panel="right" attribute will open Right panel -->
- <p><a href="#" data-panel="right" class="open-panel">Open Right Panel</a></p>
- </div>
- </div>
- <!-- Right Panel with Cover effect -->
- <div class="panel panel-right panel-cover">
- <div class="content-block">
- <p>Right Panel content here</p>
- <!-- Click on link with "close-panel" class will close panel -->
- <p><a href="#" class="close-panel">Close me</a></p>
- <!-- Click on link with "open-panel" and data-panel="left" attribute will open Left panel -->
- <p><a href="#" data-panel="left" class="open-panel">Open Left Panel</a></p>
- </div>
- </div>
- ...
- <div class="page-content">
- <div class="content-block">
- <!-- If no data-panel attribute, Left panel will be opened by default -->
- <p><a href="#" class="open-panel">Open Left Panel</a></p>
- <!-- Click on link with "open-panel" and data-panel="right" attribute will open Right panel -->
- <p><a href="#" data-panel="right" class="open-panel">Open Right Panel</a></p>
- </div>
- </div>
- ...
- </body>
我们也可以通过使用JavaScript打开和关闭侧栏,为此我们需要查看相关的App方法:
myApp.openPanel(position) - 打开侧栏.
myApp.closePanel() - 关闭最近打开的侧栏.
- <body>
- <div class="panel-overlay"></div>
- <div class="panel panel-left panel-reveal">
- <div class="content-block">
- <p>Left Panel content here</p>
- <p><a href="#" class="panel-close">Close me</a></p>
- <p><a href="#" class="open-right-panel">Open Right Panel</a></p>
- </div>
- </div>
- <div class="panel panel-right panel-cover">
- <div class="content-block">
- <p>Right Panel content here</p>
- <p><a href="#" class="panel-close">Close me</a></p>
- <p><a href="#" class="open-left-panel">Open Left Panel</a></p>
- </div>
- </div>
- ...
- <div class="page-content">
- <div class="content-block">
- <p><a href="#" class="open-left-panel">Open Left Panel</a></p>
- <p><a href="#" class="open-right-panel">Open Right Panel</a></p>
- </div>
- </div>
- ...
- <script>
- var myApp = new Framework7();
- var $$ = Dom7;
- $$('.open-left-panel').on('click', function (e) {
- // 'left' position to open Left panel
- myApp.openPanel('left');
- });
- $$('.open-right-panel').on('click', function (e) {
- // 'right' position to open Right panel
- myApp.openPanel('right');
- });
- $$('.panel-close').on('click', function (e) {
- myApp.closePanel();
- });
- </script>
- </body>
Panel事件对检测用户如何与你的侧栏交互,或者在侧栏打开/关闭时做一些JavaScript操作非常有用。
Event(事件) | Target(目标) | Description(描述) |
---|---|---|
open | Panel Element<div class="panel"> | 当侧栏的打开动画开始时,事件将被触发 |
opened | Panel Element<div class="panel"> | 当侧栏的打开动画结束时,事件将被触发 |
close | Panel Element<div class="panel"> | 当侧栏的关闭动画开始时,事件将被触发 |
closed | Panel Element<div class="panel"> | 当侧栏的关闭动画完成时,事件将被触发 |
这里有一个例子:
- var myApp = new Framework7();
- var $$ = Dom7;
- $$('.panel-left').on('opened', function () {
- myApp.alert('Left panel opened!');
- });
- $$('.panel-left').on('close', function () {
- myApp.alert('Left panel is closing!');
- });
- $$('.panel-right').on('open', function () {
- myApp.alert('Right panel is opening!');
- });
- $$('.panel-right').on('closed', function () {
- myApp.alert('Right panel closed!');
- });
Framework7支持通过滑动手势打开侧栏。但有一个限制 —— 只有一个菜单能被设置成允许滑动屏幕打开 (左或右)。
要使用这个功能,我们需要在App初始化时设置相关参数:
- var myApp = new Framework7({
- swipePanel: 'left'
- });
There are also swipePanelCloseOpposite
, swipePanelOnlyClose
, swipePanelActiveArea
, swipePanelNoFollow
, swipePanelThreshold
parameters that gives you more control over swipe panels. You can learn more about them in Initialize App section.
有时候检测我们的一些侧栏是否是打开的是很有用的。这很容易,当一些菜单被打开时<body>
将由以下规则生成被添加的类:with-panel-[position]-[effect]:
如果你有带Cover效果的左侧栏打开着,body会有“with-panel-left-cover”类 <body class="with-panel-left-cover">
如果你有带Reveal效果的左侧栏打开着, body 会有“with-panel-left-reveal”类 <body class="with-panel-left-reveal">
如果你有带Cover效果的右侧栏打开着,body会有"with-panel-right-cover" 类 <body class="with-panel-right-cover">
如果你有带Reveal效果的右侧栏打开着, body 会有"with-panel-right-reveal" 类 <body class="with-panel-right-reveal">
You can use it in JavaScript to detect opened panel:
- if ($$('body').hasClass('with-panel-left-cover')) {
- console.log('Left Panel is opened')
- }
或者在 CSS 定义额外的样式:
- /* Change Status Bar background when panel is opened */
- body.with-panel-left-cover .statusbar-overlay{
- background-color: #333;
- }