Javascript 有洞的高效HTML Div
让我再解释一点,我正试图有一个大面积(全屏)和一个固定大小的洞在它。这个洞将跟随鼠标在屏幕上移动。想象一下,将一个作用域集中在页面上,页面的其余部分变灰 我需要这在所有浏览器(包括IE 6)有效地工作 我当前的解决方案使用4个div(上、右、下、左)并以这种方式形成孔。然而,这需要重新绘制整个屏幕,并显示工件(div有背景图像以灰显该区域) 是否有更好(更有效)的方法来实现这一点,任何人都可能会遇到Javascript 有洞的高效HTML Div,javascript,html,Javascript,Html,让我再解释一点,我正试图有一个大面积(全屏)和一个固定大小的洞在它。这个洞将跟随鼠标在屏幕上移动。想象一下,将一个作用域集中在页面上,页面的其余部分变灰 我需要这在所有浏览器(包括IE 6)有效地工作 我当前的解决方案使用4个div(上、右、下、左)并以这种方式形成孔。然而,这需要重新绘制整个屏幕,并显示工件(div有背景图像以灰显该区域) 是否有更好(更有效)的方法来实现这一点,任何人都可能会遇到 注意:孔必须将所有事件传递到这些div下面的元素。您可能需要使用画布标记,它可以使用excanv
注意:孔必须将所有事件传递到这些div下面的元素。您可能需要使用
画布
标记,它可以使用excanvas在IE上工作,然后将文本放在画布标记内。它可以对事件做出反应,因为它基本上是一个html元素。我建议使用一个部分不透明的div。它有透明的背景,但有黑色的边框。当鼠标移动时,调整边框的厚度。因为它是部分不透明的(比如说50%),被边框覆盖的部分看起来会变灰。请记住,边框可以任意粗细,甚至可以是数百像素。这样,您根本不需要使用图像,也不需要修改DOM,只需更改单个div的样式属性即可
编辑:刚刚注意到允许鼠标事件通过的要求。我相信单div解决方案在这里失败了。需要使用四个div的解决方案。但是,这仍然可以通过使用黑色、半透明的div(而不是背景图像)来实现。然后可以调整它们的大小(通过动态更改
样式
对象),而不是删除和重新创建(不确定这是否是OP所说的“重新绘制”的意思)。不幸的是,DOM的设计不允许事件“通过”一个块到它下面的任何对象。这就是为什么允许拖放的工具包(mootools、jquery等)如此复杂的原因。它们预先计算所有“可拖放”元素的位置,并对与onmousemove事件关联的拖动对象与可拖放对象的坐标进行大量比较。这是一种绕过限制的方法,你可以探索。找出您想要对“窗口”做出反应的元素,并进行坐标比较,等等
我见过一些局部解决方案,包括将拖动的元素从鼠标指针上偏移,这样指针就可以“清除”,并且可以正确地触发事件,但这很可能会破坏您想要的窗口效果
最有可能的是你被困在那四个沙发上。他们必须有背景图像吗?你不是候选人吗
- 拥有4个div并调整其大小似乎是最快的方法
- 移动4个div速度慢4倍
- 移动1个容器分区和4个内部分区一样慢(比调整大小慢4倍)
- 使用背景图像是IE支持的唯一选项(因为不透明度过滤器(alpha)对于整个页面大小div来说太慢)
- 背景图像必须为纯色(即1px纯色,半不透明)。尝试获得纯色/半透明颜色以实现模糊将导致屏幕重绘瑕疵(即使在不调整大小/移动时)div