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


    原生透明判定是浏览器特征侦探的重要一环,之后的许多特效就靠它选择是原生透明还是滤镜透明。自从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",
    
  • 相关阅读:
    C风格字符串大写转小写
    指针的引用在函数中的应用
    Debug和Release区别
    差分约束系统(System Of Difference Constraints)
    poj_2299UltraQuickSort && poj_1804Brainman
    计算几何基础——矢量和叉积
    推荐ALGORITHM专题
    后缀数组之倍增法
    静态邻接表的简单实现
    归并排序&&树状数组求逆序数
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1736535.html
Copyright © 2020-2023  润新知