让我再解释一下,我想要一个大面积(全屏),其中有一个固定大小的洞。孔将跟随屏幕周围的鼠标。考虑将范围集中在页面上,页面的其余部分显示为灰色。
我需要在所有浏览器中有效地工作(包括IE 6)。
我目前的解决方案使用4个div(顶部,右侧,底部,左侧)并以此方式形成孔。然而,这需要重新绘制整个屏幕并显示伪影(div具有背景图像以使该区域变灰)。
是否有更好(更有效)的方法来实现这一点,任何人都可能遇到过?
注意:洞必须将所有事件传递到这些div下面的元素。
答案 0 :(得分:9)
我建议使用一个部分不透明的div。它有透明的背景,但黑色边框。当鼠标移动时,调整边框的粗细。因为它部分不透明(比如说50%),边框覆盖的部分看起来会变灰。请记住,边框可以像你想要的那样厚 - 甚至几百个像素。这样您就不需要使用图像,也不需要修改DOM - 只需更改单个div的样式属性即可。
编辑:刚刚注意到要让鼠标事件通过的要求。我相信单一div解决方案在这里失败了。需要使用四格解决方案。但是,这仍然可以通过使用黑色,半透明的div(而不是背景图像)来完成。然后可以调整它们的大小(通过动态更改style
对象),而不是删除和重新创建(不确定这是OP通过“重新绘制”的意思)。
答案 1 :(得分:2)
答案 2 :(得分:1)
结论:
答案 3 :(得分:0)
您可能希望使用canvas
标记,该标记可以使用excanvas http://excanvas.sourceforge.net/在IE上工作,然后您可以将文本放在canvas标记内。它可以对事件做出反应,因为它基本上是一个html元素。
答案 4 :(得分:0)
不幸的是,DOM的设计不允许事件“通过”一个块到它下面的任何东西。这就是为什么允许拖放(mootools,jquery等等)的工具包如此复杂。它们预先计算所有“可放置”元素的位置,并对拖动对象的坐标进行质量比较。 droppable对象,绑定到onmousemove事件。这是你可以探索的限制的一种方式。找出你想对“窗口”做出反应的元素,并进行坐标比较等......
我见过部分解决方案涉及从鼠标指针偏移拖动的元素,以便指针“清除”并可以正确触发事件,但这很可能会破坏你想要的窗口效果。
大多数人都喜欢拖着这4个div。他们必须有背景图像吗? CSS不透明度不是候选人?