用过Ext的人也许都会注意到,DataGrid的scroll行为只在当前DataGrid中有效。比如,一个带有纵向滚动条的DataGrid,如果我们把鼠标停留在DataGrid上并滚动滚轴,DataGrid中的条目就会随之滚动起来,一直到最后一条为止。这个时候,如果继续滚动,则不会有任何响应。整个网页也不会跟着滚动。在很多情况下,这样做是正确的,其目的是防止整个网页的滚动。因为当在DataGrid中滚动到最后一行时,用户很可能不希望整个网页随着鼠标滚轴滚动。
但是在有些情况下这一行为并不适用。例如在我的一个项目中,页面上并不会指定DataGrid的高度,而是让数据自动把整个DataGrid撑起来,这样的话,DataGrid上就不会出现滚动条。而这个DataGrid占据着页面上较大的一部分,用户的鼠标通常会停留在DataGrid上进行滚动,其目的实际上是滚动整个网页。这个时候,如果不改变Ext的默认行为,网页就不会滚动,这种用户体验就是错误的。
去看看Ext的文档,并没有这方面相关的说明,看来Ext本身并没有提供这样一个选项可以设置DataGrid的scroll行为。看来只能自己研究一下了。还好自己多少也和Ext打了些交道,估计这部分可能在Grid或GridView这两个文件中。分别去看这两个东东的源代码,感觉Grid不像,先暂时排除,然后去GridView里面找,发现有一个handleWheel函数,八成就是这个了,其代码是
handleWheel: function(e) {
var d = e.getWheelDelta();
this.scroller.dom.scrollTop -= d * 22;
// set this here to prevent jumpy scrolling on large tables
this.lockedBody.dom.scrollTop = this.mainBody.dom.scrollTop = this.scroller.dom.scrollTop;
e.stopEvent();
}
看不懂的代码咱就不说了,关键是这里有个e.stopEvent()调用,就是它把页面的鼠标滚动事件吞了下去。那么去掉这个东东就好了。
Ext.override(Ext.grid.GridView, {
handleWheel: function(e) {
var d = e.getWheelDelta();
this.scroller.dom.scrollTop -= d * 22;
// set this here to prevent jumpy scrolling on large tables
this.lockedBody.dom.scrollTop = this.mainBody.dom.scrollTop = this.scroller.dom.scrollTop;
}
});
分享到:
相关推荐
- **介绍**:EasyUI DataGrid提供了一种名为Virtual Scroll View的视图模式,专门用于改善大数据量下的性能问题。 - **实施步骤**:启用此视图模式,以减少页面滚动时的数据重绘次数,从而提升整体性能。 #### 勾选...
`阻止默认的回车行为。 14. DataGrid超级连接列: 配置DataGrid的HyperLinkColumn,设置字段名和导航URL,以便在点击单元格时跳转到其他页面。 15. DataGrid行随鼠标变色: 实现行鼠标进入和离开的事件处理,...
在***中,通过在HTML元素的onkeydown事件中编写JavaScript代码,可以改变键盘按键的默认行为。此例中,通过检测按键码为13(回车键)并且不是在特定控件(如按钮、提交、重置等)上按下时,将其转换为9(Tab键),...
- **编辑模式**:单元格可以处于编辑模式,此时会显示对应的编辑控件以供用户修改数据。 - **事件触发**:单元格支持各种事件,如点击、双击等,可用于响应用户的交互行为。 ##### 2.4 DataGridView 的列 列是 ...
- **样式继承**:子行和子单元格可以继承父行和父单元格的样式,也可以覆盖默认样式。 - **动态设置样式**:可以在运行时根据条件动态改变单元格的样式。 ##### 5.2 Custom painting - **PaintParts**:允许开发者...