导航滚动组件的形式参考百度百科:
http://baike.baidu.com/subview/837441/10940762.htm
它由导航条和可滚动内容两者构成。
它具有以下3个特点:
1. 导航条本身是位置固定(Dock)或浮动的;
2. 点击导航条button,内容区会滚动到相应位置;
3. 在内容区滚动,导航条会自动active当前位置对应的button;
此形式的JQuery实现有很多,比如这个Scrollit.js
http://www.bytemuse.com/scrollIt.js/
相比较常见的标签页(tab)形式,两者都能快速地定位内容,导航滚动具备的最大优势是:
它可以更好地适应不同的屏幕分辨率,更高的屏幕高度,每屏可浏览更多内容。
ExtJS官方本身没有提供这种内容组织形式,但是在ExtJS提供的丰富的基础组件和开放的扩展机制上,实现这种形式并不难。我的实现思路如下:
1. 采用tabbar作为导航条;
2.调用函数scrollIntoView实现点击按钮,滚动到指定位置;
3.响应内容区的scroll事件,active对应的导航按钮;
实现效果如下:
点击按钮“Panel2”滚动
鼠标滚动内容区,滚动到显示Panel3的位置,导航按钮自动active“Panel3”
代码如下:
/** * Demonstrates usage of navbar. */ Ext.define('DCApp.view.navpanel', { extend: 'Ext.panel.Panel', xtype: 'navpanel', layout: { type: 'fit', pack: 'start', align: 'stretch' }, bodyPadding: 10, width: 500, height: 400, items: [ { id:'panel0', listeners: { render: function(p){ p = p.getEl(); var me= this.up(); me.h0=p.getHeight(); p.on('scroll', function(e, t){ //console.log(t.scrollTop +" "+ t.clientHeight); me.onscroll(t.scrollTop,t.clientHeight); }, p); } }, title: 'Panel 0', flex: 2, frame: true, xtype: 'container', layout: 'anchor', style: { overflow: 'auto' }, defaults: { frame: true, bodyPadding: 10 }, items: [ { title: 'Panel 1', flex: 1, margin: '0 0 10 0', cls:'nav_pos', height:300, html: 'height: 300' }, { title: 'Panel 2', height: 100, margin: '0 0 10 0', cls:'nav_pos', height:400, html: 'height: 400' }, { title: 'Panel 3', flex: 2, cls:'nav_pos', height:500, html: 'height: 500' } ] } ], onscroll:function(top,h0){ var items_navpos=this.items_navpos; var offset=0; //var h0 = this.h0; for(var i=0; i<items_navpos.length; i++){ var item_navpos=items_navpos[i]; var h = item_navpos.getHeight(); //header落在移动窗口之内,或移动窗口在 两个offset之间都算 if((offset>=top && (offset<= (top+h0))) || (top>=offset && (top+h0) <= offset+h )) break; offset+=h; } this.nav(this.btns_dock.getAt(i)); }, nav:function(item,e){ if(this.item_last){ if(this.item_last==item) return false; this.item_last.removeCls('x-tab-active'); } var pnav = item.pnav; if(e){ pnav.getEl().scrollIntoView(pnav.up().getEl(),false,true); }else{ item.addCls('x-tab-active'); } this.item_last=item; }, afterRender: function(ct, position) { var items_dock=[]; var items_navpos=this.query('[cls=nav_pos]'); var me = this; for(var i=0; i<items_navpos.length; i++){ var item_navpos=items_navpos[i]; var item_dock = { closable:false, text:item_navpos.title, pnav:item_navpos, handler:me.nav, scope: me }; items_dock[items_dock.length]=item_dock; } this.items_navpos=items_navpos; this.btns_dock = this.addDocked([{ xtype: 'tabbar', dock: 'top', id:'tbar0', activeItem:1, items: items_dock }])[0].items; this.nav(this.btns_dock.getAt(0)); this.callParent(); }, initComponent: function(){ this.callParent(); } }); Ext.application({ name : 'Fiddle', launch : function() { //Ext.Msg.alert('Fiddle', 'Welcome to Sencha Fiddle!'); Ext.create('widget.navpanel', {renderTo:Ext.getBody()}); } });
在线Demo
https://fiddle.sencha.com/#fiddle/kfr
相关推荐
本篇文章将深入探讨如何在ExtJS中创建并实现上方动态导航栏。 1. **创建基础结构** 在ExtJS中,导航栏通常使用`Ext.toolbar.Toolbar`组件来创建。首先,我们需要定义一个Toolbar实例,包含必要的配置项,如宽度、...
这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...
EXTJS的`TreeStore`会自动处理这些信息,以便正确地显示和导航页面。 4. 扩展树节点 当用户点击或展开树节点时,EXTJS会发送请求到服务器获取该节点的子节点。你需要在服务器端处理这个请求,根据父节点ID和分页...
2. 动态加载:TreePanel支持异步加载,即在用户滚动或展开节点时动态获取子节点数据,这有助于减少页面初始化时的数据量。 3. 节点操作:可以添加、删除、移动和编辑TreePanel中的节点,实现丰富的交互功能。 4. ...
它提供了各种图表类型,如折线图、柱状图、面积图等,支持实时更新和滚动,使用户能够清晰地查看和理解大量历史数据。Highstock的特性包括数据缩放、导航条、工具提示以及多种自定义选项,使得数据可视化变得极其...
总的来说,ExtJS的LockingGridPanel插件为开发者提供了一种有效的方式,使用户能够在大型数据表中轻松导航,保持关键列的可视性,提高应用的可用性和用户体验。通过理解和应用上述知识点,我们可以构建出更高效、...
7. **Events(事件)**:通过监听用户的交互行为,如点击按钮、滚动等,来触发相应的处理函数,实现图片的切换和其他动态效果。 8. **Ajax请求**:如果图片存储在远程服务器,可能需要使用Ajax技术异步加载图片数据...
通过ExtJs Tree,用户可以直观地展示数据之间的层级关系,并支持多种交互操作,如展开、折叠节点等。 ### 特性与功能 #### 树形面板(Treepanel) - **自动滚动**:通过`autoScroll`属性设置为`true`,确保当内容...
它支持节点的添加、删除、展开和折叠操作,可以进行拖放操作,并且可以与其他ExtJS组件如Grid进行联动。 - 树形控件可以用于文件系统导航、组织架构展示或者任何需要层次结构表示的数据场景。 - 在ExtJS中,树形...
5. **其他功能**:“up.gif”、“down.gif”可能表示上下滚动,可能在图片列表或缩略图导航中使用。"zoom.gif"可能是缩放图标,用于点击后进入或退出全屏模式或者调整图片大小。 6. **图片资源**:“girl.jpg”是...
9. **性能优化**:EXTJS提供了缓存机制和虚拟滚动等特性,以优化大量数据的显示和处理,确保应用的流畅性。 通过学习和实践这个“动态树”示例,开发者可以深入了解EXTJS的树形控件及其动态操作,从而在自己的项目...
ExtJS Grid提供了虚拟滚动、延迟渲染等技术,确保在处理大量数据时仍保持流畅的用户体验。 14. **自定义行为(Custom Behaviors)** 开发者可以使用事件监听和插件机制,为Grid添加自定义行为,如右键菜单、双击...
- **配置选项**:许多 ExtJS 组件都支持通过配置选项进行个性化设置,这些选项可以控制组件的行为和外观。 - **Ext.apply() 和 Ext.applyIf()**:这两个函数用于合并对象。`Ext.apply()` 会覆盖目标对象的属性,而 `...
当用户滚动页面或者点击分页导航按钮时,Store会发送包含分页信息的请求到服务器,Struts2 Action根据这些参数查询数据库并返回对应页的数据。GridPanel接收到新数据后,自动更新显示内容,实现平滑的分页体验。 **...
在ExtJS中,TreePanel是实现树结构的主要组件,它可以用来展示层次化的数据,常用于构建导航菜单、文件系统或者组织结构图。 在ExtJS开发树效果时,我们首先要理解TreePanel的基本概念。TreePanel是一个可滚动的...
4. **键盘导航**:支持使用键盘上的上下左右箭头键、回车键、ESC键以及TAB键来进行导航和操作,极大提升了可访问性。 5. **智能过滤**:用户可以通过输入汉字或拼音首字母来快速过滤树中的结点,实现高效的查找功能...
在IT行业中,Columntree是一种特殊的表格展示方式,它结合了树形结构和表格的特点,...通过分析"CColumnTreeCtrlDemo_src"中的代码,你可以更直观地了解EXTJS实现Columntree的具体方法,从而更好地应用到自己的项目中。
- **用途**: 组织和布局页面元素,如导航菜单、侧边栏等。 **Ext.Panel** - **描述**: 面板组件,具有标题、工具栏、布局等功能。 - **用途**: 创建包含标题、工具栏和内容区域的可折叠面板。 **Ext.TabPanel** - ...