Ext.ux.ThemeCycleButton换肤组件 示例

效果:

 

 


创建调用HTML:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title></title>
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />
 <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
 <script type="text/javascript" src="extjs/ext-all.js"></script>
 <script type="text/javascript" src="./mygrid.js"></script>
<style type="text/css">
</style>
<script>
Ext.onReady(function(){
            new Ext.ux.ThemeCycleButton({renderTo : document.body});
});
</script>
</head>
<body>
<div id='toolbar-div'></div>
</body>
</html>

 

备注:

附件中提供了十二种ext皮肤。

Ext.ux.ThemeCycleButton文件中要注意其url路径(包括css和css中图片的路径)。

Ext.ux.ThemeCycleButton文件源码:

Ext.ux.ThemeCycleButton = Ext.extend(Ext.CycleButton, {  
     /** 
  
      * file 你的css名称 
  
      * text 下拉框的名称 
  
      * iconCls 设置图标css 
  
      */                                    
   
     cssItems:[  
   
         {file: 'ext-all.css', text: 'default',checked:true,  iconCls: 'icon-blue-theme'},  
   
         {file: 'xtheme-black.css', text: 'black', iconCls: 'icon-black-theme'},  
   
         {file: 'xtheme-calista.css', text: 'calista', iconCls: 'icon-calista-theme'},  
   
         {file: 'xtheme-darkgray.css', text: 'darkgray', iconCls: 'icon-darkgray-theme'},  
   
         {file: 'xtheme-gray.css', text: 'gray', iconCls: 'icon-gray-theme'},  
   
         {file: 'xtheme-green.css', text: 'green', iconCls: 'icon-green-theme'}  ,    {file: 'xtheme-indigo.css', text: 'indigo', iconCls: 'icon-indigo-theme'},  
   
         {file: 'xtheme-midnight.css', text: 'midnight', iconCls: 'icon-midnight-theme'},  
   
         {file: 'xtheme-olive.css', text: 'olive', iconCls: 'icon-olive-theme'},  
   
         {file: 'xtheme-pink.css', text: 'pink', iconCls: 'icon-pink-theme'},  
   
         {file: 'xtheme-purple.css', text: 'purple', iconCls: 'icon-purple-theme'},   {file: 'xtheme-slate.css', text: 'slate', iconCls: 'icon-slate-theme'},  
   
         {file: 'xtheme-slickness.css', text: 'slickness', iconCls: 'icon-slickness-theme'}
   
     ],  
   
     themeVar:'style',  
   
     headVar: 'head',  
   
     //cssPath
   
     cssPath:'./extjs/resources/css/',  
   
       
   
     initComponent: function() {  
   
         Ext.apply(this, {  
   
             showText: true,  
   
             prependText: ' ',  
   
             items: this.cssItems  
   
         });  
   
         if(Ext.state.Manager){   
   
             var selectedTheme = Ext.state.Manager.get(this.themeVar);   
   
             if(selectedTheme){   
   
                 for(var i=0; i<this.items.length;i++){  
   
                     if (this.items[i].file == selectedTheme){  
   
                         this.items[i].checked = true;  
   
 //                      this.setActiveItem(this.items[i], true); //error ??  
   
                         this.changeHandler(this, this.items[i]);  
   
 //                      this.changeHandler.defer(1000, this, [this, this.items[i]]);  
   
                         break;  
   
                     }  
   
                 }  
   
             }   
   
         }  
   
         Ext.ux.ThemeCycleButton.superclass.initComponent.apply(this, arguments);  
   
     },  
   
     
     changeHandler: function(o, i){  
   
         if(Ext.state.Manager.getProvider()) {  
   
             Ext.state.Manager.set(this.themeVar, i.file);  
   
             Ext.state.Manager.set(this.headVar, i.head);  
   
         }  
   
         Ext.util.CSS.swapStyleSheet(this.themeVar, this.cssPath + i.file);  
   
         Ext.util.CSS.getRule('.x-panel-body', true).style.background = 'url(' + i.head + ')';  
   
 //      Ext.util.CSS.updateRule('.x-panel-body', 'background', 'url(' + i.head + ')');  
   
         if(Ext.getCmp('viewport')){  
   
             Ext.getCmp('viewport').layout.center.panel.setSize(Ext.getCmp('viewport').layout.center.getSize().width + 1);  
   
             Ext.getCmp('viewport').doLayout();  
   
             Ext.getCmp('viewport').layout.center.panel.setSize(Ext.getCmp('viewport').layout.center.getSize().width - 1);  
   
             Ext.getCmp('viewport').doLayout();  
   
         }  
   
     }  
   
 });  
   
 Ext.reg('themecyclebutton', Ext.ux.ThemeCycleButton);