Helius
2020-12-19 a9bb3348487c4a75c6a74a4d84f3a8afe9858d0c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**
 * Created by maggie on 16/9/23.
 */
 
//访问js下浏览器窗口的盒子模型属性
 
//这个方法有两种用法
//1.只传一个参数attr 则就是访问这个参数对应的属性值
//2.传2个参数,就是要修改attr属性值(不管你想修改哪个属性,
// 其实只能修改scrollTop和scrollLeft的值)
 
function win(attr,value) {
    if(typeof value==="undefined")
    {
        //只有一个attr值,没有Value值意味着是要获得属性的值
 
       var v= document.documentElement[attr]|| document.body[attr];
 
       return v;
    }
    //设置
    document.documentElement[attr]=value;
    document.body[attr]=value;
 
}
 
//获得页面中任何一个元素的顶部边框距离body的顶部边框的距离
function offset(curElement) {
    var  totalLeft=0;//最终保存这个元素距离body边界的长度
    var  totalTop=0;
    var  parent=curElement.offsetParent;
 
    totalLeft+=curElement.offsetLeft;
    totalTop+=curElement.offsetTop;
    while(parent)
    {
         //首先累加父级参照物的边框
        totalLeft+=parent.clientLeft;
        totalTop+=parent.clientTop;
 
        totalLeft+=parent.offsetLeft;
        totalTop+=parent.offsetTop;
        parent=parent.offsetParent;
    }
    return {left:totalLeft,top:totalTop};
}
 
//获取某个元素的任意一个样式的值
function  getCss(curEle,attr) {
    var val=null,reg=null;
    if(window.getComputedStyle)
//    if("getComputedStyle" in window)
//    if(typeof window.getComputedStyle ==="function")
//    if(navigator.userAgent.indexOf("MS IE")===-1)
    {
        val=window.getComputedStyle(curEle,null)[attr];
    }else
    {
        if(attr==="opacity")
        {
            val=curEle.currentStyle["filter"];
           //progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"
            reg=/Alpha\(Opacity=(\d+(\.\d+)?)\)$/i;
            val=reg.test(val)?reg.exec(val)[1]/100:1;
            return val;
        }else
        {
            val= curEle.currentStyle[attr];
        }
    }
    //使用正则表达式测试属性值是不是数字+单位的形式
     reg=/^(-?\d+(\.\d+)?)(px|pt|em|rem)?$/i;
     val=reg.test(val)?parseFloat(val):val;
    return val;
}
 
function setCss(curEle,attr,value) {
    if(attr==="float")
    {
        curEle.style.cssFloat=value;
        curEle.style.styleFloat=value;
        return;
    }
    if(attr==="opacity")
    {
        curEle["style"]["opacity"]=value;
        curEle["style"]["filter"]="Alpha(opacity="+value*100+")";
        return;
    }
    //自动给数值的属性添加单位
    // width height top bottom left right margin padding
    //marginTop marginLeft  marginRight marginBottom
    //paddingTop ......
    var reg=/^(width|height|top|bottom|left|right|((margin|padding)(Top|Left|Right|Bottom)?))$/;
    if(reg.test(attr))
    {
        if(!isNaN(value))
        {
            value+="px";
        }
    }
    curEle["style"][attr]=value;
 
}
 
//一次设置多个属性的方法
   //  setMultCss(box,  {width:400px,height:300px,backgroud:#c1c1c1})
function   setMultCss(curEle, attrObj) {
 
    // attrObj =  attrObj|| 0;
    // if(attrObj.toString()!=="[object Object]")
    // {
    //     return;
    // }
 
    for(var key in attrObj)
    {
          if(attrObj.hasOwnProperty(key))
          {
              setCss(curEle,key,attrObj[key]);
          }
    }
 
}
 
//2个参数时,  curEle  attr 获取attr属性的值
//
//3个参数时   curEle attr  value 设置一个attr属性的值
//           curEle  obj 设置多个属性的值
 
function css(curEle)
{
    var argTwo =   arguments[1];
    if(typeof argTwo ==="string")
    {
         //判断有没有第3个参数
        var argThree=arguments[2];
        if(typeof argThree==="undefined")
        {
            //是获取css属性
            return getCss(curEle,argTwo);
        }
        //有第3个参数 那么就是调用setCss
        setCss(curEle,argTwo,argThree);
        return;
    }
    //是2个参数 并且第2个参数是obj类型  所以应该是设置多个css属性
    argTwo =  argTwo|| 0;
    if(argTwo.toString()!=="[object Object]")
    {
        return;
    }
    setMultCss(curEle,argTwo);
}