Basierend auf dem Beispiel in den Famo.us Beispiele auf Github ..
https://github.com/Famous/examples/blob/master/src/examples/views/GridLayout/example.js
Sie könnten sehr leicht etwas tun ..
var Engine = require("famous/core/Engine");
var Surface = require("famous/core/Surface");
var GridLayout = require("famous/views/GridLayout");
var mainContext = Engine.createContext();
var contextSize = mainContext.getSize()
var dimensions;
if (contextSize[0] < 480 || contextSize[1] < 480) {
dimensions = [2,8];
} else {
dimensions = [8,2];
};
var grid = new GridLayout({
dimensions: dimensions
});
var surfaces = [];
grid.sequenceFrom(surfaces);
for(var i = 0; i < 16; i++) {
surfaces.push(new Surface({
content: "I am panel " + (i + 1),
size: [undefined, contextSize[1]/2.0],
properties: {
backgroundColor: "hsl(" + (i * 360/16) + ", 100%, 50%)",
color: "black",
lineHeight: window.innerHeight/2 + 'px',
textAlign: 'center'
}
}));
}
mainContext.add(grid);
EDITIEREN:
Das Endziel ist Javascript als einzige Entwicklungssprache für moderne Webanwendungen. Manchmal müssen Sie die Dinge nur selbst verwalten.
Dies gilt insbesondere für einen Rahmen wie Famo.us, die auf absolute Positionierung stark abhängig ist .. Die Dinge fließen einfach nicht so glatt wie in der Box-Modell
alle feinen Unterschiede behandeln ich bauen eine StateHash Klasse, die den Zustand und gibt unterschiedliche Werte für den gleichen Schlüssel basierend auf dem aktuellen Zustand verwaltet ..
var DESKTOP, MOBILE, StateHash, screen_state, sh;
StateHash = (function() {
function StateHash(states) {
this.set_state = __bind(this.set_state, this);
this.get_state = __bind(this.get_state, this);
this.set = __bind(this.set, this);
this.get = __bind(this.get, this);
var i, _i, _ref;
if (!states) {
states = 2;
}
this.state = 0;
this.hash = {};
for (i = _i = 0, _ref = states - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
this.hash[i] = {};
}
}
StateHash.prototype.get = function(key) {
return this.hash[this.state][key];
};
StateHash.prototype.set = function(state, key, val) {
return this.hash[state][key] = val;
};
StateHash.prototype.get_state = function() {
return this.state;
};
StateHash.prototype.set_state = function(state) {
return this.state = state;
};
return StateHash;
})();
// Usage
MOBILE = 0;
DESKTOP = 1;
screen_state = some_check_mobile_function() ? MOBILE : DESKTOP;
sh = new StateHash();
sh.set_state(screen_state);
sh.set(MOBILE, "top-margin", "10px");
sh.set(DESKTOP, "top-margin", "20px");
sh.get("top-margin");
ich werde Sie wissen lassen, wenn ich irgendeinen anderen besseren Weg zu lernen!
Viel Glück!
Das ist ein nettes Beispiel, danke für den Austausch. Es adressiert mein Beispiel, aber ich habe es nicht als die Antwort markiert, weil ich nicht sicher bin, ob die Anweisung im gesamten Code zum Umschalten der Darstellungsgröße ein wartbarer Ansatz ist. – aleith
@AndrewLeith Das ist in Ordnung, ich hätte Modernizr auf eine andere Weise verwendet, um herauszufinden, ob das Gerät nur einmal mobil war, und dann nur diese Variable zu verwalten. Famo.us soll Menschen von HTML und CSS entlasten, obwohl jeder ist immer noch unterstützt. Ich verwende zum Beispiel ein Rasterlayout, um die Ränder zwischen sequentiellen Inhalten zu halten und das Raster für Mobilgeräte und Desktops anpassen zu können, war für mich der einfachste Weg. Dadurch können Sie nicht jedes Element manuell anpassen. – johntraver
Ein Nachteil von GridLayout ist, dass alle Zellen gleich groß sind. Z.B. Ein 8-Wide 400px Raster bedeutet, dass jede Zelle 50px groß ist. Keine Möglichkeit, eine Zelle größer oder kleiner zu setzen. Die einzige Möglichkeit, dies zu tun, besteht darin, so etwas wie ein FlexibleLayout in ein GridLayout zu verschachteln. Klappt den Code IMHO auf. Es wäre praktisch, wenn das GridLayout Spalten-/Zeilengrößenparameter verwenden könnte. – pmont