我最近开始玩 Famo.us 框架,并尝试构建一个简单的 HeaderFooterLayout 用于在不同的 Scrollview 之间切换。
我遇到的问题是,当页面加载时,我们可以看到底部 TabBar 前面的 Scrollview 传递。
另一个奇怪的是,这个问题出现一次两次。
事实上,它并不是一个真正的 TabBar 小部件,而是一个 GridLayout,我在其中推送将充当按钮的 Surfaces。
我知道 Famo.us 实例化 Surface 的顺序会影响 z-index,但我已经验证了这一点。
我肯定误解了 RenderTree 的用法,但我不知道是什么。
这是我的代码:
define(function(require, exports, module) {
var Engine = require("famous/core/Engine");
var RenderNode = require('famous/core/RenderNode');
var Surface = require("famous/core/Surface");
var ViewSequence = require("famous/core/ViewSequence");
var StateModifier = require('famous/modifiers/StateModifier');
var Utility = require("famous/utilities/Utility");
var EdgeSwapper = require("famous/views/EdgeSwapper");
var GridLayout = require("famous/views/GridLayout");
var HeaderFooterLayout = require("famous/views/HeaderFooterLayout");
var Scrollview = require("famous/views/Scrollview");
var NavigationBar = require("famous/widgets/NavigationBar");
var TabBar = require("famous/widgets/TabBar");
var ToggleButton = require("famous/widgets/ToggleButton");
var mainContext = Engine.createContext();
var layout = new HeaderFooterLayout({ headerSize: 50, footerSize: 50 });
var edgeswapper = new EdgeSwapper({
options: {
size: [undefined, window.innerHeight - 100]
}
});
var homeScrollview = new Scrollview();
var bookmarksScrollview = new Scrollview();
var messagesScrollview = new Scrollview();
var profileScrollview = new Scrollview();
var homeScrollviewSurfaces = [];
homeScrollview.sequenceFrom(homeScrollviewSurfaces);
for (var i = 0, temp; i < 50; i++) {
temp = new Surface({
content: "Surface: " + (i + 1),
size: [undefined, 50],
properties: {
backgroundColor: "hsl(" + (i * 360 / 40) + ", 100%, 50%)",
lineHeight: "50px",
textAlign: "center"
}
});
temp.pipe(homeScrollview);
homeScrollviewSurfaces.push(temp);
}
var bookmarksScrollviewSurfaces = [];
bookmarksScrollview.sequenceFrom(bookmarksScrollviewSurfaces);
for (var i = 0, temp; i < 50; i++) {
temp = new Surface({
content: "Surface: " + (i + 1),
size: [undefined, 50],
properties: {
backgroundColor: "hsl(" + (i * 360 / 40) + ", 100%, 50%)",
lineHeight: "50px",
textAlign: "center"
}
});
temp.pipe(bookmarksScrollview);
bookmarksScrollviewSurfaces.push(temp);
}
var messagesScrollviewSurfaces = [];
messagesScrollview.sequenceFrom(messagesScrollviewSurfaces);
for (var i = 0, temp; i < 50; i++) {
temp = new Surface({
content: "Surface: " + (i + 1),
size: [undefined, 50],
properties: {
backgroundColor: "hsl(" + (i * 360 / 40) + ", 100%, 50%)",
lineHeight: "50px",
textAlign: "center"
}
});
temp.pipe(messagesScrollview);
messagesScrollviewSurfaces.push(temp);
}
var profileScrollviewSurfaces = [];
profileScrollview.sequenceFrom(profileScrollviewSurfaces);
for (var i = 0, temp; i < 50; i++) {
temp = new Surface({
content: "Surface: " + (i + 1),
size: [undefined, 50],
properties: {
backgroundColor: "hsl(" + (i * 360 / 40) + ", 100%, 50%)",
lineHeight: "50px",
textAlign: "center"
}
});
temp.pipe(profileScrollview);
profileScrollviewSurfaces.push(temp);
}
var navigationBar = new NavigationBar({
size: [undefined, layout.headerSize],
backClasses: ["back"],
backContent: "",
classes: ["navbar"],
content: 'NavigationBar',
moreClasses: ["more"],
moreContent: ""
});
var tabBar = new GridLayout({
dimensions: [4, 1],
cellSize: [undefined, 50],
transition: false
});
var homeButton = new Surface({
size: [undefined, 50],
content: '<span class="tabbar-icon">'+
'<div class="glyphicon glyphicon-leaf"></div>'+
'</span>'+
'<span class="tabbar-title">Home</span>'
});
var bookmarksButton = new Surface({
size: [undefined, 50],
content: '<span class="tabbar-icon">'+
'<div class="glyphicon glyphicon-heart"></div>'+
'</span>'+
'<span class="tabbar-title">Bookmarks</span>'
});
var messagesButton = new Surface({
size: [undefined, 50],
content: '<span class="tabbar-icon">'+
'<div class="glyphicon glyphicon-envelope"></div>'+
'</span>'+
'<span class="tabbar-title">Messages</span>'
});
var profileButton = new Surface({
size: [undefined, 50],
content: '<span class="tabbar-icon">'+
'<div class="glyphicon glyphicon-user"></div>'+
'</span>'+
'<span class="tabbar-title">Profile</span>'
});
tabBar.sequenceFrom([
homeButton,
bookmarksButton,
messagesButton,
profileButton
]);
layout.content.add(edgeswapper);
layout.header.add(navigationBar);
layout.footer.add(tabBar);
edgeswapper.show(homeScrollview);
homeButton.on("click", function() { edgeswapper.show(homeScrollview); });
bookmarksButton.on("click", function() { edgeswapper.show(bookmarksScrollview); });
messagesButton.on("click", function() { edgeswapper.show(messagesScrollview); });
profileButton.on("click", function() { edgeswapper.show(profileScrollview); });
mainContext.add(layout);
});