不透明度为 :0 (invisible) responds to mouse events 的 CSS3 元素

标签 css webkit

CSS3 在 Safari 中使用 Webkit;我有一个按钮,单击该按钮会导致一个 div 淡入。该 div 只是一个大的填充矩形,其中有几个按钮,其中一个按钮会使同一个 div 淡出。

问题是这样的:当元素淡出(不透明度:0),并且我单击其中一个按钮所在的位置时,onClick 仍在触发。换句话说,即使看不到按钮(不透明度:0),它仍然存在并且是事件模型的一部分。我不想要那个。

按钮调用以下函数:

//  This displays the overlay (popup)
function showCategoryPopup() {

 // Was playing with the following, but with no success.
 //  popupCategory.style.display = "block";
 //  popupCategory.style.visibility = "visible";

 // Change the attributes that will be animated.
 popupCategory.style.opacity = 1; 
 popupCategory.style.webkitTransform = "scale(1.0)";
}

function hideCategoryPopup() {
 // Change the animated attributes
 popupCategory.style.opacity = 0; 
 popupCategory.style.webkitTransform = "scale(0.7)"; 


// Even if opacity is 0, we still get mouse events.  So, make it hidden?
//    popupCategory.style.visibility = "hidden";
//    popupCategory.style.display = "none";     

叠加层的 CSS 类是这样的:

.popupContainer {
    opacity: 0;
    -webkit-transform: scale(0.7);
    -webkit-transition-duration: 0.3s;
    -webkit-transition-timing-function: ease-in-out;
    -webkit-transition-delay: initial;
}

如果我根本不使用可见性或显示设置,动画效果很好,但会为不可见元素触发 mouseClick 事件。

如果我使用积木,它会在没有动画的情况下打开/关闭。

如果我使用显示样式,那么它可以工作,但它不会立即显示动画,它只会在页面中的其他事件被触发时触发,就像页面其他地方的另一个按钮一样。

我想也许可以将“pointer-events:none”添加到弹出 div 隐藏后使用的样式,但我要求的似乎是你经常遇到的不透明度问题,所以它必须是半频问题。

想法?

最佳答案

针对您遇到的问题的干净(呃?)解决方案 - 这是工具提示和具有“淡入”效果的模式弹出窗口之类的常见问题 - 不仅是在不透明度之间转换,而且“可见性”属性。与'display'不同,'visibility'是一个实际的动画属性,它会做正确的事情,因为它只在转换开始之前和转换返回到之后才使元素不可见(并且对输入事件不响应)初始状态。

先前给出的答案确实有效,但依赖于 JavaScript 来操作可能不太理想的属性。通过纯 CSS 完成所有这些操作,您的 JavaScript 只需在需要显示的元素上设置和取消设置类即可。如果您正在创建工具提示,则可以通过将工具提示作为子元素并在父元素上使用“悬停”伪选择器来完全不使用任何 JS 来完成。

因此对于通过点击某物触发的弹出窗口,您可以这样设置它的样式:

#popup
{
  /* ...cosmetic styling, positioning etc... */

  -webkit-transition: all 0.2s ease-in-out 0s;
  -moz-transition: all 0.2s ease-in-out 0s;
  -ms-transition: all 0.2s ease-in-out 0s;
  transition: all 0.2s ease-in-out 0s;

  opacity: 0;
  visibility: hidden;
}

#popup.shown
{
  opacity: 1;
  visibility: visible;
}

然后您的 JavaScript 可以简单地切换“显示”类。

一个活生生的例子:http://jsfiddle.net/y33cR/2/

关于不透明度为 :0 (invisible) responds to mouse events 的 CSS3 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675916/

相关文章:

pygtk 界面中的 Javascript 界面?

cocoa - 为什么我的 WebView 不显示我指定的 URL?

css - Bootstrap 网格布局。空div

objective-c - 分层 Cocoa WebView - 在顶部绘图?

c - 如何设置 Gearmenu 的一个元素不敏感?

css - 如何覆盖 Angular Datatables 按钮的默认按钮样式

html - Webkit 转换改变 <p> 元素的宽度...为什么?

css - 未倾斜的 child 没有对齐

javascript - 用 Angular 交换类

html - 如何修复导航和全屏 div 之间的差距?