ajax及查询字符串的封装
function $ajax({method = "get", url, data,success,error}){
var xhr = null;
try{
xhr = new XMLHttpRequest();
}catch(error){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
if(data){
data = querystring(data);
}
if(method == "get" && data){
url += "?" + data;
}
xhr.open(method, url, true);
if(method == "get"){
xhr.send();
}else{
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
xhr.send(data);
}
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
if(success){
var type = xhr.getResponseHeader('Content-Type')
if(type.indexOf('json') != -1){
success(JSON.parse(xhr.responseText));
}
else if(type.indexOf('xml') != -1){
success(xhr.responseXML);
}
else{
success(xhr.responseText);
}
}
}else{
if(error){
error("Error:" + xhr.status);
}
}
}
}
}
function querystring(obj){
var str = "";
for(var attr in obj){
str += attr + "=" + obj[attr] + "&";
}
return str.substring(0, str.length - 1);
}
按需加载
function demandLoadingScript(url, callBack) {
let script = document.createElement('script')
if(script.readyState) {
script.onreadystatechange = function() {
if(script.readyState == 'complete' || script.readyState == 'loaded') {
callBack()
}
}
}else {
script.onload = function() {
callBack()
}
}
script.src = url
script.body.appendChild(script)
}
自定义时间
function showTime(){
var d = new Date()
var year = d.getFullYear();
var month = d.getMonth() + 1;
var date = d.getDate();
var week = d.getDay();
week = changesize(week);
var hour = d.getHours();
hour = dounbleNum(hour);
var min = d.getMinutes();
min = dounbleNum(min);
var sec = d.getSeconds();
sec = dounbleNum(sec);
return year + "年" + month + "月" + date +"日 星期" + week + " " + hour + "时" + min + "分" + sec + "秒";
}
function changesize(num){
var arr = ["日", "一", "二", "三", "四", "五", "六"];
return arr[num];
}
function dounbleNum(num){
if(num >=0 && num <=9){
return "0" + num;
}else{
return num;
}
}
完美运动(包含了颜色变化,一系列运动...
function startMove(node, cssObj, complete){
clearInterval(node.timer);
node.timer = setInterval(function(){
var isEnd = true;
for(var attr in cssObj){
var iTarget = cssObj[attr];
var iCur = null;
if(attr == "opacity"){
iCur = parseInt(parseFloat(getStyle(node, "opacity")) * 100);
}else{
iCur = parseInt(getStyle(node, attr))
}
var speed = (iTarget - iCur) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(attr == "opacity"){
iCur += speed;
node.style.opacity = iCur / 100;
node.style.filter = "alpha(opacity=" + iCur + ")";
}else{
node.style[attr] = iCur + speed + 'px';
}
if(iCur != iTarget){
isEnd = false;
}
}
if(isEnd){
clearInterval(node.timer);
if(complete){
complete.call(node);
}
}
}, 30);
}
function getStyle(node, cssStr){
return node.currentStyle ? node.currentStyle[cssStr] : getComputedStyle(node)[cssStr];
}
类型判断
function type(target) {
let temp = {
"[object Object]": 'object',
"[object Array]": 'array',
"[object String]": 'string - object',
"[object Number]": 'number - object',
"[object Boolean]": 'boolean - object'
}
if(target === null) {
return null
}else if((typeof target) === 'object') {
let str = Object.prototype.toString.call(target)
return temp[str]
}else {
return typeof target
}
}
数组去重
function unique(arr) {
let obj = {}
let arr1 = []
for(let key of arr) {
if(!obj[key]) {
obj[key] = "zh"
arr1.push(key)
}
}
return arr1
}
不用node.children属性,自己封装一个获取所有子元素节点的函数
function myChild(parentElem) {
let elem = parentElem.childNodes
let elemChild = []
for(let index in elem) {
if(elem[index].nodeType === 1) {
elemChild.push(elem[index])
}
}
return elemChild
}
获取滚动条滚动的位置
function getScrollOffset() {
if(window.pageXOffset) {
return {
x: pageXOffset,
y: pageYOffset
}
}else {
return {
x: document.body.scrollLeft + document.documentElement.scrollLeft,
y: document.body.scrollTop + document.documentElement.scrollTop
}
}
}
获取可视窗口的高度和宽度
function getViewPortOffset() {
if(window.innerWidth) {
return {
h: window.innerHeight,
w: window.innerWidth
}
}else {
if(document.compatMode === "BackCompat") {
return {
h: document.body.clientHeight,
w: document.body.clientWidth
}
}else {
return {
h: document.documentElement.clientHeight,
w: document.documentElement.clientWidth
}
}
}
}
添加事件和移除事件
function addEvent(node,type,funName){
if(node.addEventListener){
node.addEventListener(type,funName,false);
}else{
node.attachEvent("on" + type,function(){
funName.call(node);
})
}
}
function removeEvent(node,type,funName){
if(node.removeEventListener){
node.removeEventListener(type,funName,false);
}else{
node.detachEvent("on" + type,funName);
}
}
获取子元素距离视口的宽高
function getCurrentLeft(obj){
var currentLeft = obj.offsetLeft;
var parent = obj.offsetParent;
while( parent != null){
currentLeft += parent.offsetLeft + parent.clientLeft;
parent = parent.offsetParent;
}
return currentLeft;
}
function getCurrentTop(obj){
var currentTop = obj.offsetTop;
var parent = obj.offsetParent;
while( parent != null){
currentTop += parent.offsetTop + parent.clientTop;
parent = parent.offsetParent;
}
return currentTop;
}
拖拽并防止出界
function limitDrag(node){
node.onmousedown = function(ev){
var e = ev || window.event;
var offsetX = e.clientX - node.offsetLeft;
var offsetY = e.clientY - node.offsetTop;
document.onmousemove = function(ev){
var e = ev || window.event;
var l = e.clientX - offsetX;
var t = e.clientY - offsetY;
if(l <= 0){
l = 0;
}
var windowWidth = document.documentElement.clientWidth || document.body.clientWidth;
if(l >= windowWidth - node.offsetWidth){
l = windowWidth - node.offsetWidth;
}
if(t <= 0){
t = 0;
}
var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
if(t >= windowHeight - node.offsetHeight){
t = windowHeight - node.offsetHeight;
}
node.style.left = l + 'px';
node.style.top = t + 'px';
}
}
document.onmouseup = function(){
document.onmousemove = null;
}
}
阻止事件冒泡
function stopBubble(event) {
if(event.stopPropagation) {
event.stopPropagation()
}else {
event.cancelBubble = true
}
}
阻止默认行为
function cancelHandler(event) {
if(event.preventDefault) {
event.preventDefault()
}else {
event.returnValue = false
}
}