好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mass Framework css模块 v4

mass Framework css模块 v4

     if   ( win ) {

                     win.scrollTo(

                         !top ? val : $( win ).scrollLeft(),

                         top ? val : $( win ).scrollTop()

                         );

                 } else   {

                     this [ method ] = val;

                 }

             });

         };

     });

     var   pseudoAdapter = window.VBArray && $.query && $.query.pseudoAdapter

     if (pseudoAdapter){

         pseudoAdapter.hidden = function ( el ) {

             return   el.type === "hidden"   || $.css( el, "display" ) === "none"   ;

         }

     }

 

     function   getWindow( node ) {

         return   $.type(node, "Window" ) ?   node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false ;

     } ;

});

css模块依赖于node模块的cssName与cssMap,它们是框架支持CSS3新样式的关键。

css_fix模块源码(它是用于对旧式IE的支持——IE6-8)

?

//=========================================

//  样式补丁模块

//==========================================

define( "css_fix" , !!top.getComputedStyle, function (){

     $.log( "已加载css_fix模块" );

     var   adapter = $.cssAdapter = {},

     ie8 = !!top.XDomainRequest,

     rfilters = /[\w\:\.]+\([^)]+\)/g,

     salpha = "DXImageTransform.Microsoft.Alpha" ,

     rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,

     rposition = /^(top|right|bottom|left)$/,

     border = {

         thin:   ie8 ? '1px'   : '2px' ,

         medium: ie8 ? '3px'   : '4px' ,

         thick:  ie8 ? '5px'   : '6px'

     };

     adapter[ "_default:get"   ] = function (node, name){

         //取得精确值,不过它有可能是带em,pc,mm,pt,%等单位

         var   ret = node.currentStyle[name];

         if   (( rnumnonpx.test(ret) && !rposition.test(ret))) {

             //①,保存原有的style.left, runtimeStyle.left,

             var   style = node.style, left = style.left,

             rsLeft =  node.runtimeStyle.left ;

             //②由于③处的style.left = xxx会影响到currentStyle.left,

             //因此把它currentStyle.left放到runtimeStyle.left,

             //runtimeStyle.left拥有最高优先级,不会style.left影响

             node.runtimeStyle.left = node.currentStyle.left;

             //③将精确值赋给到style.left,然后通过IE的另一个私有属性 style.pixelLeft

             //得到单位为px的结果;fontSize的分支见 http://bugs.jquery.com/ticket/760

             style.left = name === 'fontSize'   ? '1em'   : (ret || 0);

             ret = style.pixelLeft + "px" ;

             //④还原 style.left,runtimeStyle.left

             style.left = left;

             node.runtimeStyle.left = rsLeft;

         }

         if ( ret == "medium"   ){

             name = name.replace( "Width" , "Style" );

             //border width 默认值为medium,即使其为0"

             if (arguments.callee(node,name) == "none "){

                 ret = " 0px ";

             }

         }

         //处理auto值

         if(rposition.test(name) && ret === " auto "){

             ret = " 0px ";

         }

         return ret === " " ? " auto " : border[ret] ||  ret;

     }

     //========================= 处理 opacity =========================

     adapter[ " opacity:get " ] = function( node ){

         //这是最快的获取IE透明值的方式,不需要动用正则了!

         var alpha = node.filters.alpha || node.filters[salpha],

         op = alpha ? alpha.opacity: 100;

         return ( op /100 )+" ";//确保返回的是字符串

     }

     // http://www.freemathhelp.com/matrix-multiplication.html

     adapter[ " opacity:set " ] = function( node, name, value ){

         var currentStyle = node.currentStyle, style = node.style;

         if(isFinite(value)){//" xxx " * 100 = NaN

             return

         }

         value = (value > 0.999) ? 100: (value < 0.001) ? 0 : value * 100;

         if(!currentStyle.hasLayout)

             style.zoom = 1;//让元素获得hasLayout

         var filter = currentStyle.filter || style.filter || " ";

         // http://snook.ca/archives/html_and_css/ie-position-fixed-opacity-filter

         //IE78的透明滤镜当其值为100时会让文本模糊不清

         if(value == 100  ){  //IE78的透明滤镜当其值为100时会让文本模糊不清

             // var str =  " filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100) Chroma(Color= '#FFFFFF' ) "+

             //   " progid:DXImageTransform.Microsoft.Matrix(sizingMethod= 'auto expand' , "+

             //   " M11=1.5320888862379554, M12=-1.2855752193730787,  M21=1.2855752193730796, M22=1.5320888862379558) ";

             value = style.filter = filter.replace(rfilters, function(a){

                 return /alpha/i.test(a) ? " " : a;//可能存在多个滤镜,只清掉透明部分

             });

             //如果只有一个透明滤镜 就直接去掉

             if(value.trim() == " " && style.removeAttribute){

                 style.removeAttribute( " filter " );

             }

             return;

         }

         //如果已经设置过透明滤镜可以使用以下便捷方式

         var alpha = node.filters.alpha || node.filters[salpha];

 

         if( alpha ){

             alpha.opacity = value ;

         }else{

             style.filter  += (filter ? " , " : " ")+ " alpha(opacity= "+ value +" ) ";

         }

     }

     //========================= 处理 user-select =========================

     //auto——默认值,用户可以选中元素中的内容

     //none——用户不能选择元素中的任何内容

     //text——用户可以选择元素中的文本

     //element——文本可选,但仅限元素的边界内(只有IE和FF支持)

     //all——在编辑器内,如果双击/上下文点击发生在子元素上,改值的最高级祖先元素将被选中。

     //-moz-none——firefox私有,元素和子元素的文本将不可选,但是,子元素可以通过text重设回可选。

     adapter[ " userSelect:set " ] = function( node, name, value ) {

         var allow = /none/.test(value) ? " on " : " ",

         e, i = 0, els = node.getElementsByTagName('*');

         node.setAttribute('unselectable', allow);

         while (( e = els[ i++ ] )) {

             switch (e.tagName.toLowerCase()) {

                 case 'iframe' :

                 case 'textarea' :

                 case 'input' :

                 case 'select' :

                     break;

                 default :

                     e.setAttribute('unselectable', allow);

             }

         }

     };

     //========================= 处理 background-position =========================

     adapter[ " backgroundPosition:get " ] = function( node, name, value ) {

         var style = node.currentStyle;

         return style.backgroundPositionX +"   "+style.backgroundPositionX

     };

 

});

github地址

做个小广告:

mass Framework是一个模块化的jQuery式框架,拥有jQuery 90%的常用方法,在语言处理,类,特效等方面都做了大量增强,是面向大规模开发的框架。现在jQuery也在做瘦身,把许多不常用的方法废弃掉,这样一来,大家在DOM处理上的API基本一致。mass Framework预计在年底完成升级,完成自己的MVVM框架与一个支持IE6的bootstrap式UI库。

 

 

标签:  javascript ,  mass

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于mass Framework css模块 v4的详细内容...

  阅读:44次