【问题标题】:Famo.us how to make a scrollview be filled from bottom to top (or right to left)?Famo.us 如何使滚动视图从下到上(或从右到左)填充?
【发布时间】:2014-08-13 07:03:35
【问题描述】:

假设我有一个方向为 1(垂直)的滚动视图。在填充滚动视图时,项目确实会出现并从上到下对齐。

我想知道是否有办法颠倒这个顺序,即让 scrollView 从底部填充到顶部。一个很好的用法示例是消息列表。您希望最后一条消息始终显示在列表底部。默认情况下,消息会在顶部对齐,不方便。

[编辑] 我刚刚发现我们可以根据覆盖 outputFrom 函数回调的偏移量轻松设置自己的转换。例如以下将反转滚动内容:

scrollview.outputFrom(function(offset)
{
       return  Transform.translate(0, -offset)
});

【问题讨论】:

    标签: famo.us


    【解决方案1】:

    是否按照您的建议进行操作,旋转 180˚ 时效果很好。示例:http://jsfiddle.net/tamtamchik/LA49a/3/

    Famous.loaded(function () {
        var Engine = Famous.Core.Engine;
        var Surface = Famous.Core.Surface;
        var Scrollview = Famous.Views.Scrollview;
        var Timer = Famous.Utilities.Timer;
        var Transform = Famous.Core.Transform;
        var StateModifier = Famous.Modifiers.StateModifier;
        var ContainerSurface = Famous.Surfaces.ContainerSurface;
    
        var mainContext = Engine.createContext();
    
        var scrollview = new Scrollview();
        var surfaces = [];
        var i = 0;
        var surfaceHeight = 50;
    
        scrollview.sequenceFrom(surfaces);
    
        Timer.setInterval(function () {
            var container = new ContainerSurface({
                size: [undefined, surfaceHeight]
            });
    
            var temp = new Surface({
                content: "Surface: " + (i + 1),
                size: [undefined, surfaceHeight],
                properties: {
                    backgroundColor: "hsl(" + (i * 360 / 40) + ", 100%, 50%)",
                    lineHeight: "50px",
                    textAlign: "center"
                }
            });
    
            var surfaceRotate = new StateModifier({
                transform: Transform.rotateZ(Math.PI)
            });
    
            var surfacePush = new StateModifier({
                transform: Transform.translate(window.innerWidth, surfaceHeight)
            });
    
            container.add(surfacePush).add(surfaceRotate).add(temp);
            container.pipe(scrollview);
            temp.pipe(scrollview);
            surfaces.unshift(container);
            i++;
        }, 400);
    
        var rotate = new StateModifier({
            transform: Transform.rotateZ(Math.PI)
        });
    
        var push = new StateModifier({
            transform: Transform.translate(window.innerWidth, window.innerHeight)
        });
    
        mainContext.add(push).add(rotate).add(scrollview);
    });
    

    【讨论】:

    • 好的,让我们将其视为临时答案。目前似乎根本没有公共功能可以将弹簧连接到顶部或左侧之外的另一边缘。
    【解决方案2】:

    正如famo.us documentation 所说:“Scrollview 将在指定方向上按顺序排列一组可渲染对象”,因此它会按照您提供的顺序对表面进行排序。

    我的建议是将表面添加到列表中,然后将它们反向添加到 ScrollView。

    【讨论】:

    • 不,不幸的是,方向是根据 X、Y 和 Z 对齐项目的标量。解决方法是将整个滚动视图旋转 180°,然后反转项目并将内部视图旋转为嗯……显然这不是我要找的。​​span>
    【解决方案3】:

    您正在寻找的是 unshift()。可以在codefamo.us查看以下代码运行

    var Engine = require('famous/core/Engine');
    var Surface = require('famous/core/Surface');
    var StateModifier = require('famous/modifiers/StateModifier');
    var Transform = require('famous/core/Transform');
    var Easing = require('famous/transitions/Easing');
    var Scrollview = require('famous/views/Scrollview');
    
    var mainContext = Engine.createContext();
    var items = [];
    var scroll = new Scrollview();
    mainContext.add(scroll);
    var counter=0;
    scroll.sequenceFrom(items);
    
    function addOne() {
        setTimeout(function() {
            var surface = new Surface({
                size: [100, 100],
                content: 'surf: '+counter++,
                properties: {
                    textAlign: 'center',
                    lineHeight: '20px'
                }
            });
            items.unshift(surface);
    
            if (counter<10) 
            addOne();
        },2000);
    }
    addOne();
    

    【讨论】:

    • 我在问题中添加了一张图片,如果我将所有视图和整个滚动视图旋转 180°,颠倒顺序可能会起作用。但是我正在寻找使滚动视图从其最后一个元素堆栈的方法,可能是弹簧起源的问题,但我不知道更改它的正确方法。
    猜你喜欢
    • 2015-02-12
    • 2011-09-25
    • 2012-03-28
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多