Ext3已经出来.Ext3中已经实现了这种功能.
不过项目没有升级到ext3的打算,而且需求中也有类型的要求.
万般无奈,只要自己写一个实现了.
仍然有很多bug.不过功能基本实现了.
bug_1: toolbar中没有加 xtype:'tbseparator', 因为在我本机上'|'无法隐藏.
bug_2: toolbar中初始时,按钮是预先设置好哪些显示,哪些隐藏的.
注意事项: toolbar中的按钮必须小于等于toolbar的宽度--toolbar的宽度是除去'|<','<<','>>','>|'等之后的宽度.
首先,我们在ext中的toolbar上加上几个功能按钮:
{pressed:true,text:'|<',handler:moveButton},
{pressed:true,text:'<<',handler:moveButton},
.... // 其他按钮
{pressed:true,text:'>>',handler:moveButton},
{pressed:true,text:'>|',handler:moveButton}
随后,我们要定义moveButton的javascript函数:
/**
* 保存toolbar上一些信息
*/
var toolbarConfig = new function()
{
// 存储toolbar上按钮的数组
this.buttonArray = new Array();
// 存储toolbar上按钮长度的数组
this.buttonLengthArray = new Array();
// buttonArray的当前下标
this.buttonArrayIndex = 0;
// toolbar上状态是show的最左一个按钮
this.firstShowButton;
// lastShowButton的下标
this.firstShowButtonIndex;
// toolbar上状态是show的最右一个按钮
this.lastShowButton;
// lastShowButton的下标
this.lastShowButtonIndex;
// 右移按钮('>>')的长度
this.rightMoveLength;
// 左移按钮('<<')的长度
this.leftMoveLength;
// 右移至底按钮('>|')的长度
this.rightToBottomLength;
// 左移至底按钮('|<')的长度
this.leftToBottomLength;
// toolbar上状态为show的按钮长度之和
this.showButtonLengthSum = 0;
}
/**
* 左移,右移,左移至底,右移至底
*/
function moveButton()
{
// 循环开始前,需重置showButtonLengthSum, firstShowButton, lastShowButton
clearToolbarConfig(toolbarConfig);
/**
* (1)遍历toolbar上组件,如果是按钮,则将其存进buttonArray中('<<','>>','|<','>|'除外);
* (2)将按钮长度存入buttonLengthArray中('<<','>>','|<','>|'除外);
* (3)检查button的状态,找到[状态是show的最左一个按钮]给firstShowButton, 计算长度并保存当前下标;
* (4)检查button的状态,找到[状态是show的最右一个按钮]给lastShowButton, 计算长度并保存当前下标;
* (5)计算状态是show的按钮长度之和
*/
for(var i = 0; i < Ext.getCmp("myTabs").items.length; i++)
{
// 遍历时的当前按钮
var currentButton = Ext.getCmp("myTabs").items.items[i];
// 遍历时的当前按钮的长度
var currentButtonLength = getCurrentButtonLength(currentButton);
// 对toolbar上的按钮保存信息
buttonProcess(currentButton, currentButtonLength, i);
}
// 执行移动命令(>>,<<,>|,|<)
move(this.text, toolbarConfig);
}
/**
* 执行循环前,需清空的操作
* @param {} toolbarConfig toolbar的一些配置信息
*/
function clearToolbarConfig(toolbarConfig)
{
// 循环前,清空显示按钮长度总和
toolbarConfig.showButtonLengthSum = 0;
// 循环前,buttonArrayIndex清空;
toolbarConfig.buttonArrayIndex = 0;
// 循环前,firstButton清空;
toolbarConfig.firstShowButton = null;
// 循环前,lastButton清空;
toolbarConfig.lastShowButton = null;
// 循环前,buttonArray清空
toolbarConfig.buttonArray = new Array();
// 循环前,buttonLengthArray清空
toolbarConfig.buttonLengthArray = new Array();
}
/**
* 对每一个button进行加工处理
* @param {} currentButton 当前按钮
* @param {} currentButtonLength 当前按钮的长度
* @param {} index toolbar上元素的排列下标
*/
function buttonProcess(currentButton, currentButtonLength, index)
{
// 仅对toolbar上的按钮做处理('>>','>|','<<','|<'除外)
if(Ext.getCmp("myTabs").items.items[index].type == "button"
&& currentButton.text != ">>"
&& currentButton.text != "<<"
&& currentButton.text != ">|"
&& currentButton.text != "|<")
{
// 保存toolbar上按钮信息
setNormalButtonConfig(currentButton, currentButtonLength);
}else
{
// 保存命令按钮长度
setMoveCommandLength(currentButton.text, currentButtonLength);
}
}
/**
* 保存toolbar上最左显示的按钮及其下标, 最右显示的按钮及其下标
* @param {} button 按钮
* @param {} buttonLength 按钮长度
*/
function setNormalButtonConfig(button, buttonLength)
{
// 按钮数组
toolbarConfig.buttonArray[toolbarConfig.buttonArrayIndex] = button;
// 按钮长度数组
toolbarConfig.buttonLengthArray[toolbarConfig.buttonArrayIndex] = buttonLength;
if(button.hidden == false && !toolbarConfig.firstShowButton)
{
// 按钮是显示的最左一个按钮
toolbarConfig.firstShowButton = button;
// lastHideButtonIndex保存当前下标
toolbarConfig.firstShowButtonIndex = toolbarConfig.buttonArrayIndex;
}else if(button.hidden == false)
{
// 按钮是显示的最右一个按钮
toolbarConfig.lastShowButton = button;
// lastShowButtonIndex保存当前下标
toolbarConfig.lastShowButtonIndex = toolbarConfig.buttonArrayIndex;
}
// 累计状态是show的按钮长度
toolbarConfig.showButtonLengthSum += toolbarConfig.buttonLengthArray[toolbarConfig.buttonArrayIndex];
// 按钮数组下标自增
toolbarConfig.buttonArrayIndex++;
}
/**
* 得到toolbar上'>>','<<','>|','|<'命令按钮的长度
* @param {} text 命令名
* @param {} buttonLength 按钮长度
*/
function setMoveCommandLength(text, buttonLength)
{
if(text == ">>")
{
// 右移按钮的长度
toolbarConfig.rightMoveLength = buttonLength;
}else if(text == "<<")
{
// 左移按钮的长度
toolbarConfig.leftMoveLength = buttonLength;
}else if(text == ">|")
{
// 右移至底按钮的长度
toolbarConfig.rightToBottomLength = buttonLength;
}else if(text == "|<")
{
// 左移至底按钮的长度
toolbarConfig.leftToBottomLength = buttonLength;
}
}
/**
* 得到当前按钮的长度
* <注>如果按钮是隐藏的,且没有设置宽度,则得到其宽度会为0
* @param {} currentButton 当前按钮
* @return {} currentButtonLength 当前按钮的长度
*/
function getCurrentButtonLength(currentButton)
{
// 当前按钮的宽度
var currentButtonLength;
// 如果当前按钮没有指定宽度
if(currentButton.el.dom == null ||currentButton.el.dom.width == "")
{
if(currentButton.el.dom == null)
{
// tbfill的宽度比较特别
currentButtonLength = currentButton.el.offsetWidth;
}else if(currentButton.el.dom.width == "")
{
// 得到按钮的实际宽度
currentButtonLength = currentButton.el.dom.offsetWidth;
}
}else
{
// 得到按钮的指定宽度
currentButtonLength = currentButton.el.dom.width;
}
return currentButtonLength;
}
/**
* 得到工具条长度
* <注>该工具条长度仅是存放按钮部分的长度(不包括'>>','<<','>|','|<')
* @param {} toolbarConfig toolbar的配置信息
* @return {} toolbarWidth toolbar工具条不带'<<','>>','|<','|>'的长度
*/
function getToolbarWidth(toolbarConfig)
{
// toolbar的长度,如果没有指定长度.就取其实际长度
var toolbarWidth = (Ext.getCmp("myTabs").el.dom.width == null)
? Ext.getCmp("myTabs").el.dom.offsetWidth : Ext.getCmp("myTabs").el.dom.width;
// toolbar工具条不带'<<','>>','|<','|>'的长度
toolbarWidth =
toolbarWidth - toolbarConfig.rightMoveLength
- toolbarConfig.leftMoveLength
- toolbarConfig.rightToBottomLength
- toolbarConfig.leftToBottomLength;
return toolbarWidth;
}
/**
* 执行toolbar上的移动命令
* @param {} text 移动命令
* @param {} toolbarConfig toolbar的一些配置信息
*/
function move(text, toolbarConfig)
{
if(text == ">>")
{
moveRight(toolbarConfig);
}else if(text == "<<")
{
moveLeft(toolbarConfig);
}else if(text == ">|")
{
moveToRightBottom(toolbarConfig);
}else if(text == "|<")
{
moveToLeftBottom(toolbarConfig);
}
}
/**
* 点击'>>'按钮
* (1)先将最左边显示的按钮隐藏
* (2)重新设置toolbarConfig.firstShowButton
* (3)如果当前显示按钮的长度之和 - 隐藏的按钮长度 + 即将显示的按钮长度 <= toolbar宽度
* (4)则显示这个[即将显示的按钮],且用lastShowButton指向它;否则,暂不显示;
* @param {} toolbarConfig toolbar的一些配置信息
*/
function moveRight(toolbarConfig)
{
// 仅当最右显示按钮的右边存在着隐藏的按钮的时候,才有效果
if(toolbarConfig.buttonArray[toolbarConfig.lastShowButtonIndex + 1])
{
// 最左显示的按钮长度
var firstShowButtonLength = toolbarConfig.buttonLengthArray[toolbarConfig.firstShowButtonIndex];
// 最左边显示的按钮隐藏
toolbarConfig.firstShowButton.hide();
// 如果最左显示按钮的右边有按钮,则将firstShowButton指向它;
if(toolbarConfig.buttonArray[toolbarConfig.firstShowButtonIndex + 1])
{
toolbarConfig.firstShowButton = toolbarConfig.buttonArray[toolbarConfig.firstShowButtonIndex + 1];
}
// 即将显示的按钮
var lastShowButtonTemp = toolbarConfig.buttonArray[toolbarConfig.lastShowButtonIndex + 1];
// 先将待显示的按钮显示,以得到它的长度
lastShowButtonTemp.show();
// 当前显示按钮长度 - 被隐藏按钮长度 + 即将显示按钮长度
var result = toolbarConfig.showButtonLengthSum - firstShowButtonLength + lastShowButtonTemp.el.dom.offsetWidth;
if(result <= getToolbarWidth(toolbarConfig))
{
// 用lastShowButton指向它;
toolbarConfig.lastShowButton = toolbarConfig.buttonArray[toolbarConfig.lastShowButtonIndex + 1];
}else
{
// 状态为隐藏
toolbarConfig.buttonArray[toolbarConfig.lastShowButtonIndex + 1].hide();
}
}
}
/**
* 点击'<<'按钮
* (1)先将最右边显示的按钮隐藏
* (2)重新设置toolbarConfig.lastShowButton
* (3)如果当前显示按钮的长度之和 - 隐藏的按钮长度 + 即将显示的按钮长度 <= toolbar宽度
* (4)则显示这个[即将显示的按钮],且用firstShowButton指向它;否则,暂不显示;
* @param {} toolbarConfig toolbar的一些配置信息
*/
function moveLeft(toolbarConfig)
{
// 仅当最左显示按钮的左边存在着隐藏的按钮的时候,才有效果
if(toolbarConfig.buttonArray[toolbarConfig.firstShowButtonIndex - 1])
{
// 最右显示按钮的长度
var lastShowButtonLength = toolbarConfig.buttonLengthArray[toolbarConfig.lastShowButtonIndex];
// 最右显示的按钮隐藏
toolbarConfig.lastShowButton.hide();
// 如果最右显示按钮的左边有按钮,则将lastShowButton指向它;
if(toolbarConfig.buttonArray[toolbarConfig.lastShowButtonIndex - 1])
{
toolbarConfig.lastShowButton = toolbarConfig.buttonArray[toolbarConfig.lastShowButtonIndex - 1];
}
// 即将显示的按钮
var firstShowButtonTemp = toolbarConfig.buttonArray[toolbarConfig.firstShowButtonIndex - 1];
// 先将待显示的按钮显示,以得到它的长度
firstShowButtonTemp.show();
// 当前显示按钮长度 - 被隐藏按钮长度 + 即将显示按钮的长度
var result = toolbarConfig.showButtonLengthSum - lastShowButtonLength + firstShowButtonTemp.el.dom.offsetWidth;
// 如果result <= toolbar长度
if(result <= getToolbarWidth(toolbarConfig))
{
// 用firstShowButton指向该按钮
toolbarConfig.firstShowButton = toolbarConfig.buttonArray[toolbarConfig.firstShowButtonIndex - 1];
}else
{
// 该按钮暂不显示
toolbarConfig.buttonArray[toolbarConfig.firstShowButtonIndex - 1].hide();
}
}
}
/**
* 右移到最右端
* (1)toolbar上按钮从右至于左遍历.累加其按钮长度
* (2)如果按钮长度之和小于等于toolbar的宽度,累加继续.并设置按钮状态为显示
* (3)如果按钮长度超过toolbar宽度,跳出循环.
* @param {} toolbarConfig toolbar的一些配置
*/
function moveToRightBottom(toolbarConfig)
{
// 按钮长度之和
var buttonLengthSum = 0;
// 从右至左遍历.
for(var i = toolbarConfig.buttonArray.length; i > 0; i--)
{
// 当前按钮
var currentButton = toolbarConfig.buttonArray[i - 1];
// 先将按钮显示,以得到其实际长度
currentButton.show();
// 按钮长度累加
buttonLengthSum += currentButton.el.dom.offsetWidth;
// 超过了toolbar长度的按钮全隐藏
if(buttonLengthSum > getToolbarWidth(toolbarConfig))
{
currentButton.hide();
}
}
}
/**
* 左移到最左端
* (1)toolbar上按钮从左至于右遍历.累加其按钮长度
* (2)如果按钮长度之和小于等于toolbar的宽度,累加继续.并设置按钮状态为显示
* (3)如果按钮长度超过toolbar宽度,跳出循环.
* @param {} toolbarConfig toolbar的一些配置
*/
function moveToLeftBottom(toolbarConfig)
{
// 按钮长度之和
var buttonLengthSum = 0;
// 从右至左遍历.
for(var i = 0; i < toolbarConfig.buttonArray.length; i++)
{
// 当前按钮
var currentButton = toolbarConfig.buttonArray[i];
// 先将按钮显示,以得到其实际长度
currentButton.show();
// 按钮长度累加
buttonLengthSum += currentButton.el.dom.offsetWidth;
// 超过了toolbar长度的按钮全隐藏
if(buttonLengthSum > getToolbarWidth(toolbarConfig))
{
currentButton.hide();
}
}
}
分享到:
相关推荐
在`panel.js`中,你可能会找到创建Toolbar的代码,例如`Ext.create('Ext.toolbar.Toolbar', {...})`,然后在其中添加各种工具按钮。 `EXT Button`是EXT JS中最常用的交互元素之一,它用于触发某个动作或者导航到...
在Android应用开发中,我们经常需要根据用户交互来动态调整界面元素的可见性,例如当用户滚动列表时,隐藏或显示顶部的ToolBar以及悬浮动作按钮(Floating Action Button, FAB)。这种效果能提供更好的用户体验,...
65、Ext.Toolbar.Separator类 ……… 56 66、Ext.Toolbar.Spacer类 …………… 56 67、Ext.Toolbar.TextItem类 ……… 56 68、Ext.Toolbar.Fill类 ……………… 56 69、Ext.grid.ColumnModel类 ……… 58 70、Ext....
6. **菜单和工具栏**:创建和使用菜单(Menu)和工具栏(Toolbar)。 7. **拖放(Drag & Drop)和DND**:如何实现元素的拖放操作。 8. **Ajax和数据通信**:使用Ajax请求进行后台通信,包括JsonP和ScriptTagProxy。 ...
以一个简单的示例来展示如何使用Leaflet.Toolbar.js。创建一个地图,添加一个绘制点的工具,当用户点击该工具并在地图上点击时,会在地图上生成一个标记点。 ```javascript var map = L.map('map').setView([51.505...
### Ext组件概述与详解 #### 一、Ext基础组件 **1.1 Box Component (Ext.BoxComponent)** - **xtype**: `box` - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的...
Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...
本教程将探讨如何在Android应用中动态地隐藏和显示`Toolbar`,特别是在列表滚动时实现这一功能。我们将主要关注以下几个知识点: 1. **Toolbar的引入与设置** - `Toolbar`是`android.support.v7.widget.Toolbar`库...
1. **Tooltips样式**: Toolbar.js将工具栏的每个按钮设计成Tooltip样式,当鼠标悬停在按钮上时,会显示相关的提示信息或功能描述,提高了用户体验。 2. **Font Awesome集成**: Font Awesome是一套流行的Web字体图标...
在EXTJS3中,`Ext.PagingToolbar()` 是一个非常重要的组件,用于在大量数据的网格或视图中实现分页功能。这个组件允许用户轻松地浏览和操作大量的记录,而不需要一次性加载所有数据,从而提高了应用程序的性能和用户...
首先,我们需要在布局文件中定义Toolbar,通常在activity的根布局如`CoordinatorLayout`中使用`AppBarLayout`来包含Toolbar。`AppBarLayout`是专门为配合`CollapsingToolbarLayout`和`ToolBar`设计的,可以实现类似...
在`CMyToolBar`中添加组合框,并在需要时显示或隐藏。 8. **热点图像**: 热点图像指的是具有可交互区域的图像,当用户点击该区域时会触发特定动作。在工具栏上实现这一功能,可以通过在位图中定义热点区域,并在`...
在“VC.control.design.code.toolbar.rar_control”这个压缩包中,包含的应该是关于如何在Visual C++中设计和实现自定义工具条控件的源代码。接下来,我们将深入探讨工具条控件的基本概念、设计原理以及相关的编程...
MFC 工具栏 ToolBar 按钮添加下拉菜单是指在 MFC 应用程序中,将工具栏按钮添加下拉菜单,以提供更多的功能选项。下面将详细介绍如何实现该功能。 首先,在 MainFrm.cpp 的 int CMainFrame::OnCreate...
通过上述步骤,我们可以看到在Visual Basic中使用Toolbar控件来创建工具条不仅功能强大而且操作简便。对于希望提高软件界面友好性的开发者来说,这是一个非常有用的工具。通过合理的布局和功能设计,可以显著提升...
可以是`Ext.Toolbar`对象、工具栏配置对象或按钮配置数组。一旦组件渲染完成,如果需要修改工具栏,应使用`getBottomToolbar`获取引用。 11. **bodyBorder**: 如果设置为`true`,会给组件的内部元素(`this.el`)...
我们还需要在 render 事件中使用 Ext.Ajax.request 方法来请求后台的工具栏数据,并将其添加到 Toolbar 中。 ```javascript Ext.define('Ext.zc.grid.Toolbar', { extend: 'Ext.toolbar.Toolbar', alias: 'widget...
- 首先,使用`Toolbar1.Buttons.Add()`方法添加两个按钮到工具栏。 - 第一个按钮设置为`tbrSeparator`样式,表示一个分隔符。 - 第二个按钮设置为`tbrPlaceholder`样式,并指定其`Key`属性为“ComboBox”,这样就...
- `tbsplit`:`Ext.Toolbar.SplitButton`,工具栏的分隔按钮。 - `tbtext`:`Ext.Toolbar.TextItem`,在工具栏中添加文本。 4. **菜单组件** - `menu`:`Ext.menu.Menu`,创建下拉菜单。 - `colormenu`:`Ext....
Ext 类 (P.2) - **概述**:`Ext` 是 ExtJS 的核心命名空间,包含了全局的方法和属性。 - **用途**:提供了一个统一的入口来访问 ExtJS 库的功能,如创建组件、管理事件等。 - **常用方法**: - `Ext.create()`: ...