公用js函数库

  1 // 当前公用函数
  2 
  3 // 获取非行间样式
  4 function getStyle(ele, attr) {
  5     // ele: 元素
  6     // attr: 属性
  7     var w = 0;
  8     if (ele.currentStyle) {
  9         // ie678
 10         // console.log(ele.currentStyle[attr]); // 200px
 11         w = ele.currentStyle[attr];
 12     } else {
 13         // 标准
 14         // console.log(getComputedStyle(ele)[attr]); // 200px
 15         w = getComputedStyle(ele)[attr];
 16     }
 17     return w;
 18 }
 19 
 20 // 运动函数
 21 var timer = null;
 22 function move(ele, attr, step, target) {
 23     // ele: 元素
 24     // attr: 属性
 25     // step: 每一步的像素
 26     // target: 目标值
 27     // 8. 清除定时器
 28     clearInterval(timer);
 29 
 30     // 9. 判断当前起始值 和 目标值的关系  
 31     /* 
 32         起始值  目标值
 33           0     100    正数
 34           100    0     负数
 35     */
 36     // 获取起始值  和 目标值(target)
 37     var start = parseInt(getStyle(ele, attr));
 38 
 39     step = start > target ? -step : step;
 40 
 41     // 6. 点击一次 让div 逐渐减小到0  500开始不间断的一直减小 直到0为止
 42     timer = setInterval(function () {
 43         // 3. 获取当前值
 44         var cur = parseInt(getStyle(ele, attr));
 45         // 4. 计算结束值  a - 10  === a + (-10)
 46         var end = cur + step;
 47 
 48         // 7. 判断 ele 的left是不是到达0
 49         if (step < 0 && end <= target || step > 0 && end >= target) {
 50             end = target;
 51             // 8. 清除定时器
 52             clearInterval(timer);
 53         }
 54 
 55         // 5. 赋值给ele的left
 56         ele.style[attr] = end + 'px';
 57     }, 20);
 58 }
 59 
 60 // 获取验证码
 61 // 0-9  a-z  没有传string   string当前值是undefined
 62 function getCode(len, string) {
 63     // len: 验证码的长度
 64     // string: 可传可不传
 65     if (!string) {
 66         var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
 67     } else {
 68         var str = string;
 69     }
 70     // 有一个变量存储 随机验证码
 71     var strNew = '';
 72     // 每一次都要生成一个随机数
 73     for (var i = 0; i < len; i++) {
 74         // str中选出随机的字符---随机下标
 75         var num = Math.floor(Math.random() * str.length);
 76         // console.log(num, str[num]);
 77         strNew += str[num];
 78     }
 79     return strNew;
 80 }
 81 
 82 // 将小于10的数字变成2位数
 83 function toTwo(num) { // num = 1
 84     num = num < 10 ? '0' + num : num;
 85     return num;
 86 }
 87 
 88 // 不重复随机验证码
 89 // 0-9  a-z  没有传string   string当前值是undefined
 90 function getNoRCode(len, string) {
 91     // len: 验证码的长度
 92     // string: 可传可不传
 93     if (!string) {
 94         var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
 95     } else {
 96         var str = string;
 97     }
 98     // 有一个变量存储 随机验证码
 99     var strNew = '';
100     // 每一次都要生成一个随机数
101     for (var i = 0; i < len; i++) {
102         // str中选出随机的字符---随机下标
103         var num = Math.floor(Math.random() * str.length);
104         // console.log(num, str[num]);
105         // strNew += str[num];
106         // 下标对应的字符 在新的字符串中有还是没有  没有的话 加进去 有的话本轮循环作废 i--
107         if (strNew.indexOf(str[num]) == -1) {
108             // 没有
109             strNew += str[num];
110         } else {
111             i--;
112         }
113     }
114     return strNew;
115 }
116 
117 // 创建标签
118 function createE(ele, txt) {
119     // ele: 创建的标签
120     // txt: 标签中的内容
121     var td3 = document.createElement(ele);
122     td3.innerHTML = txt;
123     return td3;
124 }
125 
126 // 去重数组
127 function qc(array) {
128     var na = [];
129     for (var i = 0; i < array.length; i++) {
130         if (na.indexOf(array[i]) == -1) {
131             na.push(array[i]);
132         }
133     }
134     // console.log(na);
135     return na;
136 }
137 
138 // 事件绑定兼容
139 function addE(ele, type, fn) {
140     // ele: 元素
141     // type: 事件类型
142     // 用某个方法是否存在来作为判断条件
143     if (ele.addEventListener) {
144         // 标准
145         ele.addEventListener(type, fn, false);
146     } else {
147         // ie8
148         ele.attachEvent('on' + type, fn);
149     }
150 }
151 
152 // 事件绑定取消
153 function removeE(ele, type, fn) {
154     if (ele.removeEventListener) {
155         ele.removeEventListener(type, fn, false);
156     } else {
157         ele.detachEvent('on' + type, fn);
158     }
159 }
160 
161 
162 // 封装判断滚轮方向的函数
163 function getD(evs) {
164     // evs: 事件对象
165     if (evs.wheelDelta) {
166         // chrome  ie
167         return evs.wheelDelta > 0 ? '上' : '下';
168     } else {
169         // ff
170         return evs.detail > 0 ? '下' : '上';
171 
172     }
173 }
174 
175 // 拖拽函数
176 function drag(ele) {
177     // 按下div
178     ele.onmousedown = function (evs) {
179         // 添加全局捕获
180         if (ele.setCapture) {
181             ele.setCapture();
182         }
183         var ev = window.event || evs;
184         // 鼠标距离页面左侧的距离  元素距离页面左侧的距离
185         // console.log(ev.clientX, ele.offsetLeft);
186         // 求鼠标距离元素左侧的距离ml: 鼠标距离页面的距离cx1 - 元素距离页面左侧的距离ol
187         var ml = ev.clientX - ele.offsetLeft;
188         var mt = ev.clientY - ele.offsetTop;
189         // 移动事件
190         document.onmousemove = function (evs) {
191             // 移动过程中 求出移动的ele的left值: l = cx - ml
192             var ev = window.event || evs;
193             var l = ev.clientX - ml;
194             var t = ev.clientY - mt;
195 
196             var maxw = document.documentElement.clientWidth - ele.offsetWidth;
197             var maxh = document.documentElement.clientHeight - ele.offsetHeight;
198             // 判断条件
199             if (l <= 0) {
200                 l = 0;
201             }
202             if (t <= 0) {
203                 t = 0;
204             }
205             if (l >= maxw) {
206                 l = maxw;
207             }
208             if (t >= maxh) {
209                 t = maxh;
210             }
211             ele.style.left = l + 'px';
212             ele.style.top = t + 'px';
213         }
214         // 抬起清除移动事件
215         document.onmouseup = function () {
216             document.onmousemove = null;
217             if (ele.releaseCapture) {
218                 ele.releaseCapture();
219             }
220         }
221 
222         return false;
223     }
224 }
225 
226 // 缓冲运动函数
227 function buffMove(ele, json, fn) {
228     clearInterval(ele.wc);
229     ele.wc = setInterval(function () {
230         var tag = true; // true---表示已经到达目标值  false--表示没到
231         // 获取每一个属性  for-in
232         for (var key in json) {
233             // 基于当前的数据  改变一次
234             // 获取当前属性的当前值
235             var l = getStyle(ele, key);
236             if (key == 'opacity') {
237                 l = l * 100;
238             } else {
239                 l = parseInt(l);
240             }
241             // console.log(l);
242 
243             var speed = (json[key] - l) / 20;
244             speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
245             var end = l + speed;
246             if (end != json[key]) {
247                 tag = false;
248             }
249             if (key == 'opacity') {
250                 ele.style[key] = end / 100;
251             } else {
252                 // 4. 赋值给ele
253                 ele.style[key] = end + 'px';
254             }
255         }
256         // 如果for循环走完 tag还是true  表示假设成立  到达目标值  如果是false 表示没有到达目标
257         if (tag) {
258             // 清除定时器
259             clearInterval(ele.wc);
260             // 表示第一个动画执行结束
261             console.log(fn);
262             fn && fn();
263         }
264     }, 20);
265 }
266 
267 // 面向对象的选项卡
268 function Tab(id) {
269     this.id = id;
270     this.btns = null;
271     this.ps = null;
272 
273     var cont = document.getElementById(this.id);
274     this.btns = cont.getElementsByTagName('button');
275     this.ps = cont.getElementsByTagName('p');
276     var that = this;
277     // 添加 每个按钮
278     for (var i = 0; i < this.btns.length; i++) {
279         this.btns[i].index = i;
280         // this.btns[i].onclick = this.tip;
281         this.btns[i].onclick = function () {
282             that.tip(this.index);
283         };
284     }
285 }
286 
287 Tab.prototype.tip = function (ind) {
288     // 显示对应的内容盒子  盒子和按钮的关系 下标相同
289     for (var j = 0; j < this.ps.length; j++) {
290         this.ps[j].className = '';
291     }
292     this.ps[ind].className = 'active';
293 }
294 
295 // ajax请求数据
296 function ajax(type, url, data, fn) {
297     // type: 请求方式 get  post
298     // url: 请求地址
299     // data: 请求参数
300     // fn: ajax请求成功后的执行的函数 
301     var ajax = new XMLHttpRequest();
302 
303     if (type == 'post') {
304         // post
305         // 建立连接
306         ajax.open(type, url, true);
307         // 设置请求头
308         ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=utf-8');
309         // 发送请求
310         ajax.send(data);
311     } else {
312         // get
313         ajax.open(type, url + '?' + data, true);
314         // 3. 发送请求
315         ajax.send();
316     }
317 
318     // 监听事件
319     ajax.onreadystatechange = function () {
320         if (ajax.readyState == 4 && ajax.status == 200) {
321             fn(ajax.response); // 传实参
322         }
323     }
324 }

 

 

posted @ 2021-01-18 14:41  花月  阅读(147)  评论(0)    收藏  举报