`
yiminghe
  • 浏览: 1460173 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

visual rect computation of element

阅读更多

元素的可视矩阵(区域)计算

 

  元素常常需要展现在用户的可视区域内,而元素是否出现在用户的可视区域实际上受以下因素的限制(目前已知,待补充) :

 

  1. 窗口 ( viewport ) 限制,随浏览器滚动条变化
  2. 自身是否使用了脱离文档流的定位 ( absolute fixed )
  3. 父(祖先)元素是否定位
  4. 父(祖先)元素包括祖先元素是否设置了 overflow != visible ,限制了子孙元素的展现

   我想要做的事情就是根据以上因素,确定可供元素展现的可视矩阵,后期再通过移动或缩放尽量智能得将元素放在这个矩阵内.

 

 

例如:

 

 

A 为窗口 ,B 为 overflow:hidden position:static 的处于 A 内的容器,C 为 overflow:auto position:static 的处于 B 内的容器,那么 c 中 position:static 元素的可视矩阵只能为三者交叉的折线处,但如果考虑 c 中 position:absolute 的元素或者如果 c 本身为 overflow:visible ,则情况又有所不同.

  1. 对于 c 中 position:absolute 的元素,可视矩阵不受 b c 影响,直接为当前窗口 viewport,随浏览器滚动条变化而变化.
  2. 如果 c 为 overflow:visible 则 c 中 position:static 元素的可视矩阵和 c 无关 ,实际为 A,B 相交

 

实现:

 

a. 找到可以限制该元素的父(祖先元素),起先想用 offsetParent (msdn , mdc ),但由于需要考虑 overflow 以及ie下的不兼容,放弃!

 

  1. 当前元素脱离了文档流,则找祖先定位并设置了 overflow!=visible 的元素
  2. 如果元素为 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
分享到:
评论

相关推荐

    skyblue_Rect.rar_visual c_经典游戏

    本项目名为"skyblue_Rect.rar",显然是一个基于Visual C++实现的经典游戏——俄罗斯方块。俄罗斯方块是一款历史悠久且广受欢迎的休闲益智游戏,通过控制各种形状的方块下落并消除完整行来得分。 在描述中提到,"sky...

    skyblue_Rect.rar_visual c

    本篇文章将围绕"skyblue_Rect.rar"这个压缩包文件,深入探讨如何使用Visual C++这一强大的集成开发环境来实现俄罗斯方块游戏的源代码。该压缩包包含了一个名为"skyblue_Rect"的源代码文件以及一个"www.pudn.com.txt"...

    Unity 插件:Simple UI - Scroll View Extensions v1.0

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

    rectbox_rectbox_decidevm6_matlab矩形绘图_绘图_matlab_

    标题提到的"rectbox_rectbox_decidevm6_matlab矩形绘图_绘图_matlab_"是关于如何在MATLAB中自定义绘制矩形的专题。描述中指出,MATLAB内置的`annotation`函数虽然强大,但不直接支持通过指定矩形的精确x、y坐标来...

    Rect类的使用

    在计算机编程,尤其是在图形处理和游戏开发领域,`Rect` 类是一个常见的概念,它通常用于表示二维空间中的一个矩形区域。在许多编程语言和库中,如C++的`SDL`库、Python的`pygame`库或者Unity引擎中,都有`Rect`类的...

    Recton v2.0

    "Recton v2.0" 是一款专为IT行业设计的远程管理和监控工具,它集成了多种功能,旨在提升用户对远程设备的控制能力。在描述中提到的“种植”可能是指软件的安装和配置过程,暗示Recton具有便捷的远程部署特性。以下是...

    一维rect函数的matlab程序

    一维rect函数的matlab程序 可以为初学者提供一定的参考

    Recton V2.5(远程控制)

    Recton V2.5是一款远程控制软件,它允许用户通过网络连接远程操作另一台计算机,实现设备间的跨距离协作和管理。在IT行业中,远程控制技术具有广泛的应用,包括技术支持、远程办公、系统管理等场景。 远程控制软件...

    GDI+丰富RECT

    标题中的“GDI+丰富RECT”指的是在Windows编程中,使用GDI+图形设备接口(Graphics Device Interface Plus)扩展和操作RECT结构的过程。GDI+是Microsoft为Windows应用程序提供的一种强大的2D图形处理库,它提供了比...

    前端开源库-rect-clamp

    "rect-clamp"就是这样一款专为前端开发者设计的开源库,它主要用于矩形约束,确保一个矩形在变换时仍能保持其原始比例,并将其限制在一个指定的矩形区域内。 该库的核心功能是对矩形进行"夹钳"操作,即在不失真的...

    Recton2.5远控

    "Recton2.5远控"是一款远程控制软件,它允许用户通过网络对另一台计算机进行操作和管理。远程控制软件在IT行业中有着广泛的应用,例如远程技术支持、远程办公、远程教育等场景。Recton v2.5作为该软件的一个版本,...

    前端开源库-rect-crop

    **前端开源库 rect-crop 知识点详解** 在当今的Web开发中,前端技术日新月异,各种开源库层出不穷,为开发者提供了极大的便利。其中,“rect-crop”是一个专注于矩形裁剪的前端开源库,它允许用户在视区中按照特定...

    Recton2 和Ntscan

    Recton2 Ntscan Recton2 Ntscan

    IntRect.rar_intrect

    在本压缩包"IntRect.rar_intrect"中,我们关注的是一个名为"IntRect"的特定模块,它是QT库在处理矩形整数坐标时的一个工具。下面我们将深入探讨这个"IntRect"类及其在QT中的应用。 "IntRect"通常代表一个矩形区域,...

    recton3.0.rar

    "recton3.0.rar" 是一个压缩包文件,很可能包含了一个名为 "recton3.0" 的软件的安装程序或文件集合。由于描述中提到“自己下载一个软件 自己下载”,这暗示了该文件可能是用户为了个人使用而分享的一个软件版本,...

    rect_test.zip_it_rect matlab_rect function

    It is just exerciseing of signal processing. ( Rect function, Convolution, etc. ) ( making tri-functioin(: rect * rect) and performing FFT ),

    skyblue_Rect.zip_visual c_俄罗斯方块 MFC

    《基于Visual C++ MFC实现的俄罗斯方块游戏详解》 在编程领域,经典游戏“俄罗斯方块”常被用作教学示例,因为它简洁的规则和可编程性使其成为学习新语言或框架的理想选择。本篇文章将深入探讨如何使用Microsoft的...

    知识共享-Android_开发Rect(雷惊风).

    ### Android开发中的Rect应用详解 #### 一、引言 在Android开发中,绘图是一项基本且重要的功能。本文将详细介绍如何使用`Rect`类在Android应用中进行绘图操作,包括绘制实心矩形、空心矩形、文本以及图片等元素。...

    矩形Rect类的实现

    在Java编程语言中,矩形(Rect)类通常用于表示二维空间中的矩形区域。它包含四个关键属性:左上角的x坐标、左上角的y坐标、宽度和高度。这些属性共同定义了一个矩形的边界。让我们深入探讨如何在Java中实现一个基本...

Global site tag (gtag.js) - Google Analytics