• 判定浏览器是否支持原生透明


    原生透明判定是浏览器特征侦探的重要一环,之后的许多特效就靠它选择是原生透明还是滤镜透明。自从IE9决定支持原生透明后,此判定复杂多了,jQuery对于它的判定隐含深意。下面是jQuery1.42的代码:

         div.innerHTML = "   <a href='/a' style='float:left;opacity:.25;'>a</a>";
          // Make sure that element opacity exists
          // (IE uses filter instead)
          // Use a regex to work around a WebKit issue. See #5145
          // http://dev.jquery.com/ticket/5145
          opacity: /^0.55$/.test( a.style.opacity ),
    

    先不提IE8,IE7,IE6它们,肯定返回false。jQuery它为何选择如此特别的一个数字作为透明度呢?原先在jQuery1.32中,opacity是设为.5的,但发现firefox会错误地返回"0,5","0.5"不等于"0,5",因此出错。而为何使用正则表达式,我想这应该另有考量,但jQuery的类库作者们通常很少泄漏这些天机。

    原因可能大部分来自新出的IE9技术预览版,由于缺少测试平台,下面的结论都是来自外国的:

    • IE之外的标准浏览器的opacity的类型为String,这是正确的,因为DOM的特性都该如此。
    • IE8等版本的opacity的类型是不确定,由代入值的类型确定,换言之,el.style.opacity = "0.5",那么类型为String,如果el.style.opacity = 0.5 ,那么类型为Number。
    • IE9最新预览版的opacity的类型为Number。
    • 当el.style.cssText = "opacity:.25"之时,IE8直接返回 ".25" ,而IE9pp2返回0.25。

    最后赠送一个重要的信息:

    0.25转换为二进制时非无限循环小数,因此在各平如一致,其他符合此条件的数值也可行。但像0.5,它在Opera9.2x中就会判定失败,因为会返回“0.50”。

    因此我的判定如下:

          div.innerHTML = "   <a href='/a' style='float:left;opacity:.25;'>a</a>";
          //IE8返回 ".25" ,IE9pp2返回0.25,chrome等返回"0.25"
          w3cOpacity: a.style.opacity == "0.25",
    
  • 相关阅读:
    linux内核启动分析(2)
    linux内核启动分析
    U-Boot启动过程完全分析<转>
    linux网桥浅析
    centeros --- dockerfile
    centeros--- docker 操作命令
    java SSM项目搭建-- The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone
    java 环境配置 -- url is not registered
    java 环境配置 -- 配置Tomcat
    java 环境配置--破解IDEA
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1736535.html
Copyright © 2020-2023  润新知