在另一个iframe上叠加iframe

时间:2015-04-03 11:50:02

标签: javascript html iframe video overlay

我有一个javascript代码,使用鼠标指针移动iframe。 当我将鼠标滑过另一个iframe(e.x youtube嵌入视频)时,当鼠标指针位于youtube视频上时,iframe不会随鼠标移动。

可以做些什么?感谢

<script type="text/javascript">
var opacity = 1;
var time = 3500000;
if (document.cookie.indexOf('visited=true') == -1) {
    (function openColorBox() {
        if ((document.getElementById) && window.addEventListener || window.attachEvent) {
            var hairCol = "#ff0000";
            var d = document;
            var my = -10;
            var mx = -10;
            var r;
            var vert = "";
            var idx = document.getElementsByTagName('div').length;
            var thehairs = "<iframe id='theiframe' scrolling='no' frameBorder='0' allowTransparency='true' src='b.html' style='margin: px 0px 0px px; position:fixed;width:200px;height:200px;overflow:hidden;border:0;opacity:" + opacity + ";filter:alpha(opacity=" + opacity * 100 + ");'></iframe>";
            document.write(thehairs);
            var like = document.getElementById("theiframe");
            document.getElementsByTagName('body')[0].appendChild(like);
            var pix = "px";
            var domWw = (typeof window.innerWidth == "number");
            var domSy = (typeof window.pageYOffset == "number");
            if (domWw) r = window;
            else {
                if (d.documentElement && typeof d.documentElement.clientWidth == "number" && d.documentElement.clientWidth != 0) r = d.documentElement;
                else {
                    if (d.body && typeof d.body.clientWidth == "number") r = d.body
                }
            }
            if (time != 0) {
                setTimeout(function() {
                    document.getElementsByTagName('body')[0].removeChild(like);
                    if (window.addEventListener) {
                        document.removeEventListener("mousemove", mouse, false)
                    } else if (window.attachEvent) {
                        document.detachEvent("onmousemove", mouse)
                    }
                }, time)
            }

            function scrl(yx) {
                var y, x;
                if (domSy) {
                    y = r.pageYOffset;
                    x = r.pageXOffset
                } else {
                    y = r.scrollTop;
                    x = r.scrollLeft
                }
                return (yx == 0) ? y : x
            }

            function mouse(e) {
                var msy = (domSy) ? window.pageYOffset : 0;
                if (!e) e = window.event;
                if (typeof e.pageY == 'number') {
                    my = e.pageY - 0 - msy;
                    mx = e.pageX - 0
                } else {
                    my = e.clientY - 6 - msy;
                    mx = e.clientX - 6
                }
                vert.top = my + scrl(0) + pix;
                vert.left = mx + pix
            }

            function ani() {
                vert.top = my + scrl(0) + pix;
                setTimeout(ani, 300)
            }

            function init() {
                vert = document.getElementById("theiframe").style;
                ani()
            }
            if (window.addEventListener) {
                window.addEventListener("load", init, false);
                document.addEventListener("mousemove", mouse, false)
            } else if (window.attachEvent) {
                window.attachEvent("onload", init);
                document.attachEvent("onmousemove", mouse)
            }
        }
    })();
    var oneDay = 1000 * 60 * 30;
    var expires = new Date((new Date()).valueOf() + oneDay);
    document.cookie = "visited=true;expires=" + expires.toUTCString()
}
</script>

<iframe width="420" height="315" src="https://www.youtube.com/embed/sTesehdHbqs" style="display:block; position:static;"frameborder="0" allowfullscreen></iframe>

1 个答案:

答案 0 :(得分:0)

如果没有看到您的HTML,最好的猜测是:您无法做到这一点。问题是,一旦将鼠标移动到原点与页面不同的iframe,鼠标事件就不会激活到您的脚本,因此您将无法更新iframe的位置。演示:注意在iframe中移动鼠标指针后鼠标坐标如何停止更新。

function mouseMoveListener() {
  var outputX = document.querySelector('#mouseX');
  var outputY = document.querySelector('#mouseY');
  return function(ev) {
    outputX.innerText = ev.clientX;
    outputY.innerText = ev.clientY;
  };
}

function test(ev) {console.log('ev::', ev.clientX);}

document.addEventListener('mousemove', mouseMoveListener());
    <div>Mouse position:
      <span id="mouseX"></span>
      ,
      <span id="mouseY"></span>
    </div>

    
    <iframe src="http://www.example.com" width="200" height="200"></iframe>

如果您不需要让用户与iframe的内容进行互动,则可以通过在iframe顶部覆盖透明div来欺骗这一点。这可以防止鼠标事件“掉进”到它们下方的iframe,同时仍然显示iframe的内容。演示:但请注意,iframe不允许滚动,因为叠加div会捕获鼠标事件(如滚动条或滚轮事件上的点击)。

function mouseMoveListener() {
  var outputX = document.querySelector('#mouseX');
  var outputY = document.querySelector('#mouseY');
  return function(ev) {
    outputX.innerText = ev.clientX;
    outputY.innerText = ev.clientY;
  };
}

function test(ev) {console.log('ev::', ev.clientX);}

document.addEventListener('mousemove', mouseMoveListener());
#iframe-wrapper {
  position: relative;
}

#iframe-wrapper iframe {
  position: relative;
  z-index: 0;
}

#iframe-wrapper .overlay {
  position: absolute;
  background: transparent;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  z-index: 2;
}
<div>Mouse position:
  <span id="mouseX"></span>
  ,
  <span id="mouseY"></span>
</div>

<div id="iframe-wrapper">
  <iframe src="http://www.example.com" width="200" height="200"></iframe>
  <div class="overlay"></div>
</div>

但是,如果您要显示YouTube视频,则不太可能满足您的要求,因为用户互动是观看体验的关键部分。