Sencha Touch Slide

12,436

To make the card transition when you click a button use the setActiveItem method in your handler:

var tapHandler = function(button, event) {
    mainPanel.setActiveItem(1);
};

It can also take a reference to the panel component directly (which is useful if you ever change the order of the cards and the indices change).

Your toolbar is docked to the outer container, not to the cards, so it won't change when you change cards. You could dock two different toolbars to the card panels instead if you wanted it to change (or alter it programmatically, I suppose).

Also you can use the 'spacer' type to spread your buttons apart to each side of the tool. Here is your code adjusted to do what I think you probably want (on phone only, for clarity)

Ext.setup({
    onReady: function() {

        /*HANDLERS
        *********************************************************************************/
        var showAlert = function(btn, event) {
            Ext.Msg.alert('Title', 'Diste ' + event.type + ' en el botón "' + btn.text + '"', Ext.emptyFn);
        };

        var tapHandler = function(button, event) {
            mainPanel.setActiveItem(blue, {type: 'slide'});
        };

        var backHandler = function(button, event) {
            mainPanel.setActiveItem(green, {type: 'slide', direction: 'right'});
        };


        /*UI
        *********************************************************************************/

        var green = new Ext.Panel({
            dockedItems: [{
                xtype: 'toolbar',
                ui: 'light',
                title: 'My Toolbar',
                items: [{
                    text: 'Sobre App',
                    ui: 'round',
                    handler: showAlert
                }, { xtype:'spacer'}, {
                    text: 'Check-in',
                    ui: 'forward',
                    handler: tapHandler
                }]
            }],
            style: 'background-color:#3b7E3b',
            html: 'Green'
        });

        var blue = new Ext.Panel({
            dockedItems: [{
                xtype: 'toolbar',
                ui: 'light',
                title: 'Check-in',
                items: [{
                    text: 'Back',
                    ui: 'back',
                    handler: backHandler
                }]
            }],
            style: 'background-color:#3b3b7E',
            html: 'Blue'
        });

        var mainPanel = new Ext.Panel({
            layout: 'card',
            fullscreen : true,
            items: [green, blue]
        });
    }
});
Share:
12,436
Pandy
Author by

Pandy

I have no special talent. I am only passionately curious... -Albert Einstein

Updated on June 07, 2022

Comments

  • Pandy
    Pandy about 2 years

    I am starting to use Sencha Touch and have already read their "Getting Started" gide, however I am currently stuck in what I want to do and haven't been able to find any proper tutorial or example of what I need.

    I want to make a panel so that when a user clicks on a specific button the panel slides and the toolbar on top disappears (or slides as well) and a new one appear just as it would happen on a native iOS app.

    Here's my Sencha code so far:

    Ext.setup({
        tabletStartupScreen: 'tablet_startup.png',
        phoneStartupScreen: 'phone_startup.png',
        icon: 'icon.png',
        glossOnIcon: false,
        onReady: function() {
    
            /*HANDLERS
            *********************************************************************************/
            var showAlert = function(btn, event) {
                Ext.Msg.alert('Title', 'Diste ' + event.type + ' en el botón "' + btn.text + '"', Ext.emptyFn);
            };
    
            var tapHandler = function(button, event) {
    
            };
    
            /*BUTTONS
            *********************************************************************************/
            var aboutAppBtn = [{
                text: 'Sobre App',
                ui: 'round',
                handler: showAlert
            }];
    
            var checkInBtn = [{
                text: 'Check-in',
                ui: 'forward',
                handler: tapHandler
            }];
    
            var buscarCercaBtn = [{
                text: 'Buscar local...',
                ui: 'button',
                handler: showAlert
            }];
    
            var buttonsGroup1 = [{
                text: 'Sobre App',
                ui: 'round',
                handler: showAlert
            }, {
                text: 'Check-in',
                ui: 'forward',
                handler: tapHandler
            }];
    
            /*PHONE || SCREEN
            **********************************************************************************/
            if (Ext.is.Phone) {// Phone has far less screen real-estate
                var dockedItems = [{
                    xtype: 'toolbar',
                    dock : 'top',
                    ui: 'light',
                    title: 'My Toolbar',
                    items: buttonsGroup1
                }];
            }else{
                //var dockedItems = [topTB];
                aboutAppBtn.push({xtype: 'spacer'});
                var dockedItems = [{
                    xtype: 'toolbar',
                    dock : 'top',
                    ui: 'light',
                    title: 'My Toolbar',
                    items: aboutAppBtn.concat(checkInBtn)
                },{
                    xtype: 'button',
                    dock: 'bottom',
                    ui: 'action',
                    text: 'Buscar local...',
                    handler: showAlert
                }];
            }
    
            var green = {
                style: 'background-color:#3b7E00; color:white;',
                title: 'Green',
                html: 'Green'
            };
    
            var blue = {
                style: 'background-color:#0F0; color:white;',
                title: 'Blue',
                html: 'Blue'
            };
    
            /*PANELS
            **********************************************************************************/
            var mainPanel = new Ext.Panel({
                dockedItems: dockedItems,
                layout: 'card',
                cardSwitchAnimation: {type: 'flip', duration: 500},
                fullscreen : true,
                items: [green, blue]
            });
        }
    });