1

HI I have done application using Sencha touch2. In carousel we were binding the images dynamically from the web service at the controller level. When we move/slide the images in carousel, next images are taking time to load/show in the carousel. If it takes time to load original image that time it will show default load mask on the carousel. As per our requirement we need to show default image in carousel if it takes time to load original images while sliding the carousel. Once original image is loaded no need to show the default image obviously load mask also will go. Can anyone tell me how to achieve this one Sencha touch2?

My View page Code:

Ext.define('SLS.BRND.WEB.view.ProjectsView', {
  extend: 'Ext.Panel',
  requires: [        
  'Ext.Carousel'
  ],
  id: 'projectprofile',
  xtype: "projectspage",
  config: {
    autoDestroy: true,
    fullscreen: true,       
    layout: {
      type: 'vbox'
    },
    items: [{
      xtype: 'panel',
      layout: 'fit',
      flex: Ext.os.is.Phone ? 5 : 5,
      items: [{
        xtype: 'carousel',
        direction: 'horizontal',
        directionLock: true,
        id: 'ImgId',
        flex: Ext.os.is.Phone ? 5 : 5,                          
        config: {
          fullscreen: true                               
        }
      }]
    }]
  }
});

My Controller Page Code:

var retrievedObject = localStorage.getItem('ProjectDetails');
jsonObj = Ext.decode(retrievedObject);
var cmp = Ext.getCmp('ImgId');

if (jsonObj != null) {
  if (jsonObj != null) {
    var itemsoverlay = [];
    if (jsonObj.ProjectMainGalleryRoyalGardenia != null) {
      for (var i = 0; i < jsonObj.ProjectMainGalleryRoyalGardenia.length; i++) {
        var imgURL = jsonObj.ProjectMainGalleryRoyalGardenia[i].ImageUrl;
        var senchaIoProjectImageURL = imgURL;
        var senchabigImage = imgURL;

        var images = [{ url: senchaIoProjectImageURL, bigUrl: senchabigImage}]
        Ext.each(images, function (picture) {
          var img = picture.url;
          var bigImg = picture.bigUrl;
          itemsoverlay.push({
            xtype: 'label',
            html: '<div style="width:' + window.innerWidth + 'px;height:' + SLS.BRND.WEB.Common.Constants.carouselCanvasHeight + 'px;"><img src=' + img + ' style="width:100%;height:100%"/></div>'
          });
        });
      }
    }
    cmp.setItems(itemsoverlay);
    cmp.setActiveItem(0);
  }
}
Titouan de Bailleul
  • 12,920
  • 11
  • 66
  • 121
Ramesh Lamani
  • 1,117
  • 3
  • 25
  • 54

1 Answers1

2

Once quick solution I can see is adding a CSS class to the div that contains the picture like :

itemsoverlay.push({
  xtype: 'label',
  html: '<div cls="myDiv" style="width:' + window.innerWidth + 'px;height:' + SLS.BRND.WEB.Common.Constants.carouselCanvasHeight + 'px;"><img src=' + img + ' style="width:100%;height:100%"/></div>'
});

Then create the relevant CSS class in your CSS files :

.myDiv {
  background-image:url(data:image/png;base64,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);
}

Here I just converted a placeholder image to Base 64 data and added it as a background-image of the div. This way you're default image will be there before the real picture loads.

You can easily remove the default picture after the real picture has loaded by removing the myDiv CSS class from the div.

Hope this helps

Titouan de Bailleul
  • 12,920
  • 11
  • 66
  • 121