eduWeb/js/ujiuye.js

266 lines
8.0 KiB
JavaScript
Raw Permalink Normal View History

2022-08-28 18:09:27 +08:00
// 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';
}