绝对定位的层判断是否有相互覆盖的解决算法
来源:互联网 发布:精业本草中医堂淘宝店 编辑:程序博客网 时间:2024/06/03 16:18
这个算法我在上篇博文《jQuery 模拟 ubuntu 3D desktop 的 Dodge Effect 效果》中有提到过。
但那时想法过于简单,当时的解决思路是只要层的一个角的坐标处于另一个层的所在区域,则窗口就会有覆盖。这一点没有错,但还有一些特殊情况。比如:
// _______ _______ _____// ___| | | |___ _| |___// | | | | | | | | | |// |___| | | |___| |_| |___|// |_______| |_______| |_____|// _____ ___________ _____// __|_____|__ | | _|_____|___// | | | | | |// | | |___________| |___________|// |___________| |_____| |_____|
下面的代码需要配合上篇文章的代码看,我只提供核心的判断代码了
// 常规情况,只要有一个角处于区域内,则可以判断窗口有覆盖// _______ _______ _______ _______// | ___|___ ___| | ___|___ | | |___// | | | | | | | | | | | |// |___| | | |_______| | |___| |_______| |// |_______| |_______| |_______| |_______|if((thisStartX >= baseStartX && thisStartX <= baseEndX && thisStartY >= baseStartY && thisStartY <= baseEndY)||(thisStartX >= baseStartX && thisStartX <= baseEndX && thisEndY >= baseStartY && thisEndY <= baseEndY)||(thisEndX >= baseStartX && thisEndX <= baseEndX && thisStartY >= baseStartY && thisStartY <= baseEndY)||(thisEndX >= baseStartX && thisEndX <= baseEndX && thisEndY >= baseStartY && thisEndY <= baseEndY)){flag = true;}// 非常规情况// _______ _______ _____// ___| | | |___ _| |___// | | | | | | | | | |// |___| | | |___| |_| |___|// |_______| |_______| |_____|if((thisStartX >= baseStartX && thisStartX <= baseEndX && thisStartY < baseStartY && thisEndY > baseEndY)||(thisEndX >= baseStartX && thisEndX <= baseEndX && thisStartY < baseStartY && thisEndY > baseEndY)){flag = true;}// _____ ___________ _____// __|_____|__ | | _|_____|___// | | | | | |// | | |___________| |___________|// |___________| |_____| |_____|if((thisStartY >= baseStartY && thisStartY <= baseEndY && thisStartX < baseStartX && thisEndX > baseEndX)||(thisEndY >= baseStartY && thisEndY <= baseEndY && thisStartX < baseStartX && thisEndX > baseEndX)){flag = true;}
至于还有两种情况,就是两个角处于区域内和四个角都在低层的区域内,这两种情况都必须满足第一个条件,就是一个角处于区域内,所以不用再次判断。
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 绝对定位的层判断是否有相互覆盖的解决算法
- 层的绝对定位
- position 定位相互覆盖的问题
- 解决绝对定位层(position:absolute;)上无法触发滚动事件的问题
- 解决绝对定位居中的问题
- DIV CSS层内层的绝对和相对定位案例
- 绝对定位的div层,别再让flash盖住了
- JS弹出层单纯的绝对定位居中
- 判断一个单向链表是否有环路的算法
- 算法--判断字符数组中是否有相等的字符
- div 绝对定位覆盖
- 使用CRgn::CombineRgn判断两个区域是否有共同的覆盖区域
- 绝对定位的特点
- css的绝对定位
- 判断是否开启定位服务的方法
- ios 定位是否可用的判断
- 解决图层的精确定位问题
- 关于在ie6下相邻的浮动层与绝对定位层不显示的问题
- (转载)cocos2d-X学习之主要类介绍:节点CCNode
- usb
- 7.3.1: 理解依赖注入
- netstat -ano|findstr 5037
- CentOS之SSH安装与配置
- 绝对定位的层判断是否有相互覆盖的解决算法
- 菜鸟看TLD之一:为什么要研究TLD
- 规约的力量
- Windows的内存管理
- POJ 1663 Number Steps
- 题目1126:打印极值点下标
- 编译android平台上的webrtc-chromium
- 时间复杂度
- Hashtable