xmlplus は、フロントエンドおよびバックエンド プロジェクトを迅速に開発するための JavaScriptフレームワーク です。この記事では、主に xmlplus コンポーネント設計シリーズのタブを紹介します。興味のある方は参考にしてください。この章では、携帯端末で使用されるタブ コンポーネントを設計します。ここに回路図を示します。図:
タブの構成
具体的な実装の前に、対象コンポーネントがどのように使われるかを想像してみると、設計に大いに役立ちます。調べてみると、次の XML 構造に示すように、タブ コンポーネントはコンテナ部分と子部分に分割できます。
<Tabbar id="tabbar"> <TabItem id="home" label="首页"/> <TabItem id="setting" label="设置"/> <TabItem id="logs" label="日志"/> <TabItem id="about" label="关于"/> </Tabbar>
次に、タブコンポーネントのサブ項目部分に注目を切り替え、サブ項目部分がどのように分解されるかを見てみましょう。この図から、子セクションは子コンテナと、アイコンとテキストを含む子セクションに分割できることがわかります。
<a id="tabitem"> <Icon id="icon"/> <span id="label">首页</span> </a>
ということで、目標は非常に明確になり、主にアイコン コンポーネント Icon、タブ コンポーネントのサブ項目 TabItem、タブ コンポーネントのコンテナ Tabbar の 3 つのコンポーネントを設計します。
構造図
このコンポーネントは比較的単純なので、3 つのサブコンポーネントを同じレベルに配置できます。ただし、アイコン コンポーネントも 4 つあり、それらを保持する子を作成できることに注意してください。コンポーネント構造図は以下のとおりです:
tabbar/ ─
tabbar
til - tabitem
└ - icon/
っていいます ─ ome
っていつ ─ — Logs ───Setting
アイコンの実装
About: { xml: `<svg width="48" height="48" viewBox="0 0 1024 1024"> <path d="M507.577907 23.272727C240.142852..."/> </svg>` }, Home: { xml: `<svg width="48" height="48" viewBox="0 0 1024 1024"> <path d="M949.082218 519.343245 508.704442..."/> </svg>` }, Logs: { xml: `<svg width="48" height="48" viewBox="0 0 1024 1024"> <path d="M576 125.344l32 0 0 64-32 0 0-64Z..."/> </svg>` }, Setting: { xml: `<svg width="48" height="48" viewBox="0 0 1024 1024"> <path d="M512 336.664c-96.68 0-175.336 78...."/> </svg>` }
xmlplus("ui", function (xp, $_, t) { $_().imports({Tabbar: {... }, TabItem: {...}}); $_("icon").imports({--这里包含了四个图标组件--}); });
Icon: { css: "#icon { width: 1.5em; height: 1.5em; display: inline-block; }", opt: { icon: "about" }, xml: `<span id="icon"/>`, fun: function (sys, items, opts) { sys.icon.replace("icon/" + opts.icon).addClass("#icon"); } }
サブ項目の実装
内側から外側への原則に従い、次にタブコンポーネントのサブ項目TabItemを実装します。このコンポーネントの場合、コンポーネントのマッピング項目で同じ名前の 属性マッピングを実行し、 id 属性値を内部アイコン コンポーネントの icon 属性にマッピングする必要があります。
TabItem: { css: "这里是样式项部分,为便于组件整体展示,略去...", map: {"attrs": { icon: "id->icon" } }, xml: `<a id="tabitem"> <Icon id="icon"/> <span id="label">首页</span> </a>`, fun: function (sys, items, opts) { sys.label.text(opts.label); function select() { sys.tabitem.addClass("#primary"); } function unselect() { sys.tabitem.removeClass("#primary"); } return { select: select, unselect: unselect }; } }
このコンポーネントは、オプションを切り替えるときに選択された状態と選択されていない状態を切り替えるためのインターフェイス
を提供します。タブコンテナで使用します。
タブの実装
最後に、タブコンポーネントTabbarの実装を見てみましょう。このコンポーネントは、ユーザーがタブに触れたときに イベント
をリッスンします。リスナー内で主に 2 つのことを行います。1 つはタブの状態の切り替えを維持すること、もう 1 つはタブが切り替えられたときに状態変更イベントを送出することです。Tabbar: { css: "这里是样式项部分,为便于组件整体展示,略去...", xml: `<nav id="tabbar"/>`, fun: function (sys, items, opts) { var sel = this.first(); this.on("touchend", "./*[@id]", function (e) { sel.value().unselect(); (sel = this).value().select(); this.trigger("switch", this.toString()); }); if (sel) sel.value().select(); } }
xmlplus("example", function (xp, $_, t) { $_().imports({ Index: { xml: `<Footer id='footer'/>`, fun: function (sys, items, opts) { this.on("switch", (e, target) => console.log(target)); } }, Footer: { xml: `<Tabbar id="footer"> <TabItem id="home" label="首页"/> <TabItem id="setting" label="设置"/> <TabItem id="logs" label="日志"/> <TabItem id="about" label="关于"/> </Tabbar>` } }); });
1. 無料のjsオンラインビデオチュートリアル
2. JavaScript中国語リファレンスマニュアル
3. php.cn Dugu Jiijian (3) - JavaScriptビデオチュートリアル
🎜以上がJavaScript フレームワーク (xmlplus) コンポーネントの紹介 (5) タブバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。