zoukankan      html  css  js  c++  java
  • 让层遮挡select(ie6下的问题)

    虽然现在很多比较大的网站已经不考虑ie6了,不过这些方法,或者其中原理还是值得记录下来的。所以整理的时候,把这篇文章留下了。

    <script language="javascript">

    var ie55up = IsIE55Up();
    var overIframe = null;

    function DivOver(objID)
    {
    var obj = document.all[objID];
    // 只有IE5.5以上Iframe的z-index才有效
    if (ie55up)
    {
    if (overIframe == null)
    {
    overIframe = document.createElement("<iframe src='about:blank' style='position:absolute;left:0;top:0;z-index:998;display:none' scrolling='no' frameborder='0'></iframe>");
    }
    document.body.insertAdjacentElement("beforeEnd",overIframe);
    with(overIframe.style)
    {
    top = obj.style.top;
    left = obj.style.left;
    width = obj.offsetWidth;
    height = obj.offsetHeight;
    display = 'block';
    }
    obj.style.zIndex = "999";
    }
    else // 隐藏被ID为objID的对象(层)遮挡的所有select
    {
    var sels = document.getElementsByTagName_r('select');
    for (var i = 0; i < sels.length; i++)
      if (Obj1OverObj2(document.all[objID], sels))
    sels.style.visibility = 'hidden';          
    }
    }

    //判断obj1是否遮挡了obj2
    function Obj1OverObj2(obj1, obj2)
    {
      var pos1 = getPosition(obj1)
      var pos2 = getPosition(obj2)
      var result = true;
      var obj1Left = pos1.left - window.document.body.scrollLeft;
      var obj1Top = pos1.top - window.document.body.scrollTop;
      var obj1Right = obj1Left + obj1.offsetWidth;
      var obj1Bottom = obj1Top + obj1.offsetHeight;
      var obj2Left = pos2.left - window.document.body.scrollLeft;
      var obj2Top = pos2.top - window.document.body.scrollTop;
      var obj2Right = obj2Left + obj2.offsetWidth;
      var obj2Bottom = obj2Top + obj2.offsetHeight;
      
      if (obj1Right <= obj2Left || obj1Bottom <= obj2Top ||
          obj1Left >= obj2Right || obj1Top >= obj2Bottom)
        result = false;
      return result;
    }

    // 获取对象的坐标
    function getPosition(Obj)
    {
    for (var sumTop=0,sumLeft=0;Obj!=window.document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft, Obj=Obj.offsetParent);
    return {left:sumLeft,top:sumTop}
    }

    // 是否IE5.5以上版本
    function IsIE55Up () {
    var agt = navigator.userAgent.toLowerCase();
    var isIE = (agt.indexOf("msie")!=-1);
    if (isIE)
    {
    var stIEVer = agt.substring(agt.indexOf("msie ") + 5);
    var verIEFull = parseFloat(stIEVer);
    return verIEFull >= 5.5;
    }
    return false;
    }
    </script>
    <script>
        window.onload = function(){DivOver("div1")}
    </script>

    <div style="position: absolute;left:10px;top:20px;200px;height:85px;border:1px solid red;" id="div1">
    看看现在这个层下面的select不是简单的隐藏了:)
    </div>
    <select name="">
    <option>test1</option>
    <option>test2</option>
    <option>test3</option>
    </select>

    <select name="">
    <option>test1test1test1test1test1test1test1test1test1test1test1test1test1test1</option>
    <option>test2</option>
    <option>test3</option>
    </select>

    <select name="">
    <option>test1</option>
    <option>test2</option>
    <option>test3</option>
    </select>


    最后自己先点评下:
    上面的方法可以解决这个问题。不过有时也会只出现ifram白块,但要显示的东西没有出来这时你要修改“overIframe = document.createElement("<iframe src='about:blank' style='position:absolute;left:0;top:0;z-index:998;display:none' scrolling='no' frameborder='0'></iframe>");”为“overIframe = document.createElement("<iframe src='about:blank' style='position:absolute;left:0;top:0;display:none' scrolling='no' frameborder='0'></iframe>");”,就是去掉其中的“z-index:998;”,然后后面的“obj.style.zIndex = "999";”也可以不要,不过最好还是按上面的写。
    希望可以帮大家解决问题。

  • 相关阅读:
    eclipse控制台出现中文乱码的问题
    运行jar包
    [MongoDB]------windos下的安装部署与基础使用
    SQLMap-----初识
    序言(第一次写随笔,怎么才能装成经常写的样子呢)
    php7.4编译(centos)
    NGINX 2
    NGINX 1
    LVS的DR模式与NET模式的负载均衡实验
    命令在线查询
  • 原文地址:https://www.cnblogs.com/wayne173/p/3745941.html
Copyright © 2011-2022 走看看