元素的可视矩阵(区域)计算
元素常常需要展现在用户的可视区域内,而元素是否出现在用户的可视区域实际上受以下因素的限制(目前已知,待补充) :
- 窗口 ( viewport
) 限制,随浏览器滚动条变化
- 自身是否使用了脱离文档流的定位 ( absolute fixed
)
- 父(祖先)元素是否定位
- 父(祖先)元素包括祖先元素是否设置了 overflow != visible
,限制了子孙元素的展现
我想要做的事情就是根据以上因素,确定可供元素展现的可视矩阵,后期再通过移动或缩放尽量智能得将元素放在这个矩阵内.
例如:
A 为窗口 ,B 为 overflow:hidden position:static 的处于 A 内的容器,C 为 overflow:auto position:static 的处于 B 内的容器,那么 c 中 position:static 元素的可视矩阵只能为三者交叉的折线处,但如果考虑 c 中 position:absolute 的元素或者如果 c 本身为 overflow:visible ,则情况又有所不同.
- 对于 c 中 position:absolute 的元素,可视矩阵不受 b c 影响,直接为当前窗口 viewport,随浏览器滚动条变化而变化.
- 如果 c 为 overflow:visible 则 c 中 position:static 元素的可视矩阵和 c 无关 ,实际为 A,B 相交
实现:
a. 找到可以限制该元素的父(祖先元素),起先想用 offsetParent (msdn
, mdc
),但由于需要考虑 overflow 以及ie下的不兼容,放弃!
- 当前元素脱离了文档流,则找祖先定位并设置了 overflow!=visible 的元素
- 如果元素为 static,则找到设置了 overflow!=visible 的祖先元素
b. 通过 a 找到可以限制自己的一个祖先元素后,限定范围为目前祖先元素的当前的可视区域 (top
,left,clientWidth
,clientHeight),如果祖先元素直接为 body 或找不到则限定范围为浏览器 viewport 并结束.
c. 重复 a ,通过求交集进一步限定范围
d. 最后再次对浏览器 viewport 求交集
demo:
visual rect computation @ google code
可以滚动浏览器,点击文档获得焦点后,按键 1 到 6 来高亮对应 1 - 6 元素的可视矩阵.
- 大小: 9.3 KB
分享到:
相关推荐
• Focus the Scroll Rect on any element within the Scroll Rect • Great control over snapping (animation, inertia etc.) • Extensible system for animating elements that are moving into or out of focus...
一维rect函数的matlab程序 可以为初学者提供一定的参考
matlab自带的annotation函数不能通过指定矩形的x、y坐标来绘图。自己写的这个rectbox函数补充这个功能:rectbox(x y w h)其中xy是左下角点的坐标,wh是宽高。
这个demo主要介绍了Rect类的使用希望能够帮助需要的同学!
Recton2 Ntscan Recton2 Ntscan
使用GDI+和C++丰富RECT
Recton V2.5(远程控制)
It is just exerciseing of signal processing. ( Rect function, Convolution, etc. ) ( making tri-functioin(: rect * rect) and performing FFT ),
Recton 可以开远程 种植都可以 要的去下载哦
refrect8.0反编译工具
前端开源库-rect-mix矩形混合,插入2个矩形
俄罗斯方块,visualC++经典游戏设计
ProtobufTool_Rect
Recton--D贺免杀专用版 用了就知道
前端开源库-rect-clamp矩形夹钳,通过保持比例将一个矩形约束成另一个矩形。
俄罗斯方块 源代码 大家可以参考学习一下……
矩形Rect类的实现
前端开源库-rect-crop矩形裁剪,在视区中裁剪一个尺寸:从缩放比例和中心点计算一个矩形,同时保留尺寸比例。
要你有一远程主机的管理员密码,并且...你就可以通过这个小程序远程开3389,远程开/关telnet,远程运行CMD命令,远程清除所有日志, 远程重启、查/杀进程、查看/启动/停止服务、查看/创建共享等.不依赖远程主机的IPC是否开放
Recton v2.6免杀加强版 局域网在获得用户名密码的前提下,可以进行开启telnet,进程,种植等