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

这种方法在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实现“跟随标题栏”的更多相关文章

  1. PyQt:无边框自定义标题栏及最大化最小化窗体大小调整

    环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...

  2. Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)

    1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验 ...

  3. c# 窗体相关操作(最大化/最小化/关闭/标题栏)

    /// <summary> /// 窗体跟随鼠标移动的标记 /// </summary> private bool normalmoving = false; /// < ...

  4. Unity3d学习 相机的跟随

    最近在写关于相机跟随的逻辑,其实最早接触相机跟随是在Unity官网的一个叫Roll-a-ball tutorial上,其中简单的涉及了关于相机如何跟随物体的移动而移动,如下代码: using Unit ...

  5. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  6. Android中通过ActionBar为标题栏添加搜索以及分享视窗

    在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...

  7. 【Win10 应用开发】自定义应用标题栏

    Win 10 app对窗口标题栏的自定义包括两个层面:一是只定义标题中各部分的颜色,如标题栏上文本的颜色.三个系统按钮(最大化,最小化,关闭)的背景颜色等:另一层是把窗口的可视区域直接扩展到标题栏上, ...

  8. WinForm拖动没有标题栏窗体的方法

    建立窗体的名称修改为:Form_HoverTree 文后附有源码下载. 主要代码: Point _HoverTreePosition; public Form_HoverTree() { Initia ...

  9. WPF 自定义标题栏 自定义菜单栏

    自定义标题栏 自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果.但是ListBox是不能设置默认选中状态的. 而我们需要一些复杂的UI效果,还是直接自定义控件来的快 GitHu ...

随机推荐

  1. 非root权限的linux用法添加工作路径

    修改~目录的bashrc文件: 1.cd 到~目录. 2.ls -a ,bashrc文件是隐藏的. 3.vim .bashrc;export PATH=$PAHT:要添加的工作路径. 4.source ...

  2. poj 3080 Blue Jeans【字符串处理+ 亮点是:字符串函数的使用】

    题目:http://poj.org/problem?id=3080 Sample Input 3 2 GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCA ...

  3. Windows 2012 系统汉化

    远程登录服务器 控制面板,选择“语言” (Windows 2012 自带的语言包 ) 此处需要等待 安装完成,选择中文 重启后 应该就不需要做其他的操作了

  4. 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 ...

  5. 安装mysql5.7后无法启动,/var/run/mysqld 目录每次重启后都需要手动去创建--终极解决方案

    鉴于很多童鞋反应,mysql5.7安装后出现无法启动,建立/var/run/mysqld 并赋权mysql用户解决了启动的问题,但是重启系统后又出现无法启动的问题,导致/var/run/mysqld ...

  6. 为什么可以Ping通IP地址,但Ping不通域名?

    能否ping通IP地址,与能否解析域名是两回事不能ping通IP地址,说明对方禁止ICMP报文或对方没有开机等解析域名只是将域名翻译成IP地址,不论该IP地址是否能够正常访问 问题是ping域名的时候 ...

  7. ZooKeeper-znode概念与使用

    可以将ZK看作一个具有高可用性特征的文件系统.这个文件系统中没有文件和目录,而是统一使用节点(znode)的概念,称为znode.znode既可以作为保存数据的容器(如同文件),也可以作为保存其他zn ...

  8. myEclipse 输入时英文自动变成2个字符大小

    比如这样: ——这是输入法的问题,输入法被误设为圆角了. 输入法有区分圆角半角,正常来说我们使用的都是半角. 那么如何切换半圆角? ——比如:百度输入法 首先,将半圆角的快捷键显示出来: ——点击“d ...

  9. ifconfig源代码分析

    一.ifconfig显示 [root@10g-host4 new]# ifconfig eth0 Link encap:Ethernet HWaddr 00:26:B9:4A:FC:EA inet a ...

  10. HDU 6096 AC自动机

    n个字符串 m个询问 每个询问给出前后缀 并且不重合 问有多少个满足 m挺大 如果在线只能考虑logn的算法 官方题解:对n个串分别存正序倒序 分别按照字典序sort 每一个串就可以被化作一个点 那么 ...