javascript常用函数封装——运动、cookie、ajax、获取行内样式兼容写法、拖拽
运动、cookie、ajax、获取行内样式兼容写法、拖拽封装大合集。
//url,data,type,timeout,success,error
function ajax(options){
//-1 整理options
options=options||{};
options.data=options.data||{};
options.timeout=options.timeout||0;
options.type=options.type||'get'; //0 整理data
var arr=[];
for(var key in options.data){
arr.push(key+'='+encodeURIComponent(options.data[key]));
}
var str=arr.join('&'); //1 创建ajax对象
if(window.XMLHttpRequest){
var oAjax=new XMLHttpRequest();//[object XMLHttpRequest]
}else{
var oAjax=new ActiveXObject('Microsoft.XMLHTTP')
} if(options.type=='get'){
//2.
oAjax.open('get',options.url+'?'+str,true);
//3.
oAjax.send();
}else{
//2.
oAjax.open('post',options.url,true);
//设置请求头
oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
oAjax.send(str);//身子
} //3.5 超时
if(options.timeout){
var timer=setTimeout(function(){
alert('超时了');
oAjax.abort();//中断ajax请求
},options.timeout);
} //4.
oAjax.onreadystatechange=function(){//当准备状态改变时
if(oAjax.readyState==4){//成功失败都会有4
clearTimeout(timer);
if(oAjax.status>=200 && oAjax.status<300 || oAjax.status==304){
options.success && options.success(oAjax.responseText);
}else{
options.error && options.error(oAjax.status);//http 0
}
}
}; };
function ajax(url,fnWin,fnFaild){
//1.创建ajax对象
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
//2.与服务器建立连接
xhr.open("GET",url,true);
//3.发送请求
xhr.send();
//4.接收服务器返回的信息
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
fnWin && fnWin(xhr.responseText);
}
}else{
fnFaild && fnFaild();
}
}
}
//创建cookie
function createCookie(key,value,expires,domain,secure){
var cookieText = encodeURIComponent(key) + "=" + encodeURIComponent(value) + ";path=/";
if(!isNaN(expires)){
if(typeof expires == "number" && expires > 0){
var date = new Date();
date.setDate(date.getDate() + expires);
cookieText += ";expires=" + date;
}
}
if(domain){
cookieText += ";domain=" + domain;
}
if(secure){
cookieText += ";secure";
}
document.cookie = cookieText;
} //获取cookie
function getCookie(key){
var keyText = encodeURIComponent(key) + "="
var start = document.cookie.indexOf(keyText); //找到开始位置
if(start != -1){
var end = document.cookie.indexOf(";",start); //找到结束位置
if(end == -1){
end = document.cookie.length;
}
var cookieValue = decodeURIComponent(document.cookie.substring(start + keyText.length,end));
}
return cookieValue;
} //删除cookie
function removeCookie(key){
document.cookie = key + "=;expires=" + new Date(0) + ";path=/";
}
function drag(obj){
var arr = [];
obj.onmousedown = function(event){
arr = []; //清空数组
var e = event || window.event;
var disX = e.offsetX;
var disY = e.offsetY;
document.onmousemove = function(evt){
var e = evt || window.event;
var L = e.clientX - disX;
var T = e.clientY - disY;
if(L < 0){
L = 0; //左边界
}else if(L > document.documentElement.clientWidth - obj.offsetWidth){ //右边界
L = document.documentElement.clientWidth - obj.offsetWidth;
}
if(T < 0){
T = 0; //上边界
}else if(T > document.documentElement.clientHeight - obj.offsetHeight){ //下边界
T = document.documentElement.clientHeight - obj.offsetHeight;
}
obj.style.left = L + "px";
obj.style.top = T + "px";
arr.push({"left":obj.offsetLeft,"top":obj.offsetTop});
}
document.onmouseup = function(){
document.onmousemove = null;
}
}
}
function drag(obj){
obj.onmousedown = function(evt){
var e = evt || window.event;
//获取鼠标当前的相对坐标值
var disX = e.offsetX;
var disY = e.offsetY;
document.onmousemove = function(evt){
var e = evt || window.event;
obj.style.left = e.clientX - disX + "px";
obj.style.top = e.clientY - disY + "px";
}
document.onmouseup = function(){
document.onmousemove = null;
}
}
//去掉拖拽的默认行为(禁拖行为);
document.ondragstart = function(){
return false;
}
}
/*
* 一、获取非行内样式
* 1. 兼容
* IE 对象.currentStyle.属性
* 标准 getComputedStyle(对象,1).属性
* 二、运动框架
* 1.计时器
* 1》设置开关:作用何时退出计时器
* 2》遍历json
* (1)获取对象属性的当前值
* 注:兼容
* 透明度(处理小数)
* 其它属性值(处理单位)
* (2)计算速度
* 匀速运动(处理停止条件)
* 缓冲运动(处理小数)
* (3)判断json中所有的属性是否达到目标值
* (4)设置运动(改变CSS值)
* 3》检测停止(当开关为true时,停止计时器)
*/
//获取非行内样式的兼容
function getStyle(obj,attr){
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true)[attr];
}
function sport(obj,json,fn){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var stop = true;
for(var attr in json){
//获取当前值
var current = 0;
if(attr == "opacity"){
current = parseInt(parseFloat(getStyle(obj,attr)) * 100);
}else{
current = parseInt(getStyle(obj,attr));
}
//计算速度
//缓冲运动
var speed = (json[attr] - current) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(current != json[attr]){
stop = false;
}
if(attr == "opacity"){
obj.style.opacity = (current + speed) / 100;
obj.style.filter = "alpha(opacity=" + (current + speed) + ")";
}else{
obj.style[attr] = current + speed + "px";
}
}
if(stop){
clearInterval(obj.timer);
fn && fn();
}
},30);
}
javascript常用函数封装——运动、cookie、ajax、获取行内样式兼容写法、拖拽的更多相关文章
- 【封装函数】原生js 获取行内外联样式-兼容IE
var dom=document.getElementsByTagName("div")[0]; console.log(getStyle(dom,"padding-to ...
- JavaScript的DOM_操作行内样式
一.检测浏览器是否支持css CSS 作为(X)HTML 的辅助,可以增强页面的显示效果.但不是每个浏览器都能支持最新的 CSS 能力.CSS 的能力和 DOM 级别密切相关,所以我们有必要检测当前浏 ...
- php文件操作(最后进行文件常用函数封装)
文件信息相关API $filename="./1-file.php"; //filetype($filename):获取文件的类型,返回的是文件的类型 echo '文件类型为:', ...
- JavaScript常用函数
JavaScript常用函数 常规函数 数组函数 日期函数 数学函数 字符串函数 常规函数 (1)alert函数:显示一个警告对话框,包括一个OK按钮.(alert("输入错误") ...
- 【javascript】javascript常用函数大全
javascript函数一共可分为五类: •常规函数 •数组函数 •日期函数 •数学函数 •字符串函数 1.常规函数 javascript常规函数包括以下9个函数: ( ...
- js获取非行内样式
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- window的三大功能,行内样式获取的讲解 getcomputerStyle
window的三大功能: js引擎 dom渲染 获取行内中css的属性: chrome和Firefox加上 ie9+(所谓的高级浏览器)用的方法: window.getComeputerStyle(d ...
- 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)
Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...
- Javascript:常用函数封装
//cookie function setCookie(name, value, iDay) { if(iDay!==false) { var oDate=new Date(); oDate.setD ...
随机推荐
- Ubuntu下使用sublime text进行py开发
放弃了,半天弄不出一个方便的开放环境,还是现成的iDE方便 下载方法 https://www.sublimetext.com/docs/3/linux_repositories.html 首先安装Pa ...
- (LIS) P1091 合唱队形 洛谷
题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...
- day-04(jquery)
回顾: js: 组成部分: ECMAScript BOM DOM 变量声明 var 变量名=初始化值; 数据类型: 原始类型 Undefined Null String Number Boolean: ...
- python中字符编码及unicode和utf-8区别
ascii和unicode是字符集,utf-8是编码集 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point) 编码规则:将「码位」转换为字节序列的规则(编码/ ...
- Java NIO系列教程(八)JDK AIO编程
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- Kafka技术内幕 读书笔记之(三) 生产者——消费者:高级API和低级API——基础知识
1. 使用消费组实现消息队列的两种模式 分布式的消息系统Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上:消费者也可以消费集群中多个节点的多个分区上的消息 . 写 ...
- STM32学习笔记:【004】USART串口通信
版本:STM32F429 Hal库v1.10 串口通信能够实现两块电路之间不同的通信,在开发中作为打印调试也是一门利器(printf重定向). 补充一点小知识: 1. weak修饰符修饰的函数,说明这 ...
- Django之组件--forms
forms组件(详细) 功能: 1 校验字段功能 2 渲染标签功能 3 渲染错误信息功能 4 组件的参数配置 5 局部钩子 6 全局钩子 类中使用: 1.定义 from django import f ...
- Maven 本地仓库,远程仓库,中央仓库,Nexus私服,镜像 详解
一. 本地仓库 本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库.这样在你下次使用的时候就不需要从远程下 ...
- Timus 1132 Square Root(二次剩余)
http://acm.timus.ru/problem.aspx?space=1&num=1132 题意: 求 x^2 ≡ n mod p p是质数 的 解 本题中n>=1 特判p=2 ...