GWT实现“跟随标题栏”
在一些商城或者博客上,随处可见一些“跟随的标题栏”,什么是”跟随的标题栏“呢?它的效果是当浏览器窗口移到看不见某处内容的时候,这块内容的标题会紧贴在浏览器顶部,跟随浏览器滑动,当用户将浏览器内容往上拖动的时候,这个标题又会自动还原。例如淘宝的顶部搜索栏如下。

这种方法在GWT也可以实现,最近做了一个测试,发现效果一样,特说下思路,贴出代码,以作后用。
思路:
GWT的界面上提供了一个方法,名为:Window.addWindowScrollHandler(Handler handler),该方法可以监视窗口的拖动。在这个方法里,我们可以进行我们想要的操作。
关于怎么“浮出”这个标题,我首先想到是的使用PopPanel实现,它可以实现精确的定位,但要在其中显示和要浮动的标题一样的控件,必须得先有这个控件才行,但GWT中不允许一个布局控件多次引用。所以在此我用的是一种“障眼法”,创建两个一样的标题控件,将其中一个放在PopPanel中即可。
总体实现方法是这样的:在窗体滑动事件中,根据我们设置的条件,滑到某个程度的时候,弹出一个PopPanel,其中的内容和要“浮动”标题一样,但回到某个地方,将该PopPanel隐藏即可。
代码如下:
Window.addWindowScrollHandler(new Window.ScrollHandler() {
public void onWindowScroll(Window.ScrollEvent event) {
int topDistance = View1.getAbsoluteTop();
int left = View1.getAbsoluteLeft();
floatPanel.setWidget(View2);
int w = Window.getScrollTop();
floatPanel.setPopupPosition(left, w);
if(event.getScrollTop()>topDistance){
floatPanel.show();
}else{
floatPanel.hide();
}
}
});
上述代码中的View1和View2其实是两个相同的控件。第三行中有一个getAbsoulutTop()方法,是获取该控件在浏览器中离浏览器顶部的距离。所以在第8行中我们就可以判断,在窗体滑动高度大于该控件里窗体的高度的时候,就将该floatPanel显示出来,否则隐藏。关于PopPanel,它必须拥有坐标,即在浏览器中的位置坐标。高度我们可以使用Window.getScrollTop(),即滑动条的高度,所以一直是在浏览器顶部的。关于离浏览器左边的距离,我们可以在窗体中获取一个相对位置,要想实现PopPanel在隐藏和显示和原控件重叠,最好的办法就是将原控件作为相对位置,所以浮动Panel距离浏览器左边的距离就是原控件距离浏览器左边的距离。
补充一点:在浏览器是可以改变大小的,这个原控件的位置可能会改变,floatPanel也应该要改变其X坐标才合理,因为一旦浏览器再放大或缩小窗口,floatPanel还会是原来的位置,造成位置偏移。幸好,GWT还提供了一个方法:
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent event) {
//method here
}
});
该方法将监视浏览器缩放情况,一旦浏览器缩放了,就会触发事件。所以把两者结合起来,可以实现:但浏览器缩放的时候,重新获取原控件的X左标,并跟着立即改变PopPanel的X坐标,这样就不会出现缩放浏览器“浮动标题”移位了。
GWT实现“跟随标题栏”的更多相关文章
- PyQt:无边框自定义标题栏及最大化最小化窗体大小调整
环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...
- Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验 ...
- c# 窗体相关操作(最大化/最小化/关闭/标题栏)
/// <summary> /// 窗体跟随鼠标移动的标记 /// </summary> private bool normalmoving = false; /// < ...
- Unity3d学习 相机的跟随
最近在写关于相机跟随的逻辑,其实最早接触相机跟随是在Unity官网的一个叫Roll-a-ball tutorial上,其中简单的涉及了关于相机如何跟随物体的移动而移动,如下代码: using Unit ...
- UWP中实现自定义标题栏
UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...
- Android中通过ActionBar为标题栏添加搜索以及分享视窗
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...
- 【Win10 应用开发】自定义应用标题栏
Win 10 app对窗口标题栏的自定义包括两个层面:一是只定义标题中各部分的颜色,如标题栏上文本的颜色.三个系统按钮(最大化,最小化,关闭)的背景颜色等:另一层是把窗口的可视区域直接扩展到标题栏上, ...
- WinForm拖动没有标题栏窗体的方法
建立窗体的名称修改为:Form_HoverTree 文后附有源码下载. 主要代码: Point _HoverTreePosition; public Form_HoverTree() { Initia ...
- WPF 自定义标题栏 自定义菜单栏
自定义标题栏 自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果.但是ListBox是不能设置默认选中状态的. 而我们需要一些复杂的UI效果,还是直接自定义控件来的快 GitHu ...
随机推荐
- java resources 红叉 An error occurred while filtering resources
用eclipse创建了一个Spring mvc的Maven项目,在项目上有个叉叉,通过Window -> Show View -> Markers中看到错误原因 An error occu ...
- Complex social network Partition for Balanced Subnetworks---Hao Lan Zhang,Jiming Liu,Chunyu Feng,Chaoyi Pang,Tongliang Li,Jing He阅读
摘要:Abstract—Complex social network analysis methods have been applied extensively in various domains ...
- 设置本地wamp环境挂载多站点同时运行
之前写过一篇关于在Linux环境下配置虚拟主机的文章:现在又有一种场景:在本地同时写多个项目:可本地的wamp环境下默认只有一个www目录:这样经常修改目录很痛苦:那么幸福就这么猝不及防的来了:下面就 ...
- How to use QToolBar and QToolButton in Qt
http://developer.nokia.com/Community/Wiki/How_to_use_QToolBar_and_QToolButton_in_Qt How to use QTool ...
- UOJ283 直径拆除鸡
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Mine_目标
1. hibernate 有简单的方式 可以用于 DDL操作吗? “ DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE.ALTER ...
- 使用java代码打开特定网页
第一种方法的代码如下所示: import java.io.File; public class Test04 { public static void main(String[] args) { // ...
- JAVA设计模式初探之组合模式
先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性.” 就拿剪发办卡的事情来分析一下吧. 首先,一张卡可以在总部,分店, ...
- python argpase模块简单使用
python2.7 手册地址:https://docs.python.org/2/howto/argparse.html#id1 实现效果:脚本程序可以带参数 python arg.py -h 一.位 ...
- 5.3 Razor语法基础
以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...