用 Slideout.js 開發(fā)移動 Web 應(yīng)用導(dǎo)航欄菜單

Slideout.js 是一個(gè) Web 上的可觸控的導(dǎo)航欄菜單狮斗。

查看 Demo(在你的移動設(shè)備上或在你的瀏覽器上模擬觸摸)

安裝

可以直接引入 cdnjs 上的 .js 文件:

<script src="https://cdnjs.cloudflare.com/ajax/libs/slideout/0.1.9/slideout.min.js"></script>

也可以使用包管理器安裝:

$ npm install slideout

$ spm install slideout

$ bower install slideout.js

$ component install mango/slideout

如何使用

首先,你的菜單中需要有一個(gè)菜單(#menu)和主界面(#panel

<nav id="menu">
  <header>
    <h2>Menu</h2>
  </header>
</nav>

<main id="panel">
  <header>
    <h2>Panel</h2>
  </header>
</main>

然后在你的 .css 文件中為 Slideout 添加樣式

body {
  width: 100%;
  height: 100%;
}

.slideout-menu {
  position: fixed;
  left: 0;
  top: 0;
  bottom: 0;
  right: 0;
  z-index: 0;
  width: 256px;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  display: none;
}

.slideout-panel {
  position:relative;
  z-index: 1;
}

.slideout-open,
.slideout-open body,
.slideout-open .slideout-panel {
  overflow: hidden;
}

.slideout-open .slideout-menu {
  display: block;
}

然后引入 Slideout.js 并創(chuàng)建一個(gè)實(shí)例

<script src="dist/slideout.min.js"></script>
<script>
  var slideout = new Slideout({
    'panel': document.getElementById('panel'),
    'menu': document.getElementById('menu'),
    'padding': 256,
    'tolerance': 70
  });
</script>

完整示例

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Slideout Demo</title>
    <meta http-equiv="cleartype" content="on">
    <meta name="MobileOptimized" content="320">
    <meta name="HandheldFriendly" content="True">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <style>
      body {
        width: 100%;
        height: 100%;
      }

      .slideout-menu {
        position: fixed;
        left: 0;
        top: 0;
        bottom: 0;
        right: 0;
        z-index: 0;
        width: 256px;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        display: none;
      }

      .slideout-panel {
        position:relative;
        z-index: 1;
      }

      .slideout-open,
      .slideout-open body,
      .slideout-open .slideout-panel {
        overflow: hidden;
      }

      .slideout-open .slideout-menu {
        display: block;
      }
    </style>
  </head>
  <body>

    <nav id="menu">
      <h2>Menu</h2>
    </nav>

    <main id="panel">
      <header>
        <button class="toggle-button">?</button>
        <h2>Panel</h2>
      </header>
    </main>

    <script src="dist/slideout.min.js"></script>
    <script>
      var slideout = new Slideout({
        'panel': document.getElementById('panel'),
        'menu': document.getElementById('menu'),
        'padding': 256,
        'tolerance': 70
      });

      // Toggle button
      document.querySelector('.toggle-button').addEventListener('click', function() {
        slideout.toggle();
      });
    </script>

  </body>
</html>

瀏覽器支持

  • Chrome(iOS班利、Android侨把、PC)
  • Firefox(Android犀变、PC)
  • Safari(iOS、Android秋柄、PC)
  • Opera(PC)
  • IE 10+(PC)

API

Slideout(options)

創(chuàng)建一個(gè)新的 Slideout 實(shí)例所要用到的選項(xiàng)

  • options (對象) - 一個(gè)使用自定義選項(xiàng)的 Slideout 實(shí)例获枝。
  • options.panel (HTML 元素) - 程序中包含 .slideout-panel 的 DOM 元素。
  • options.menu (HTML 元素) - 程序中包含 .slideout-menu 的 DOM 元素华匾。
  • [options.duration] (數(shù)字) - 打開/關(guān)閉 slideout 的時(shí)間(毫秒)。默認(rèn):300
  • [options.fx] (字符串) - 開啟和關(guān)閉 slideout 時(shí)的 CSS 動畫效果机隙。默認(rèn):ease
  • [options.padding] (數(shù)字) - 默認(rèn):256
  • [options.tolerance] (數(shù)字) - 默認(rèn):70
  • [options.touch] (布爾值) - 設(shè)置此項(xiàng)為 false 可以禁用 Slideout 的觸摸事件蜘拉。默認(rèn):true
  • [options.side] (字符串) - 設(shè)置 slideout 從左側(cè)或右側(cè)打開 (leftright)。默認(rèn):left
var slideout = new Slideout({
  'panel': document.getElementById('main'),
  'menu': document.getElementById('menu'),
  'padding': 256,
  'tolerance': 70
});

Slideout.open();

打開 slideout 菜單有鹿。觸發(fā) beforeopenopen 事件旭旭。

slideout.open();

Slideout.close();

關(guān)閉 slideout 菜單。觸發(fā) beforecloseclose 事件葱跋。

slideout.close();

Slideout.toggle();

打開/關(guān)閉 slideout 菜單持寄。

slideout.toggle();

Slideout.isOpen();

當(dāng) slideout 處于打開狀態(tài)時(shí)返回 true,當(dāng)處于關(guān)閉狀態(tài)時(shí)返回 false娱俺。

slideout.isOpen(); // true or false

Slideout.destroy();

清理其他的 slideout 實(shí)例使其可以在同一區(qū)域再次創(chuàng)建稍味。

slideout.destroy();

Slideout.enableTouch();

開啟通過觸摸事件打開 slideout。

slideout.enableTouch();

Slideout.disableTouch();

禁止通過觸摸事件打開 slideout荠卷。

slideout.disableTouch();

Slideout.on(event, listener);

slideout.on('open', function() { ... });

Slideout.once(event, listener);

slideout.once('open', function() { ... });

Slideout.off(event, listener);

slideout.off('open', listener);

Slideout.emit(event, ...data);

slideout.emit('open');

事件

一個(gè) Slideout 實(shí)例可以觸發(fā)以下事件:

  • beforeclose
  • close
  • beforeopen
  • open
  • translate

只有當(dāng)通過觸摸事件將它打開/關(guān)閉時(shí)模庐,slideout 會觸發(fā) translate 事件。

slideout.on('translate', function(translated) {
  console.log(translated); // 120 in px
});

FAQ

如何添加一個(gè)切換按鈕

// vanilla js
document.querySelector('.toggle-button').addEventListener('click', function() {
  slideout.toggle();
});

// jQuery
$('.toggle-button').on('click', function() {
    slideout.toggle();
});

如何從右側(cè)打開 slideout

你應(yīng)該為 .slideout-menu 類設(shè)置 left: auto油宜。

.slideout-menu {
  left: auto;
}

然后掂碱,設(shè)置 side 選項(xiàng)的值為 right怜姿。

var slideout = new Slideout({
  'panel': document.getElementById('content'),
  'menu': document.getElementById('menu'),
  'side': 'right'
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疼燥,隨后出現(xiàn)的幾起案子沧卢,更是在濱河造成了極大的恐慌,老刑警劉巖醉者,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但狭,死亡現(xiàn)場離奇詭異,居然都是意外死亡湃交,警方通過查閱死者的電腦和手機(jī)熟空,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搞莺,“玉大人息罗,你說我怎么就攤上這事〔挪祝” “怎么了迈喉?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長温圆。 經(jīng)常有香客問我挨摸,道長,這世上最難降的妖魔是什么岁歉? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任得运,我火速辦了婚禮,結(jié)果婚禮上锅移,老公的妹妹穿的比我還像新娘熔掺。我一直安慰自己,他們只是感情好非剃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布置逻。 她就那樣靜靜地躺著,像睡著了一般备绽。 火紅的嫁衣襯著肌膚如雪券坞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天肺素,我揣著相機(jī)與錄音恨锚,去河邊找鬼。 笑死倍靡,一個(gè)胖子當(dāng)著我的面吹牛眠冈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜗顽,長吁一口氣:“原來是場噩夢啊……” “哼布卡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雇盖,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忿等,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后崔挖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸街,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年狸相,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薛匪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脓鹃,死狀恐怖逸尖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘸右,我是刑警寧澤娇跟,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站太颤,受9級特大地震影響苞俘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜龄章,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一吃谣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧做裙,春花似錦岗憋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陷揪。三九已至惋鸥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悍缠,已是汗流浹背卦绣。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞蚓,地道東北人滤港。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溅漾。 傳聞我的和親對象是個(gè)殘疾皇子山叮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,424評論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理添履,服務(wù)發(fā)現(xiàn)屁倔,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 原文:https://github.com/electron/electron/blob/master/docs/...
    Shmily落墨閱讀 19,020評論 1 5
  • 回首頁 第一部分 Drupal簡介 Drupal overview A tour of Drupal fundam...
    王乂閱讀 2,034評論 0 9
  • 2017年9月25號10點(diǎn)01分暮胧,離下課還有4分鐘锐借,突然,心血來潮想寫點(diǎn)東西往衷。 告訴自己钞翔,無聊的日子快過去了。在等...
    文刂山夆閱讀 171評論 0 0