eduWeb/js/ujiuye.js

266 lines
8.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// js的函数库
// 获取元素的非行间样式
function getStyle(ele, attr) {
// ele: 元素
// attr: 属性名
if (window.getComputedStyle) {
// 标准
// console.log(window.getComputedStyle(ele)[attr]);
return window.getComputedStyle(ele)[attr];
} else {
// ie8及以下
// console.log(ele.currentStyle[attr]);
return ele.currentStyle[attr];
}
}
// 运动函数
function move(ele, attr, step, tar) {
// ele: 元素
// attr: 属性
// step: 每一步距离 0-1000 +10 1000-0 -10
// tar: 目标值
// 为了用户的方便,每一步是加还是减,需要函数内来进行判断
var cur = parseInt(getStyle(ele, attr));
step = cur < tar ? step : -step;
// 开启新的定时器之前,先清除定时器
clearInterval(ele.t);
// 要想不间断移动,开启定时器
ele.t = setInterval(function () {
// 每一次都基于当前的left减少10px
var cur = parseInt(getStyle(ele, attr));
var end = cur + step;
console.log(end, tar);
// 判断是否到达目标值
if (step > 0 && end >= tar || step < 0 && end <= tar) {
end = tar;
clearInterval(ele.t);
}
// 将计算以后的结束值赋值给ele的left
ele.style[attr] = end + 'px';
}, 20);
}
// 获取随机验证码
function getCode(n, str) {
str = str ? str : '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
n = n ? n : 4;
// 存储获取到字母
var s = '';
// 随机6位验证码
// 得到6次随机数
for (var i = 0; i < n; i++) {
var num = Math.floor(Math.random() * str.length);
s += str[num];
}
// 设置返回值
return s;
}
// 给10以下数字 补0操作
function add0(val) {
if (val < 10) {
val = '0' + val;
} else {
val = val;
}
return val;
}
// 有目的性的函数: 创建一个标签
function createEle(ele, text) {
// ele: 创建什么节点
// text: td中的内容传递过来
var td4 = document.createElement(ele);
td4.innerHTML = text;
return td4;
}
// 添加事件绑定
function addEvent(ele, type, fn) {
// ele: 元素
// type: 事件类型
if (ele.attachEvent) {
// ie8
ele.attachEvent('on' + type, fn);
} else {
// 标准
ele.addEventListener(type, fn, false);
}
}
// 事件取消
function removeEvent(ele, type, fn) {
// ele: 元素
// type: 事件类型
// fn: 函数
if (ele.detachEvent) {
// ie8
ele.detachEvent('on' + type, fn);
} else {
// 标准
ele.removeEventListener(type, fn, false);
}
}
// 空函数:拖拽
function drag(elem) {
// elem: 元素
// 添加按下事件
elem.onmousedown = function (evs) {
// 按下的瞬间,获取鼠标当前的位置 事件对象
var ev = window.event || evs;
// l1 = x1 - ol; l1: 鼠标距离元素左侧的距离 x1: 鼠标距离屏幕左侧的距离 ev.clientX
var l1 = ev.clientX - elem.offsetLeft;
var t1 = ev.clientY - elem.offsetTop;
document.onmousemove = function (evs) {
// 元素动一下 left移动10px
// elem.style.left = 50 + 'px';
// 鼠标移动的位置 事件对象
var ev = window.event || evs;
// 设置给元素的l l = cx - l1; cx: 鼠标距离屏幕左侧的距离 - 鼠标距离元素左侧的距离
var le = ev.clientX - l1;
var to = ev.clientY - t1;
// 判断临界值
if (le <= 0) {
le = 0;
}
if (to <= 0) {
to = 0;
}
var lMax = document.documentElement.clientWidth - elem.offsetWidth;
if (le >= lMax) {
le = lMax;
}
var tMax = document.documentElement.clientHeight - elem.offsetHeight;
if (to >= tMax) {
to = tMax;
}
// 赋值给elem
elem.style.left = le + 'px';
elem.style.top = to + 'px';
}
// elem设置全局捕获
if (elem.setCapture) {
elem.setCapture();
}
return false;
}
// 添加抬起事件
document.onmouseup = function () {
document.onmousemove = null;
// 释放全局捕获
if (elem.releaseCapture) {
elem.releaseCapture();
}
}
}
// 缓冲运动
function buffMove(ele, object, fn) {
// ele: 元素
// object: 属性和目标值
// fn: 回调函数
// 获取每一个属性判断有没有透明度
for (var key in object) {
if (key == 'opacity') {
object[key] = object[key] * 100
}
}
// 清除定时器,保证一次只有一个定时器在动
clearInterval(ele.timer);
ele.timer = setInterval(function () {
// 不知道要不要清除定时器 假设需要清除
var flag = true;
for (var key in object) {
if (key == 'opacity') {
// 当前透明度 0-1 0-100
var cur = getStyle(ele, key) * 100;
} else {
// 每一次从当前位置 获取当前位置 981.95 用parseInt-->981
var cur = parseInt(getStyle(ele, key));
}
// 速度 路程/时间
var speed = (object[key] - cur) / 20;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
var end = cur + speed;
// 判断有没有到达目标值 如果没有到目标值,一个没到,都不能清除
if (end != object[key]) {
// 没到
flag = false;
}
if (key == 'opacity') {
ele.style[key] = end / 100;
} else {
// 赋值给ele
ele.style[key] = end + 'px';
}
}
// flag为true 假设成立 需要清除 动作已经结束
if (flag) {
clearInterval(ele.timer);
fn && fn();
}
}, 20);
}
// 请求数据的ajax函数
function Ajax(type, url, string, fn) {
// type: 请求方式
// url: 请求地址
// string: 请求参数
// fn: 请求完成后要执行的函数
// 1. 创建ajax对象
var ajax = new XMLHttpRequest();
// 建立连接: ajax对象.open(请求方式, 请求地址 + ? + 请求参数, 是否异步);
if (type == 'get') {
ajax.open(type, url + '?' + string, true);
// 3. 发送请求: ajax对象.send();
ajax.send();
} else {
ajax.open(type, url, true);
// 2.1 设置头请求
ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=utf-8');
// 3. 发送请求: ajax对象.send();
ajax.send(string);
}
// 4. 添加事件监听: ajax对象.onreadystatechange事件
ajax.onreadystatechange = function () {
if (ajax.readyState == 4 && ajax.status == 200) {
// 5. 得到请求返回的数据 ajax对象.response
fn(ajax.response);
}
}
}
// 面向对象的选项卡
function ChangeDiv(parent) {
// 获取元素
var par = document.getElementById(parent);
this.divs = par.getElementsByTagName('div');
this.btns = par.getElementsByTagName('button');
// 外头能得到正确的this 存一下
var that = this;
// 点击每一个btn
for (var i = 0; i < this.btns.length; i++) {
this.btns[i].index = i;
// this.btns[i].onclick = this.cFn;
this.btns[i].onclick = function () {
// 点击事件中 this指向触发源 this.btns[i]
that.cFn(this.index);
};
}
}
ChangeDiv.prototype.cFn = function (ind) {
// 显示div 下标一一对应 按钮的下标
// 当前点击事件中得不到正确的对象的this
for (var j = 0; j < this.divs.length; j++) {
this.divs[j].style.display = 'none';
}
this.divs[ind].style.display = 'block';
}