0

我正在尝试制作页面检查工具,其中:

  • 整个页面被阴影
  • 悬停的元素没有阴影。

与灯箱类型的应用程序(类似)不同,悬停的项目应保留在原处并且​​(理想情况下)不会重复。

最初,在查看图像灯箱实现时,我想在文档中附加一个叠加层,然后在悬停时提高元素的 z-index。然而,这种技术在这种情况下不起作用,因为覆盖会阻止额外的鼠标悬停:

$(function() {
    window.alert('started');
    $('<div id="overlay" />').hide().appendTo('body').fadeIn('slow');


    $("p").hover(
        function () {
            $(this).css( {"z-index":5} );
        }, 
        function () {
            $(this).css( {"z-index":0} );
        }
    );

或者,JQueryTools 有一个“暴露”和“掩码”工具,我用下面的代码尝试过:

$(function() {
    $("a").click(function() {
         alert("Hello world!");
    });

    // Mask whole page
    $(document).mask("#222");

    // Mask and expose on however / unhover 
    $("p").hover(
        function () {
            $(this).expose();
        }, 
        function () {
            $(this).mask();
        }
    );

}); 

除非我禁用初始页面屏蔽,否则悬停不起作用。关于如何最好地实现这一点的任何想法,使用普通的 JQuery、JQuery 工具公开或其他一些技术?谢谢!

4

2 回答 2

2

您可以做的是制作元素的副本并将其重新插入覆盖层之外的 DOM(具有更高的 z-index)。你需要计算它的位置才能这样做,但这并不难。

这是一个工作示例

在写这篇文章时,我重新了解了一个事实,即不透明度为零的东西不能触发事件。因此您不能使用 .fade(),您必须专门将不透明度设置为非零但非常小的数字。

$(document).ready(function() { init() })

function init() {
    $('.overlay').show()
    $('.available').each(function() {
       var newDiv = $('<div>').appendTo('body');
       var myPos = $(this).position()  
       newDiv.addClass('available')
       newDiv.addClass('peek')
       newDiv.addClass('demoBorder')                
       newDiv.css('top',myPos.top+'px')
       newDiv.css('left',myPos.left+'px')
       newDiv.css('height',$(this).height()+'px')
       newDiv.css('width',$(this).width()+'px')  
       newDiv.hover(function()
          {newDiv.addClass('full');newDiv.stop();newDiv.fadeTo('fast',.9)},function()
          {newDiv.removeClass('full');newDiv.fadeTo('fast',.1)})   
    })  
}
于 2011-01-13T18:07:26.480 回答
1

对不起原型语法,但这可能会给你一个好主意。

function overlay() {
  var div = document.createElement('div');
  div.setStyle({
    position: "absolute",
    left: "0px",
    right: "0px",
    top: "0px",
    bottom: "0px",
    backgroundColor: "#000000",
    opacity: "0.2",
    zIndex: "20"
  })
  div.setAttribute('id','over');
  $('body').insert(div);
}

$(document).observe('mousemove', function(e) {
  var left = e.clientX,
      top = e.clientY,
      ele = document.elementFromPoint(left,top);
      //from here you can create that empty div and insert this element in there
})

overlay();
于 2011-01-13T18:33:58.300 回答