Как создать пустое пространство между поверхностями в ScrollView в famo.us ?

#famo.us

#famo.us

Вопрос:

Я создал горизонтальный ScrollView и добавил к нему несколько поверхностей. Я хочу иметь пустое пространство между поверхностями при прокрутке (прокрутке) представления. Я попытался установить поля, отступы, границы и т. Д. В свойствах поверхностей и ScrollView, но поверхности остаются соединенными вместе, несмотря ни на что.

Кто-нибудь знает, как я могу этого добиться?

Ответ №1:

Это можно сделать несколькими способами. The non-famo.us подход заключался бы в добавлении поверхностей и использовании HTML-кода содержимого для создания полей. Для примера я предположу, что вам нужен список поверхностей, для которых просто нужен некоторый запас!

Я знал о itemSpacing в SechntialLayout и был удивлен, не найдя такой вещи и в ScrollView. Итак, чтобы решить проблему, я просто добавил все свои поверхности в SequentialLayout, а затем добавил это как единственный элемент в Scrollview.

Также обратите внимание, что я добавил фоновую поверхность, чтобы фиксировать события мыши, которые происходят между поверхностями!

Вот что я сделал.. Надеюсь, это поможет!

 var Engine              = require("famous/core/Engine");
var Surface             = require("famous/core/Surface");
var Scrollview          = require("famous/views/Scrollview");
var SequentialLayout    = require("famous/views/SequentialLayout");

var mainContext = Engine.createContext();

var bg = new Surface({ size:[undefined,undefined] });

var scrollview = new Scrollview();
var scrollSurfaces = [];

scrollview.sequenceFrom(scrollSurfaces);

var sequentialLayout = new SequentialLayout({itemSpacing:20});
var surfaces = [];
sequentialLayout.sequenceFrom(surfaces);

for (var i = 0; i < 40; i  ) {
    var surface = new Surface({
        content: "Surface: "   (i   1),
        size: [undefined, 200],
        properties: {
            backgroundColor: "hsl("   (i * 360 / 40)   ", 100%, 50%)",
            lineHeight: "200px",
            textAlign: "center"
        }
    });

    surface.pipe(scrollview);
    surfaces.push(surface);
}

scrollSurfaces.push(sequentialLayout);

bg.pipe(scrollview);

mainContext.add(bg);

mainContext.add(scrollview);
  

Комментарии:

1. Спасибо за ваш ответ, но это работает, только если ScrollView находится в вертикальном положении. Если я это сделаю: var scrollview = new Scrollview({ direction: 0 }); приложение перестает отвечать на запросы.

2. затем выполните.. new SequentialLayout({itemSpacing:20, direction:0 })

3. Я думаю, это работает, только если вы знаете, насколько широки ваши поверхности .. например .. size: [200, undefined] работает, size: [undefined, undefined] нет..

Ответ №2:

Я думаю, что лучше использовать ContainerSurface, используйте много containsurfaces для размещения поверхности.Вы должны эмулировать в Apple iphone 5.In в другой среде вы должны настроить происхождение scrollModifier для исправления.

 define(function(require, exports, module) {
    var Engine           = require("famous/core/Engine");
    var Surface          = require("famous/core/Surface");
    var Transform        = require("famous/core/Transform");
    var View             = require('famous/core/View');
    var StateModifier    = require('famous/modifiers/StateModifier');
    var Scrollview       = require("famous/views/Scrollview");
    var Modifier         = require("famous/core/Modifier");
    var ContainerSurface = require("famous/surfaces/ContainerSurface");


    var mainContext = Engine.createContext();

    var scrollview = new Scrollview({
        direction: 0,
        paginated: 'true',
        pageStopSpeed: 2
    });

    var scrollnodes = [];
    scrollview.sequenceFrom(scrollnodes);

    for (var i = 0; i < 40; i  ) {

        var container = new ContainerSurface();

        var temp = new Surface({
            content: "Surface: "   (i   1),
            size: [window.innerWidth -40, window.innerHeight - 40],
            properties: {
                backgroundColor: "hsl("   (i * 360 / 40)   ", 100%, 50%)",
                lineHeight: "200px",
                textAlign: "center"
            }
        });

        // wrong
        // will return temp as scrollnode, it will ignore the container
        // var scrollnode = container.add(temp)

        // this is right
        container.add(temp);
        var scrollnode = container;

        temp.pipe(scrollview);
        scrollnodes.push(scrollnode);

    }

    var scrollModifier = new StateModifier({
        origin: [0.07, 0.04]
    });

    mainContext.add(scrollModifier).add(scrollview);
});
  

Ответ №3:

Вы также можете использовать FlexScrollView, который поддерживает spacing опцию для достижения этой цели:


var scrollView = new FlexScrollView({
layoutOptions: {
spacing: 10
}
});

https://github.com/IjzerenHein/famous-flex/blob/master/tutorials/FlexScrollView.md
https://github.com/IjzerenHein/famous-flex