【问题标题】:Youtube iframe not responding to clicks passed through image above with pointer-events: noneYoutube iframe 没有响应通过上图通过指针事件传递的点击:无
【发布时间】:2015-04-08 17:39:00
【问题描述】:

http://jsfiddle.net/aintnobody/0L1yumpe/

vs 上的相同代码

http://www.aintnobodymusic.com/monkey

问题:在小提琴上,一切正常。在所有情况下,上面的图像都会通过指针事件被忽略:无,并且点击会传递到下面的任何内容。我们可以通过底部两个的事件侦听器来判断这一点,并且由于前 4 个是 youtube iframe 嵌入,我们可以判断是因为点击开始了视频(这些是实时视频,顺便说一句,所以请务必点击中心或您可能会被带到 youtube)。

所以,一切都很好......直到我把它放在一个网站上。我在本地和托管环境中都尝试了四次,我总是得到相同的结果:底部的两个表现如预期,点击穿过图像到下面的 div。但是,如果上面的图片覆盖了 100% 的像素,则 iframe (youtube) 不会注册点击。即使只有一个像素被曝光,它也会按应有的方式点击通过。这就是为什么存在“短”集的原因。这些视频上方的图像比下方的视频窄一个像素。

然而,在 Firefox 中,100% 覆盖的视频不会触发。它在我迄今为止测试过的 Chrome 和 Safari 中运行良好,但在 Firefox 中却不行。

我在任何地方都找不到一个提到这个问题的地方。

我进行了一次又一次的测试,以缩小这里发生的情况。

这是 youtube 的问题吗?火狐的问题? iframe 问题?这可能与 iframe 上缺少源标签有关吗?也许我的文档头部与小提琴的配置有些不同?我在 codepen 上也尝试过类似的方法,它工作得很好(点击通过)......直到我把它放在一个网站上并使用 firefox。

编辑添加:刚刚在 codepen 上也做了简化的案例,点击在那里很好,但不是在我主持时:

http://codepen.io/oompaLoompa/pen/QwqRER

<iframe 
    class="video full jpgOverVideoFull"
    width="200" 
    height="150" 
    src="https://www.youtube.com/embed/DEzREJbln-o"
    frameborder="0" 
    allowfullscreen>
</iframe>

<div class="image full jpgOverVideoFull"
     style="background-image:url('http://images.nationalgeographic.com/wpf/media-live/photos/000/247/cache/proboscis-monkey-in-tree_24704_600x450.jpg');"
>jpg full vid</div>

<iframe 
    class="video full pngOverVideoFull"
    width="200" 
    height="150" 
    src="https://www.youtube.com/embed/DEzREJbln-o"
    frameborder="0" 
    allowfullscreen>
</iframe>

<div class="image full pngOverVideoFull"
    style="background-image:url('http://www.whaleoil.co.nz/wp-content/uploads/2012/05/monkey.png');"
>png full vid</div>

和css:

.video, .image, {
    height:150px;
    position: absolute;
    font-size:30px;
    color:#F2F;
    text-align: center;
}
.image {
    z-index:1;
    pointer-events: none;
    background-size: cover;
}

.jpgOverVideoFull {
    top:20px;
    left:20px;
}

.pngOverVideoFull {
    top:190px;
    left:20px;
}

.full {
    width:200px;
}

.short {
    width:199px;
}

【问题讨论】:

    标签: javascript jquery iframe youtube pointer-events


    【解决方案1】:

    由于没有其他人提供任何意见,因此我将尽我所能提供给您,希望它可能对其他人有所帮助,或者有人可能会从这里接过来并继续使用它。以下至少是一个解决方案,虽然我不会称之为解决方案:

    如果前面完全不透明,iframe 将不会触发。一个空白像素就可以了,或者一个不透明的图像。它与图像类型无关。可能是背景颜色。它是完全不透明的,并且覆盖了每个像素,指针事件:没有一个不起作用。

    所以,我找到的唯一解决方案是留下一小部分不覆盖(看起来很糟糕),或者制作半透明(额外处理)。由于到目前为止这似乎只是 Firefox 中的一个问题,因此我尝试使用 css of:

    opacity: 1;
    -moz-opacity: .9899;
    

    希望它在其他任何地方都呈现为完全不透明,但随后仅在 ff 中呈现半透明。不幸的是,我的版本高于需要前缀的版本,它采用无前缀版本并忽略前缀。

    (.9899 是因为它在 0.99 或更高的不透明度下不起作用,尽管我不确定有多少位是实际使用的或实际使用的)

    所以,因为我不希望它不是必须的半透明,所以我能想到的最好的(无需不必要地减慢其他浏览器的速度)是:

    @-moz-document url-prefix() {
        #elementId {
            -moz-opacity: .9899;
            opacity: .9899;
        }
    }
    

    它有效,但它让我畏缩。这让我想知道还有哪些其他浏览器怪癖可能是我尚未能够测试的,比如旧版 IT、Opera Mini 等。主要是,我不喜欢它,因为它不能回答更大的问题:为什么在带有指针事件的 yt iframe 上进行完全不透明的 div 点击:在每个小提琴、笔等中都没有,但随后不在现场点击(托管或本地)

    那里还有另一个可能更重要的区别。如果您对这可能是什么有任何线索,请插话。

    【讨论】:

    • Chrome 最近添加了这个相同的约束(我有一个多年来这样工作的视频)。现在我必须改变不透明度。因此,您现在也可以对所有浏览器执行此操作。如果发生这种情况时我碰巧找到了 chrome 更新,我会在这里发帖。
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 2011-04-07
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多